2017-02-23 4 views
0

HCatLoaderで豚を使用してパーティション化されたハイブテーブルに対して何らかの変換を実行しようとしています。私はハイブ1.2とブタ0.15を使用しています。ハイブテーブルのパーティション化された列のデータ型はsmallintです。それは非パーティションハイブテーブルのためにうまくいきます。以下は私が行っているステップです。私はいくつかの調査を行い、Exception stacktraceのクラスが中間データを格納することに関連していることを発見したため、不確定なデータを書き込む際に失敗しています。いずれにせよ、ここで問題となる可能性のあることと、これを解決する方法を提案することができます。豚のHCatLoader:UDF/LoadFuncから出力するときは、標準のPigタイプのみがサポートされます。

**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'.

関連する問題