Как разделить данные в s3 для использования с кустом hadoop? - PullRequest
1 голос
/ 15 декабря 2010

У меня есть корзина s3, содержащая около 300 ГБ файлов журналов в произвольном порядке.

Я хочу разделить эти данные для использования в Hadoop-Hive, используя отметку даты и времени, чтобы строки журнала, относящиеся к определенному дню, объединялись в одну и ту же «папку» s3. Например, записи журнала за 1 января будут в файлах, соответствующих следующему имени:

s3://bucket1/partitions/created_date=2010-01-01/file1
s3://bucket1/partitions/created_date=2010-01-01/file2
s3://bucket1/partitions/created_date=2010-01-01/file3

и т.д.

Каков был бы лучший способ для меня преобразовать данные? Мне лучше всего запустить один скрипт, который читает каждый файл за раз и выводит данные в нужное место s3?

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

Что я пробовал:

Я попытался использовать потоковую передачу hadoop, передав маппер, который собирал все записи журнала для каждой даты, а затем записывал их непосредственно в S3, ничего не возвращая для редуктора, но это, казалось, создавало дубликаты. (используя приведенный выше пример, я получил 2,5 миллиона записей на 1 января вместо 1,4 миллиона)

У кого-нибудь есть идеи, как лучше к этому подойти?

Ответы [ 2 ]

0 голосов
/ 19 мая 2016

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

create table partitioned (some_field string, timestamp string, created_date date) partition(created_date);
insert overwrite partitioned partition(created_date) as select some_field, timestamp, date(timestamp) from orig_external_table;

На самом деле я не посмотрел синтаксис, поэтому вам может потребоваться исправить его со ссылкой на https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingdataintoHiveTablesfromqueries.

0 голосов
/ 18 декабря 2010

Если у Hadoop есть свободные слоты в трекере задач, он будет запускать несколько копий одной и той же задачи.Если ваш выходной формат не игнорирует должным образом дублирующиеся выходные ключи и значения (что, возможно, имеет место для S3; я никогда не использовал его), вам следует отключить умозрительное выполнение.Если ваша работа только для карт, установите mapred.map.tasks.speculative.execution в false.Если у вас есть редуктор, установите mapred.reduce.tasks.speculative.execution в false.Проверьте Hadoop: полное руководство для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...