2010-08-04 2 views
4

저는 Hadoop, Pig 및 Cassandra를 결합하여 간단한 Pig 쿼리를 통해 Cassandra에 저장된 데이터를 처리하려고합니다. 문제는 Pig에게 CassandraStorage에서 실제로 작동하는지도/축소 작업을 만들 수 없다는 것입니다.Pig를 통해지도/축소 작업을 제출할 때 jar 묶음이 필요합니까?

내가 한 것은 contrib/pig (Cassandra의 소스 배포판) 위에있는 클러스터 컴퓨터 중 하나에서 storage-conf.xml 파일을 복사 한 다음 그 파일을 cassandra_loadfun.jar 파일에 컴파일했습니다 . 내가 틀리지 않는 경우에 따라서 항아리가 하둡에 제출되는 작업에 번들로 제공한다

register /opt/pig/pig-0.7.0-core.jar; 
register /tmp/apache-cassandra-0.6.3-src/lib/libthrift-r917130.jar; 
REGISTER /tmp/apache-cassandra-0.6.3-src/contrib/pig/build/cassandra_loadfunc.jar; 
rows = LOAD 'cassandra://Keyspace1/Standard1' USING org.apache.cassandra.hadoop.pig.CassandraStorage(); 
cols = FOREACH rows GENERATE flatten($1); 
colnames = FOREACH cols GENERATE $0; 
namegroups = GROUP colnames BY $0; 
namecounts = FOREACH namegroups GENERATE COUNT($1), group; 
orderednames = ORDER namecounts BY $0; 
topnames = LIMIT orderednames 50; 
dump topnames; 

:

다음 나는 모든 항아리를 포함하도록 예를-script.pig 적응. 그것은

2010-08-04 22:11:46,395 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2117: Unexpected error when launching map reduce job. 
2010-08-04 22:11:46,395 [main] ERROR org.apache.pig.tools.grunt.Grunt - org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias topnames 
    at org.apache.pig.PigServer.openIterator(PigServer.java:521) 
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:544) 
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:241) 
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:162) 
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:138) 
    at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:89) 
    at org.apache.pig.Main.main(Main.java:391) 
Caused by: org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1002: Unable to store alias topnames 
    at org.apache.pig.PigServer.store(PigServer.java:577) 
    at org.apache.pig.PigServer.openIterator(PigServer.java:504) 
    ... 6 more 
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 2117: Unexpected error when launching map reduce job. 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:209) 
    at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.execute(HExecutionEngine.java:308) 
    at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:835) 
    at org.apache.pig.PigServer.store(PigServer.java:569) 
    ... 7 more 
Caused by: java.lang.RuntimeException: Could not resolve error that occured when launching map reduce job: java.lang.NoClassDefFoundError: org/apache/thrift/TBase 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$JobControlThreadExceptionHandler.uncaughtException(MapReduceLauncher.java:510) 
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1845) 

나는 중고품 라이브러리가 명시 적으로 나열되어 있기 때문에 이해하지 않고, 번들로 제공해야되지 않은 : 작업을 실행할 때 그러나 그것은 단지 나에서 예외가 발생?

+0

[ERROR 1066 : 별칭에 대한 이터레이터를 열 수 없습니다.] (http://stackoverflow.com/questions/34495085/error-1066-unable-to-openiterator-for- alias-in-pig-generic-solution)은 일반적인 솔루션입니다 (http://stackoverflow.com/a/34495086/983722). –

답변

2

예외는 명확하게 TBase 클래스를

java.lang.NoClassDefFoundError가 찾을 수 없다는 것을 말한다 : 조직/아파치/중고품을/

가 번들로 항아리를 폭발 절약 lib 디렉토리 항아리 실제로 존재하는지 확인 TBase 올바른 위치에. 쓰레기 단지는 다른 위치에 번들로 제공되었을 수 있습니다.

또한 병을 묶어 놓은 lib 폴더에 병을 넣을 수도 있습니다. 또 다른 옵션은 classpath에 jar를 명시 적으로 추가하는 것입니다.

+0

클래스는 모두 생성 된 jar 파일에 존재하므로 실제로는 문제가되지 않습니다. – cdecker

+0

동일한 클래스 org/apache/thrift/TBase를 가진 여러 개의 jar 파일이 충돌하거나 jar 파일이 제대로 등록되지 않았습니다. 그것은 내가 예외를 기반으로 생각할 수있는 유일한 이유 일 것입니다. –