Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
Порекомендуйте библиотеку под Ява, которая может считать 2-3 хмл файла(общий размер ~ 3 гигабайта), распарсить
, сделать трансформации - sort, group by , join entities , и вывести в результирующий файл.
Ищется что-то похожеее на Питновскую pandas и dask, которые не поперхнувшись жуют гигабайтовые файлы, делают групповые трансформации и пишут на диск.
25 май 21, 11:14    [22326642]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
Основная проблема то - что большинство библиотек, при файлах выше гигабайта, выбивают out of memory :)
25 май 21, 11:15    [22326645]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv,
Как то сумбурно. Почему сразу три в оперативку а не по частям?
25 май 21, 11:19    [22326648]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv
Основная проблема то - что большинство библиотек, при файлах выше гигабайта, выбивают out of memory :)
потому что глупо считать xml как субд
25 май 21, 11:20    [22326649]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
Да, согласен, архитектурно - стоило встать базу данных, и делать трансформации в базе данных.
Но я пришел на проект на фазе, когда уже все написано, на малых обьемах работает, а на продакшне
вылетает. Таким образом - теперь это мой головняк.
Просто самым быстрым, мне кажется, переписать под библиотеку которая приспособлена под большие данные.
Хотя может и ошибаюсь, поэтому и обращаюсь на форум, может кто-то поделиться идеями.
25 май 21, 11:24    [22326651]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv,
Замечательно что согласен.
Теперь плиз код с ошибкой для ОДНОГО ФАЙЛА а не трех
25 май 21, 11:33    [22326661]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
Ну я вижу, люди реализовали трансоформацию одного файла, из xml в csv с помощью XSLT движка , ну
и вполне ожидаемо - out of memory пишет движок.

То есть я хочу это дело переписать под яву, используя фрамеворк.
25 май 21, 11:40    [22326669]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
Подозреваю под капотом этого движка dom модель парсинга xml, что безусловно плохое решение.
Пытаюсь найти хорошее решение.
25 май 21, 11:41    [22326670]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5687
razliv
Порекомендуйте библиотеку под Ява, которая может считать 2-3 хмл файла(общий размер ~ 3 гигабайта), распарсить
, сделать трансформации - sort, group by , join entities , и вывести в результирующий файл.
Ищется что-то похожеее на Питновскую pandas и dask, которые не поперхнувшись жуют гигабайтовые файлы, делают групповые трансформации и пишут на диск.


StAX?!

<:o)
25 май 21, 12:17    [22326697]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
mad_nazgul, razliv
Чет я подумал что потоковые не умеют группировки сортировки.

Сообщение было отредактировано: 25 май 21, 12:22
25 май 21, 12:30    [22326713]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
PetroNotC Sharp, mad_nasgul

Абсолютно правильно - stax, был бы идеальным вариантом - но есть групповые фильтрации, сортировки, а стах в памяти держит только текущий item.
25 май 21, 13:11    [22326748]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv
PetroNotC Sharp, mad_nasgul

Абсолютно правильно - stax, был бы идеальным вариантом - но есть групповые фильтрации, сортировки, а стах в памяти держит только текущий item.
возвращаемся 22326661
25 май 21, 13:33    [22326773]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
fixxer
Member

Откуда:
Сообщений: 834
Чудес не бывает. Либо вы даете достаточно памяти для хранения агрегатов, либо делаете в два прохода: сортировка в промежуточный файл, потом агрегация.
25 май 21, 15:06    [22326848]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9651
1. Добавить памяти. Сервера с объемом памяти в 256-512 Gb уже не есть что-то удивительное и хайсечное. AFAIK
2. Как другой вариант, искать DOM-парсеры с оптимизацией по памяти. Чудес не бывает, но вполне возможно, нагрузка на память может быть в несколько раз (думаю до десятка) меньше, чем у "обычных" стиральных порошков парсеров типа халан/херсер.

Сколько памяти на сервера, как много юзеров, какой GC в JVM, кто нибудь профилировал/настраивал JVM.

Сообщение было отредактировано: 25 май 21, 15:08
25 май 21, 15:15    [22326853]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
fixxer
Member

Откуда:
Сообщений: 834
Leonid Kudryavtsev
1. Добавить памяти. Сервера с объемом памяти в 256-512 Gb уже не есть что-то удивительное и хайсечное. AFAIK

