2017-02-23 3 views
0

Я пытаюсь выполнить некоторую трансформацию в таблице разделенных кустов, используя свиньи с HCatLoader. Я использую куст 1.2 и свиньи 0.15. Тип данных секционированного столбца в таблице hive - smallint. Он отлично работает для таблицы без кластеризации. Ниже приведены шаги, которые я выполняю. Я провел некоторое расследование и обнаружил, что классы в Exception stacktrace связаны с хранением промежуточных данных, поэтому он не работает при записи неопределенных данных. Может ли кто-нибудь предположить, что может быть проблемой здесь и как решить эту проблему.HCatLoader со свиньями: Примечание: только стандартный тип Pig поддерживается при выходе из UDF/LoadFunc

**pig -useHCatalog** 

A = LOAD 'testdb.yearly_report' USING org.apache.hive.hcatalog.pig.HCatLoader() as (name:chararray,date_of_joining:int); 
B = foreach A generate name,date_of_joining; 
B = limit B 5; 
STORE B INTO '/my_hdfs_dir' USING PigStorage(',') 

Я получаю следующее сообщение об ошибке:

Error: java.lang.RuntimeException: Unexpected data type java.lang.Short found in stream. Note only standard Pig type is supported when you output from UDF/LoadFunc at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:596) at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:462) at org.apache.pig.data.utils.SedesHelper.writeGenericTuple(SedesHelper.java:135) at org.apache.pig.data.BinInterSedes.writeTuple(BinInterSedes.java:650) at org.apache.pig.data.BinInterSedes.writeDatum(BinInterSedes.java:470) at org.apache.pig.data.BinSedesTuple.write(BinSedesTuple.java:40) at org.apache.pig.impl.io.PigNullableWritable.write(PigNullableWritable.java:139) at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:98) at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:82) at org.apache.hadoop.mapred.MapRFsOutputBuffer.collect(MapRFsOutputBuffer.java:1493) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:724) at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89) at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112) at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Map.collect(PigGenericMapReduce.java:135) at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.runPipeline(PigGenericMapBase.java:283) at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:276) at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:64) at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:796) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:346) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1595) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

ответ

0

Я не могу комментировать из-за отсутствия репутации, но я вижу ошибку в коде:

A = LOAD 'testdb.yearly_report' USING org.apache.hive.hcatalog.pig.HCatLoader() as (name:chararray,date_of_joining:int); 
B = foreach A generate name,date_of_joining; 
B = limit B 5; 
STORE B INTO '/my_hdfs_dir' USING PigStorage(','); 

1 : You have used variable 'B' twice which in turn will overwrite the previous pig statement. 2 : Use DUMP to see after every statement to confirm they all are executing ; 3 : Also wondering if your table 'yearly_report' has just 2 columns ? Else you better don't provide schema while loading into 'A'.

Смежные вопросы