Выполнение запроса Pig над данными, хранящимися в Hive - PullRequest
6 голосов
/ 21 апреля 2011

Я хотел бы знать, как выполнять запросы Pig, хранящиеся в формате Hive.Я настроил Hive для хранения сжатых данных (используя этот учебник http://wiki.apache.org/hadoop/Hive/CompressedStorage).

До этого я использовал обычную функцию загрузки Pig с разделителем Hive (^ A). Но теперь Hive хранит данные в последовательностифайлы со сжатием. Какую функцию загрузки использовать?

Обратите внимание, что не требуется тесная интеграция, как упомянуто здесь: Использование Hive с Pig , какую функцию загрузки использовать для чтения сжатых файлов последовательностигенерируется Hive.

Спасибо за все ответы.

1 Ответ

5 голосов
/ 01 июля 2011

Вот что я узнал: Использование HiveColumnarLoader имеет смысл, если вы храните данные как RCFile. Чтобы загрузить таблицу с помощью этого, вам нужно сначала зарегистрировать несколько jar-файлов:

register /srv/pigs/piggybank.jar
register /usr/lib/hive/lib/hive-exec-0.5.0.jar
register /usr/lib/hive/lib/hive-common-0.5.0.jar

a = LOAD '/user/hive/warehouse/table' USING org.apache.pig.piggybank.storage.HiveColumnarLoader('ts int, user_id int, url string');

Чтобы загрузить данные из файла последовательности, вы должны использовать PiggyBank (как в предыдущем примере). Загрузчик SequenceFile из Piggybank должен обрабатывать сжатые файлы:

register /srv/pigs/piggybank.jar
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();
a = LOAD '/user/hive/warehouse/table' USING SequenceFileLoader AS (int, int);

Это не работает с Pig 0.7, потому что он не может прочитать тип BytesWritable и привести его к типу Pig, и вы получите это исключение:

2011-07-01 10:30:08,589 WARN org.apache.pig.piggybank.storage.SequenceFileLoader: Unable to translate key class org.apache.hadoop.io.BytesWritable to a Pig datatype
2011-07-01 10:30:08,625 WARN org.apache.hadoop.mapred.Child: Error running child
org.apache.pig.backend.BackendException: ERROR 0: Unable to translate class org.apache.hadoop.io.BytesWritable to a Pig datatype
    at org.apache.pig.piggybank.storage.SequenceFileLoader.setKeyType(SequenceFileLoader.java:78)
    at org.apache.pig.piggybank.storage.SequenceFileLoader.getNext(SequenceFileLoader.java:132)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:142)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:448)
    at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:639)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:315)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1063)
    at org.apache.hadoop.mapred.Child.main(Child.java:211)

Как скомпилировать копилку описано здесь: Невозможно собрать копилку -> / home / build / ivy / lib не существует

...