В облаке такие инстансы влетят в копейку, а свои такие держать еще дороже. Тогда проще выгрузить и обработать где-нибудь в облачном Spark/Hadoop (Athena/RedShift)
25 май 21, 15:20    [22326860]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9651
fixxer

Не хочется платить за железо (в облаке, не в облаке) - пусть платят программистам за оптимизацию

AFAIK есть DOM-парсеры оптимизированные по памяти. В живую с такими не работал, но читал. Думаю до десятка раз по сравнению с классическими разница вполне может быть.

Тут зависит от исходного ТЗ (что за файлы, что нужно делать), возможного железа (в сколько памяти нужно умешаться), какая должна быть производительность, сколько запросов/юзеров нужно обработать. Сколько времени выделяется программистам/админам.

Хочется автору pandas и dask - в общем-то, думаю проблем даже их прикрутить к JVM особых нет. Но что такое pandas и dask и что у них общего с XML/XSLT лично я не знаю ))).
25 май 21, 15:39    [22326877]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv,
Еще вариант. Если xml это типа субд у вас, то методы те же. Сначала процесс парсинга вынести за вечер (ночью).
Потом вынести в другой процесс. Потом на другую физческую машину.
Процесс конечно в java я загнул. Все равно вроде одна jvm.
А вот на другую физ машину возможно у вас не сложно.
25 май 21, 15:56    [22326892]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9651
1. Есть еще VTD-XML Parsing (Virtual Token Descriptor for XML).

2. Одна из первых же попавшихся статей в I-net'е от 2010 года. Представление DOM в виде xDB на диске. Как я понимаю, програмное API для таких реализаций то-же самое. Т.е. DOM, но хранение оптимизировано с точки зрения потребления памяти.

Что то более новое с ходу не нашлось, но в свое время попадалось. Т.ч. такая реализация не одна, нужно искать, смотреть.

https://www.balisage.net/Proceedings/vol5/html/Probst01/BalisageVol5-Probst01.html

Сообщение было отредактировано: 25 май 21, 15:56
25 май 21, 15:59    [22326893]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
Еще вариант. Группировать и еще много чего можно в стримах.
Тоже как в субд. Сначала всасываем xml а потом без парсера работаем.
25 май 21, 16:00    [22326894]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv
Да, согласен, архитектурно - стоило встать базу данных, и делать трансформации в базе данных.
Но я пришел на проект на фазе, когда уже все написано, на малых обьемах работает, а на продакшне
вылетает. Таким образом - теперь это мой головняк.
Просто самым быстрым, мне кажется, переписать под библиотеку которая приспособлена под большие данные.
Хотя может и ошибаюсь, поэтому и обращаюсь на форум, может кто-то поделиться идеями.

Вообще идиотизм подменять субд xml'ем.
Имей мужество остановится когда надо)))
25 май 21, 16:03    [22326896]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
ТС, а где у вас вообще java?
XML - - > group by - - >XML
???)))))
25 май 21, 16:15    [22326904]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
razliv
Порекомендуйте библиотеку под Ява, которая может считать 2-3 хмл файла(общий размер ~ 3 гигабайта), распарсить
, сделать трансформации - sort, group by , join entities , и вывести в результирующий файл.
Ищется что-то похожеее на Питновскую pandas и dask, которые не поперхнувшись жуют гигабайтовые файлы, делают групповые трансформации и пишут на диск.

Можно поднять локально Spark-shell и в нем сделать. Но возможно для некоторых действий с группировками
надо будет отдельно твикать этот шелл и указывать где и какие RDD можно класть в мемори а какие в диск.
25 май 21, 16:44    [22326926]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5687
razliv
PetroNotC Sharp, mad_nasgul

Абсолютно правильно - stax, был бы идеальным вариантом - но есть групповые фильтрации, сортировки, а стах в памяти держит только текущий item.


Stream api?!

<:o)
25 май 21, 18:11    [22326988]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Учитывая его 3 Гигабайта - JavaStreamApi можно попробовать. Но надо будет расширяться по -Xmx да и то не факт
что нам хватит разумных пределов.
25 май 21, 18:18    [22326993]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5687
mayton
Учитывая его 3 Гигабайта - JavaStreamApi можно попробовать. Но надо будет расширяться по -Xmx да и то не факт
что нам хватит разумных пределов.


