2016-08-17 4 views
0

Как вставить потоковые данные в hawq и выполнить запрос в онлайн-данных.Вставить потоковые данные в hawq

  1. I teste jdbc insert and performance был очень плохим.

  2. После этого я протестировал запись данных в hdfs с помощью лотка и создал внешнюю таблицу в hawq, но hawq не может читать данные, пока лоток не закроет файл. проблема заключается в том, что если я установил скорость потока льда, очень низкую (1 мин) через несколько дней число файлов увеличивается, и это плохо для hdf.

  3. Третье решение - hbase, но поскольку большинство моих запросов являются агрегацией для многих данных, hbase не является хорошим решением (hbase хорош для получения отдельных данных).

Таким образом, с этими ограничениями, что является хорошим решением для запроса потоковых данных в режиме онлайн с помощью hawq?

+0

Вам строго нужна внешняя таблица? Если вы только обрабатываете данные в HAWQ с помощью SQL, гораздо лучше и быстрее использовать внутренние паркетные таблицы. Тогда ваш рабочий процесс можно упростить - вы можете создайте файл в hdfs, используя flume, и каждую минуту вы можете сделать INSERT INTO SELECT * FROM и сразу удалить обработанные файлы. Вам не нужны обработанные файлы, поскольку данные перемещаются в каталоги с управляемым сегментом hawq alread у. Вы можете настроить crontab на hawq master для выполнения этого движения каждую минуту и ​​впоследствии удалить обработанные файлы hdfs. – Ali

ответ

1

Если исходные данные не указаны в hdfs, вы можете попробовать gpdfist/named pipe в качестве буфера с внешней таблицей gpfdist или внешней внешней таблицей, используя другие сценарии linux. другим решением будет модуль весны xd gpfdist. http://docs.spring.io/spring-xd/docs/1.3.1.RELEASE/reference/html/#gpfdist

1

Другим вариантом для внешней таблицы является использование опции TRANSFORM. Здесь Внешняя таблица ссылается на URL-адрес gpfdist, а gpfdist выполняет программу для получения данных. Это толкающая техника, а не толкание.

Вот подробности: External Table "TRANSFORM" Option

И поскольку вы упомянули JDBC, я написал программу, которая использует gpfdist, который выполняет программу Java для получения данных с помощью JDBC. Он работает как с Greenplum, так и с HAWQ и с любым источником JDBC.

gplink

1

Поскольку вы упомянули Flume, я обеспечу некоторые альтернативный подход с аналогичным springxd инструмента.

У вас может быть тема Kafka, где вы можете удалить потоковые сообщения и работу Springxd, которые могут писать в HAWQ. например;

Например, если у вас есть поток, загружающий файлы с FTP на KAFKA и весеннюю java-работу с сообщениями от kafka до hawq.

  1. работа развернуть hawqbinjob --properties "module.hawqjob.count = 2"

  2. поток создать --name ftpdocs --definition «FTP --host = me.local --remoteDir =/Пользователи/me/DEV/FTP --username = me --password = ********** --localDir =/Пользователи/me/DEV/data/binary --fixedDelay = 0 | log

  3. stream create --name file2kafka --definition "file --dir =/Пользователи/me/DEV/data/binary --pattern = * --mode = ref --preventDuplicates = true --fixedDelay = 1 | transform --expression = payload.getAbsolutePath() --outputType = text/plain | kafka --topic = mybin1 --brokerList = kafka1.localdomain: 6667 "--deploy

  4. stream create --name --definition" kafka --zkconnect = kafka1.localdomain: 2181 --topic = mybin1 | byte2string> Очередь: работа: hawqbinjob»--deploy

Это один из способов получения параллелизм и не ограничивает в HDFS файл открытым вопрос Вы можете расширить эту модель во многих отношениях, так как большая часть данных потокового. Небольшой набор. Надеюсь, что это поможет.

Смежные вопросы