1

게재를 위해 사용할 DSE에 쓰는 돼지를 실행하는 EMR 작업을 작성하려고합니다. 불행히도 DSE에 쓰기 위해 돼지를 만들 수는 없으므로 문제를 DSE 노드에 연결하여 쓰기 만하려고했습니다. 는 여기에 내가 카산드라 노드에외부 돼지 작업 (돼지 -> DSE 커넥터)에서 DSE에 쓰기

을하고있어 무엇 : 로컬 컴퓨터에서

cqlsh> CREATE KEYSPACE cql3ks WITH replication = 
    {'class': 'SimpleStrategy', 'replication_factor': 1 }; 
cqlsh> USE cql3ks 
cqlsh:cql3ks> CREATE TABLE test (a int PRIMARY KEY, b int); 

export PIG_INITIAL_ADDRESS=<cassandra node IP> 
export PIG_RPC_PORT=9160 
export PIG_PARTITIONER=org.apache.cassandra.dht.Murmur3Partitioner 
pig -x local 

grunt> REGISTER /var/lib/cassandra/resources/cassandra/lib/libthrift-0.7.0.jar; 
grunt> REGISTER /var/lib/cassandra/resources/cassandra/lib/cassandra-thrift-1.2.13.2.jar; 
grunt> REGISTER /var/lib/cassandra/resources/cassandra/lib/cassandra-all-1.2.13.2.jar; 
grunt> DEFINE CqlStorage org.apache.cassandra.hadoop.pig.CqlStorage(); 
grunt> moretestvalues= LOAD 'cql://cql3ks/test/' USING CqlStorage; 
grunt> insertformat= FOREACH moretestvalues GENERATE TOTUPLE(TOTUPLE('a',a)),TOTUPLE(b); 
grunt> STORE insertformat INTO 'cql://cql3ks/test?output_query=UPDATE+cql3ks.test+set+b+%3D+%3F' USING CqlStorage(); 

나는, 나는 다음과 같은 오류이 얻을 않는 경우 :

2014-02-25 18:50:27,952 [main] INFO org.apache.pig.tools.pigstats.ScriptState - Pig features used in the script: UNKNOWN 
2014-02-25 18:50:28,506 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected 
2014-02-25 18:50:28,506 [main] WARN org.apache.pig.tools.grunt.Grunt - There is no log file to write to. 
2014-02-25 18:50:28,506 [main] ERROR org.apache.pig.tools.grunt.Grunt - java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected 
at org.apache.cassandra.hadoop.AbstractColumnFamilyOutputFormat.checkOutputSpecs(AbstractColumnFamilyOutputFormat.java:75) 
at org.apache.pig.newplan.logical.rules.InputOutputFileValidator$InputOutputFileVisitor.visit(InputOutputFileValidator.java:80) 
at org.apache.pig.newplan.logical.relational.LOStore.accept(LOStore.java:66) 
at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:64) 
at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:66) 
at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:66) 
at org.apache.pig.newplan.DepthFirstWalker.walk(DepthFirstWalker.java:53) 
at org.apache.pig.newplan.PlanVisitor.visit(PlanVisitor.java:52) 
at org.apache.pig.newplan.logical.rules.InputOutputFileValidator.validate(InputOutputFileValidator.java:45) 
at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.compile(HExecutionEngine.java:288) 
at org.apache.pig.PigServer.compilePp(PigServer.java:1322) 
at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1247) 
at org.apache.pig.PigServer.execute(PigServer.java:1239) 
at org.apache.pig.PigServer.access$400(PigServer.java:121) 
at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1553) 
at org.apache.pig.PigServer.registerQuery(PigServer.java:516) 
at org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:991) 
at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:412) 
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:194) 
at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:170) 
at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69) 
at org.apache.pig.Main.run(Main.java:538) 
at org.apache.pig.Main.main(Main.java:157) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:622) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:212) 

답변

1

을 그것은 버전의 문제입니다. 아마도 hadoop 2.x를 사용하고 있으며 Cassandra 라이브러리는 hadoop 1.x API를 사용하고 있습니다. 올바른 항아리를 사용하고 있는지 확인하지 않는 경우.

다음 카산드라 버그 수정 버전 (2.0.6)은 api 또는 적어도 issue에 대해 호환성을 포함 할 예정입니다.