Блин 3 гига это ни о чем, не нужно играться -Xmx.

Помню в 2014 году парсил XML-ки чуть меньше 4Гб.
Причем это делалось обычным DOM-парсером, в Spring-приложении.

ИМХО если нужно экономить память, то stax - само то.
Просто группировку делать во время распознавания данных.
25 май 21, 18:43    [22327008]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Я не против Stax. Я просто к тому что память у него может жрать не только исходный документ
но и агрегации и сортировки. Здесь уже что Стакс что SAX.
25 май 21, 18:49    [22327013]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
razliv
Основная проблема то - что большинство библиотек, при файлах выше гигабайта, выбивают out of memory :)
.
очень интересное заявление,Библиотека тут не причем
попробуйте увеличить xms xmx до 10 г

Сообщение было отредактировано: 25 май 21, 19:09
25 май 21, 19:13    [22327026]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton
Учитывая его 3 Гигабайта - JavaStreamApi можно попробовать. Но надо будет расширяться по -Xmx да и то не факт
что нам хватит разумных пределов.

если он упал по оом без стримов - со стримами он упадет на 1.5 гига
ему нужно просто увеличить хип,если нет денег на хип ,тогда пусть создает отдельную тему где мы будем решать нерешаемое)
25 май 21, 19:21    [22327029]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Вот тут пишут что spark-узлам рекомендовано 8Г https://spark.apache.org/docs/latest/hardware-provisioning.html
и из них три четверти под нужды собственно spark-машины и хвостик для нужд ОС.

При правильном тюнинге объем обрабатываемых данных может быть бесконечным. Надо только тюнить.
Поглядывать в мониторинг и разбрасывать датасеты по специальным персистентным структурам (их
там 4 типа бывает... кажется memory, disk+memory, ...e.t.c.)
25 май 21, 19:28    [22327033]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
H5N1
Member

Откуда: Yo.! из "Сравнения субд"
Сообщений: 515
razliv
Основная проблема то - что большинство библиотек, при файлах выше гигабайта, выбивают out of memory :)

бери spark. во первых не только для этой задачи пригодиться, во вторых 100% гарантия, что прожует. плюс это думю самое близкое к pandas, может и sparkPy можно зпустить. я для халтурки парсил 1с xml файлики - отлично работает и в локальном режиме.
25 май 21, 21:07    [22327093]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Простое растягивание -Xmx кстати не решает вообще всех проблем скейлинга памяти.

Шутки ради... где-то был топик где мы растили толстую строку StringBuilder-ом.
Не могу найти где... может и не здесь а в rsdn или habr.
25 май 21, 21:16    [22327100]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton
Простое растягивание -Xmx кстати не решает вообще всех проблем скейлинга памяти.

Шутки ради... где-то был топик где мы растили толстую строку StringBuilder-ом.
Не могу найти где... может и не здесь а в rsdn или habr.

как так не решает? тс упал по ООМ - дай больше хипа не упадет
другое дело,где програмные просчеты и жор памяти напоминает снежный ком- но тогда причем тут вообще наше обсуждение - мы же обсуждаем готовые фреймворки и либы и их падение по оом- где такие проблемы уже были исключены - иначе бы был вселенский вой и мы бы об этом услышали первыми

по факту есть ситуация - чел взял файл 1 гиг и попытался его обработать посредством своего аппа ,который был запущен скорей всео с парой гиг хипа,а может и меньше- справедливо получил ООМ и пришел зачем то сюда.
1.непонятно причем тут джава
2.решения на джаве быть не может ,это девопсятина
25 май 21, 21:24    [22327105]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
asv79
mayton
Простое растягивание -Xmx кстати не решает вообще всех проблем скейлинга памяти.

Шутки ради... где-то был топик где мы растили толстую строку StringBuilder-ом.
Не могу найти где... может и не здесь а в rsdn или habr.

как так не решает? тс упал по ООМ - дай больше хипа не упадет
другое дело,где програмные просчеты и жор памяти напоминает снежный ком- но тогда причем тут вообще наше обсуждение - мы же обсуждаем готовые фреймворки и либы и их падение по оом- где такие проблемы уже были исключены - иначе бы был вселенский вой и мы бы об этом услышали первыми

