2016-04-15 3 views
2

Я создал внешнюю таблицу Hive (1.0 на EMR), которая хранится в S3. Я могу успешно использовать Hive для вставки записей в эту таблицу, запросить их обратно и вытащить файлы непосредственно из ведра S3 в качестве проверки. Все идет нормально.Свинья пишут на S3 через HCatStorer() «успешно» с 0-байтами

Я бы хотел использовать Pig (v0.14, также EMR) для чтения и записи в эту логическую таблицу. Загрузка с помощью HCatLoader() работает нормально, а dump/explain подтверждают, что мои данные и схема соответствуют ожиданиям.

Когда я пытаюсь писать с HCatStorer(), однако у меня проблемы. Свинья сообщают об успехе, с N записями, , но 0 байт, написано. Я не вижу ничего, что кажется релевантным или указывающим на проблему в журнале, и никакие данные не записываются в таблицу/ведро.

a = load 'myfile' as (foo: int, bar: chararray); // Just assume that this works. 
dump a; // Records are there 
describe a; // Correct schema, as specified above 
store a into 'mytable' using org.apache.hive.hcatalog.pig.HCatStorer(); 

Выходной сигнал (который, опять же, не содержит никаких других признаков проблем, которые я вижу) завершается:

Success! 

... 

Input(s): 
Successfully read 2 records (24235 bytes) from: "myfile" 

Output(s): 
Successfully stored 2 records in: "mytable" 

Counters: 
Total records written : 2 
Total bytes written : 0 
Spillable Memory Manager spill count : 0 
Total bags proactively spilled: 0 
Total records proactively spilled: 0 

отметить:

  • Это работает в той же среде, если расположение таблицы находится в HDFS вместо S3 - как для внешних, так и для внутренних таблиц, а также из Hive или Pig.
  • Я могу успешно сохранить непосредственно на S3, например. store a into 's3n://mybucket/output' using PigStorage(',');
  • Вставка через оболочку Hive в тот же запрос работает нормально.

Таким образом, это представляет собой проблему с взаимодействием Pig/HCatalog/S3 в виде стека; любые два из них вместе работают нормально.

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

+0

эй ...! Вы упомянули, что не можете хранить данные в таблице hive, даже если они говорят, что данные «успешно сохранены», вы можете проверить HDFS и найти путь к «mytable» и посмотреть, имеются ли какие-либо данные? – Pratik

+0

@Pratik В случае ошибки «mytable» живет в S3, а не HDFS ... вот в чем проблема! Когда я делаю версию этого, где «mytable» находится в HDFS, он отлично работает, и данные появляются там, как ожидалось. – Greg

+0

@Greg вы когда-нибудь находили решение, отличное от постановки в emr? Мне нужно использовать свиньи для загрузки таблицы улья на s3.думая об использовании обходного пути для простоты посадки данных в папке и использования лямбда-функции для добавления раздела в куст, но предпочел бы все решение свиньи – TaylerJones

ответ

2

Я думаю, что есть проблема, когда вы пишете S3 от свиньи, используя HCatalog. Поскольку окончательные выходные данные записываются в файл _temporary и никогда не копируются/не перемещаются в исходное местоположение. Это странное поведение встречается только на S3.

В моем случае выходной сигнал должен быть записан s3: // X/Y /, но данные были записаны в s3: // X/Y/_temporary/attempt_1466700620679_0019_r_000000_0/часть-т-00000

Обходной путь для этого заключался в записи вывода HCatalog на HDFS, а затем на S3.

Вы можете обратиться к приведенной ниже ссылке, размещенной на AWS форуме: https://forums.aws.amazon.com/thread.jspa?threadID=230544

+0

Да, спасибо ... что сообщение форума AWS и обходное решение было моим! :-) Тем не менее +1 для ссылки - помогает отслеживать различные темы для этого ответа здесь. – Greg