2016-01-14 2 views
0

У нас есть большое количество файлов csv, файлы/каталоги разделены по дате и нескольким другим факторам. Например, файлы могут быть названы /data/AAA/date/BBB.csvИнструмент для запроса большого количества файлов csv

Есть тысячи файлов, некоторые из которых находятся в диапазоне GB. Общие размеры данных находятся в терабайтах.

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

Я ищу инструмент/библиотеку, которая позволила бы sql-подобным запросам передавать данные непосредственно из данных. Я начал смотреть на улей, искру и другие большие инструменты данных, но неясно, могут ли они получить доступ к секционированным данным непосредственно из источника, который в нашем случае осуществляется через nfs.

В идеале мы могли бы определить таблицу, указав описание столбцов, а также информацию о разделе. Кроме того, файлы сжаты, поэтому обработка сжатия будет идеальной.

Являются ли их инструменты с открытым исходным кодом, которые это делают? Я видел продукт под названием Pivotal, который утверждает, что делает это, но мы предпочли бы написать наши собственные драйверы для наших данных для системы распределенных запросов с открытым исходным кодом.

Любые провода будут оценены.

+2

Попробуйте сверло Apache –

+0

Как сказано в сообщении isaac.hazan, Apache Drill 1.4 предоставляет вам интерфейс SQL для плоских файлов. Красота в том, что вам не нужно упоминать абсолютный файл. Иерархия папок в разделах должна выполняться. Ваш пример /data/AAA/date/BBB.csv - запросы огня, такие как 'select count (*) из dfs.root. '/ Data/AAA /';' для всех файлов под всеми папками в AAA. – rohitkulky

+0

Позволяет ли Apache Drill указать функцию раздела по атрибуту? Например, предположим, что у вас есть данные в /data/TAG1_A/yyyy-mm-dd.csv, /data/TAG1_B/yyyy-mm-dd.csv, но вы хотите только запросить данные за конкретный год, есть ли любой способ, которым Apache Drill мог знать только для поиска некоторых файлов? Другим возможным запросом может быть только несколько значений для TAG1, что ему не нужно будет проходить через все файлы TAG1_XXX. Я надеялся, что это будет больше похоже на секционированные таблицы в базе данных. – bpeikes

ответ

0

Искры могут быть решением. Он находится в памяти распределенной обработки двигателя. Данные могут быть загружены в память на нескольких узлах кластера и могут обрабатываться в памяти. Вам не нужно копировать данные в другую систему.

Вот шаги для вашего случая:

  1. построить несколько искры узла кластер
  2. Mount NFS на одном из узлов
  3. Затем вы должны загрузить данные временно в память в виде РДД и начать его обработку

это обеспечивает

  1. Поддержка языков программирования, таких как scala, python, java и т. Д.
  2. Поддерживает SQL-контекст и фреймы данных. Вы можете определить структуру данных и начать доступ с помощью SQL запросов
  3. Поддержки несколько алгоритмов сжатия

Ограничения

  1. данные должны быть вписываться в память для обработки Спарка
  2. You необходимо использовать кадры данных для определения структуры данных, после чего вы можете запросить данные с помощью sql, встроенных в языки программирования, такие как scala, python, java и т. д.
  3. Существуют тонкие различия между t raditional SQL в РСУБД и SQL в распределенных системах, таких как искра. Вы должны знать об этом.

С улей вам необходимо скопировать данные в HDFS.Поскольку вы не хотите копировать данные в другую систему, улей может не быть решением.

+0

Для Spark это звучит так, как будто вы должны вручную загрузить данные в память. Я надеялся на что-то, где вы могли бы отображать свои разделы, поэтому, когда вы запрашиваете файлы, вам не нужно явно загружать каждый файл. – bpeikes

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