по факту есть ситуация - чел взял файл 1 гиг и попытался его обработать посредством своего аппа ,который был запущен скорей всео с парой гиг хипа,а может и меньше- справедливо получил ООМ и пришел зачем то сюда.
1.непонятно причем тут джава
2.решения на джаве быть не может ,это девопсятина

А ты пробовал 3х гигбайтный файл прогрузить в java String? Это не в тему этого топика. Просто так.
25 май 21, 21:27    [22327106]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
H5N1
Member

Откуда: Yo.! из "Сравнения субд"
Сообщений: 515
asv79

как так не решает? тс упал по ООМ - дай больше хипа не упадет

ваша наивность умиляет
в java прочесть 2-3 гб и сделать трансформации - sort, group by , join entities - на типичной машине шансы почти нулевые.
никакого смысла городить из этого олимпиадную задачу нет, в спарке почти наверняка вся задачу уместиться в 10 строк кода и будет работать и с 3 гб и с 300 гб файлами на ноутбуке. 99.9% без всякого тюнинга.
25 май 21, 22:13    [22327119]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton

А ты пробовал 3х гигбайтный файл прогрузить в java String? Это не в тему этого топика. Просто так.

почему именно в стринг? ты намекаешь на кеширование и пул?
по теме скажу что грузил и большие объекты - например емайл рассылки и файлы там были далеко выше 3 г
25 май 21, 22:20    [22327121]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
H5N1
asv79

как так не решает? тс упал по ООМ - дай больше хипа не упадет

ваша наивность умиляет
в java прочесть 2-3 гб и сделать трансформации - sort, group by , join entities - на типичной машине шансы почти нулевые.
никакого смысла городить из этого олимпиадную задачу нет, в спарке почти наверняка вся задачу уместиться в 10 строк кода и будет работать и с 3 гб и с 300 гб файлами на ноутбуке. 99.9% без всякого тюнинга.

Я-бы предложил заслушать постановку реальной задачи. Тут ... бабка надвое сказала. Или помру или нет.
25 май 21, 22:48    [22327138]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
H5N1
Member

Откуда: Yo.! из "Сравнения субд"
Сообщений: 515
mayton

Я-бы предложил заслушать постановку реальной задачи. Тут ... бабка надвое сказала. Или помру или нет.

зачем? "прочесть 2-3 гб и сделать трансформации - sort, group by , join entities" достаточно что бы отмести самопальные велосипеды.
25 май 21, 23:03    [22327143]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 2517
H5N1
razliv
Основная проблема то - что большинство библиотек, при файлах выше гигабайта, выбивают out of memory :)

бери spark. во первых не только для этой задачи пригодиться, во вторых 100% гарантия, что прожует. плюс это думю самое близкое к pandas, может и sparkPy можно зпустить. я для халтурки парсил 1с xml файлики - отлично работает и в локальном режиме.


+1 спарк все сделает за милую душу и кода там будет минимум.
26 май 21, 03:39    [22327187]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
H5N1
mayton

Я-бы предложил заслушать постановку реальной задачи. Тут ... бабка надвое сказала. Или помру или нет.

зачем? "прочесть 2-3 гб и сделать трансформации - sort, group by , join entities" достаточно что бы отмести самопальные велосипеды.

spark - это тяжелая артиллерия. Хотя я тоже голосую за изучение ново-теха. У нас даже шутка такая ходит
- "resume driven development". Это когда ты выбираешь не те технологии которых "необходимо и достаточно",
а те, который позволят прокачать твоё CV.
26 май 21, 09:36    [22327244]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
razliv
Member

Откуда:
Сообщений: 1231
Вроде получилось договорится посылать данные меньшими порциями, слегка оптимизировать действующий код
- надеюсь пролетим :)
27 май 21, 08:17    [22327781]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8254
razliv
Вроде получилось договорится посылать данные меньшими порциями, слегка оптимизировать действующий код
- надеюсь пролетим :)
вооот. Против архитектуры глупостями не попрешь.
А могли бы спарк замутить))))
27 май 21, 08:30    [22327786]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека для небольшого етл  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
- Просил я только масла на завтрак мне подать (С) Король из Английской сказки.
27 май 21, 10:44    [22327835]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Java Ответить