pig - comandos hive hadoop
Ejecutar la consulta de Pig sobre los datos almacenados en Hive (1)
Esto es lo que descubrí: Usar HiveColumnarLoader tiene sentido si almacena datos como un RCFile. Para cargar la tabla usando esto, primero debe registrar algunos tarros:
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'');
Para cargar datos desde el archivo de secuencia, debe usar PiggyBank (como en el ejemplo anterior). El cargador SequenceFile de Piggybank debe manejar archivos comprimidos:
register /srv/pigs/piggybank.jar
DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();
a = LOAD ''/user/hive/warehouse/table'' USING SequenceFileLoader AS (int, int);
Esto no funciona con Pig 0.7 porque no puede leer el tipo BytesWritable y convertirlo al tipo Pig y obtienes esta excepción:
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)
Cómo compilar piggybank se describe aquí: no se puede construir piggybank -> / home / build / ivy / lib no existe
Me gustaría saber cómo ejecutar consultas Pig almacenadas en formato Hive. He configurado Hive para almacenar datos comprimidos (usando este tutorial http://wiki.apache.org/hadoop/Hive/CompressedStorage ).
Antes solía usar la función de carga Pig normal con el delimitador de Hive (^ A). Pero ahora Hive almacena datos en archivos de secuencia con compresión. ¿Qué función de carga usar?
Tenga en cuenta que no necesita integración cercana como se menciona aquí: Usando Hive with Pig , simplemente qué función de carga usar para leer los archivos de secuencia comprimidos generados por Hive.
Gracias por todas las respuestas.