2017-02-23 12 views
0

HCatLoader가있는 돼지를 사용하여 파티션 된 하이브 테이블에서 일부 변환을 수행하려고합니다. 하이브 1.2와 돼지 0.15를 사용하고 있습니다. 하이브 테이블의 분할 된 열의 데이터 형식은 smallint입니다. 그것은 파티션되지 않은 하이브 테이블에 대해 잘 작동합니다. 다음은 내가 수행하는 단계입니다. 몇 가지 조사를 한 결과 Exception stacktrace의 클래스가 중간 데이터를 저장하는 것과 관련되어 있으므로 불확실한 데이터를 쓸 때 실패합니다. 어느 누구도 문제를 제기 할 수있는 방법과이를 해결하는 방법을 제안 할 수 있습니까?돼지가있는 HCatLoader : UDF/LoadFunc에서 출력 할 때 표준 돼지 유형 만 지원됩니다.

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

내가 명성의 부족 때문에 말씀 드릴 수 없습니다,하지만 난 당신의 코드에서 오류를 참조하십시오 :

**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(',') 

나는 다음과 같은 오류를 얻고있다

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