Импорт многоуровневых каталогов журналов в hadoop/pig

Мы храним наши журналы в 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 000 журналов.
  2. Создадим ли мы службу для объединения всех журналов и отправки их напрямую в hdfs?
  3. Пользовательские импортеры java/python?
  4. Другие мысли?

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

Спасибо


person Joshua Ball    schedule 11.03.2011    source источник


Ответы (3)


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

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

или даже

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

person Romain    schedule 14.03.2011

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

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

анализировать журналы этого месяца для типа 1 и не смешивать их с типом 2. поскольку вы анализируете не по типу, а по дате, я бы рекомендовал вам изменить структуру на:

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

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

person frail    schedule 13.03.2011
comment
Спасибо, но меня больше беспокоит, как импортировать сотни или тысячи журналов в несколько подкаталогов. Я хотел бы указать ему на заданный каталог (скажем, 2010/03/01) и получить все журналы под ним. Как подойти к этому больше мой вопрос. - person Joshua Ball; 14.03.2011

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

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

Затем вы сможете ЗАГРУЗИТЬ файл, а затем ФИЛЬТР ПО 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;
person Samuel Kerrien    schedule 02.08.2012