Импорт многоуровневых каталогов логов в hadoop / pig - PullRequest
3 голосов
/ 11 марта 2011

Мы храним наши журналы на S3, и один из наших запросов (Pig) будет захватывать три разных типа журналов. Каждый тип журнала находится в наборах подкаталогов на основе типа / даты. Например:

/logs/<type>/<year>/<month>/<day>/<hour>/lots_of_logs_for_this_hour_and_type.log*

мой запрос хотел бы загрузить все три типа журналов за определенное время. Например:

type1 = load 's3:/logs/type1/2011/03/08' as ...
type2 = load 's3:/logs/type2/2011/03/08' as ...
type3 = load 's3:/logs/type3/2011/03/08' as ...
result = join type1 ..., type2, etc...

мои запросы будут выполняться для всех этих журналов.

Какой самый эффективный способ справиться с этим?

  1. Нужно ли использовать расширение bash-скрипта? Не уверен, что это работает с несколькими каталогами, и я сомневаюсь, что было бы эффективно (или даже возможно), если бы было загружено 10 тыс. Журналов.
  2. Создаем ли мы сервис для объединения всех журналов и отправки их непосредственно в hdfs?
  3. Пользовательские импортеры Java / Python?
  4. Другие мысли?

Если бы вы могли оставить пример кода, если это уместно, это было бы полезно.

Спасибо

Ответы [ 3 ]

5 голосов
/ 14 марта 2011

Globbing поддерживается по умолчанию в PigStorage, поэтому вы можете просто попробовать:

type1 = load 's3:/logs/type{1,2,3}/2011/03/08' as ..

или даже

type1 = load 's3:/logs/*/2011/03/08' as ..

0 голосов
/ 02 августа 2012

Если, как и я, вы используете Hive и ваши данные разбиты на разделы, вы можете использовать некоторые из загрузчиков в PiggyBank (например, AllLoader ), которые поддерживают разбиение, так что структура каталога, по которой вы хотите фильтровать, ищет как:

.../type=value1/...
.../type=value2/...
.../type=value3/...

После этого вы сможете загрузить файл, а затем FILTER BY type = 'value1'.

Пример:

REGISTER piggybank.jar;
I = LOAD '/hive/warehouse/mytable' using AllLoader() AS ( a:int, b:int );
F = FILTER I BY type = 1 OR type = 2;
0 голосов
/ 13 марта 2011

У меня была похожая система журналов, похожая на вашу, с той лишь разницей, что я фактически анализирую журналы не по дате, а по типу, поэтому я бы использовал:

type1 = load 's3:/logs/type1/2011/03/' as ...

для анализа журналов за месяцы для type1 и don 'смешать с type2.так как вы анализируете не по типу, а по дате, я бы порекомендовал вам изменить структуру на:

/logs/<year>/<month>/<day>/<hour>/<type>/lots_of_logs_for_this_hour_and_type.log*

, чтобы вы могли загружать ежедневные (или ежемесячные) данные, а затем фильтровать их по типу, было бы более удобно.

...