Pig + Cassandra:ERROR 1070

时间:2013-03-19 11:24:33

标签: hadoop cassandra apache-pig

我正在使用hadoop 1.0.4,cassandra 1.2.2和猪0.11.0。

我想在grunt上运行这个脚本:

**grunt> rows = LOAD 'cassandra://Keyspace1/Users' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});**

但是我遇到了这个错误:

**2013-03-19 11:15:54,957 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve CassandraStorage using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]**

日志文件包含:

猪堆痕迹

错误1070:无法使用导入解析CassandraStorage:[,org.apache.pig.builtin。,org.apache.pig.impl.builtin。]

无法解析:Pig脚本无法解析:  pig脚本无法验证:org.apache.pig.backend.executionengine.ExecException:ERROR 1070:无法使用导入解析CassandraStorage:[,org.apache.pig.builtin。,org.apache.pig.impl.builtin。]     在org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:191)     在org.apache.pig.PigServer $ Graph.validateQuery(PigServer.java:1571)     在org.apache.pig.PigServer $ Graph.registerQuery(PigServer.java:1544)     在org.apache.pig.PigServer.registerQuery(PigServer.java:516)     在org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:991)     在org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:412)     在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:194)     在org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:170)     在org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69)     在org.apache.pig.Main.run(Main.java:538)     在org.apache.pig.Main.main(Main.java:157) 引起:  pig脚本无法验证:org.apache.pig.backend.executionengine.ExecException:ERROR 1070:无法使用导入解析CassandraStorage:[,org.apache.pig.builtin。,org.apache.pig.impl.builtin。]     在org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1209)     在org.apache.pig.parser.LogicalPlanBuilder.buildFuncSpec(LogicalPlanBuilder.java:1194)     at org.apache.pig.parser.LogicalPlanGenerator.func_clause(LogicalPlanGenerator.java:4766)     在org.apache.pig.parser.LogicalPlanGenerator.load_clause(LogicalPlanGenerator.java:3183)     在org.apache.pig.parser.LogicalPlanGenerator.op_clause(LogicalPlanGenerator.java:1315)     at org.apache.pig.parser.LogicalPlanGenerator.general_statement(LogicalPlanGenerator.java:799)     在org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:517)     在org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:392)     在org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:184)     ......还有10个 引起:org.apache.pig.backend.executionengine.ExecException:错误1070:无法使用导入解析CassandraStorage:[,org.apache.pig.builtin。,org.apache.pig.impl.builtin。]     at org.apache.pig.impl.PigContext.resolveClassName(PigContext.java:523)     在org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1206)

... 18更多

感谢。

3 个答案:

答案 0 :(得分:4)

根据Pygmalion项目的documentationpig_cassandra脚本的来源,您可以通过以下方式建立Cassandra和Pig之间的连接:

for jar in $CASSANDRA_HOME/lib/*.jar; do CLASSPATH=$CLASSPATH:$jar; done;
export PIG_CLASSPATH=$PIG_CLASSPATH:$CLASSPATH;
export PIG_OPTS="$PIG_OPTS -Dudf.import.list=org.apache.cassandra.hadoop.pig";
export PIG_INITIAL_ADDRESS=localhost;
export PIG_RPC_PORT=9160;
export PIG_PARTITIONER=org.apache.cassandra.dht.RandomPartitioner;
pig

同时确保将Cassandra罐子包含在HADOOP_CLASSPATH中(例如:将其设置为hadoop-env.sh)

答案 1 :(得分:2)

这绝对是一个PIG_CLASSPATH问题。您应该从cassandra源代码分发附带的examples / pig / bin目录运行pig_cassandra。这个脚本在运行pig之前为你构建了类路径。

您还需要设置以下env变量:

export JAVA_HOME=Oracle java 6 dir
export PIG_HOME=pig directory
export PIG_CONF_DIR=hadoop conf directory(needed if running distributed mapreduce)
export PIG_INITIAL_ADDRESS=ip of a cassandra node
export PIG_RPC_PORT=cassandra RPC port (i.e. 9160)
export PIG_PARTITIONER=org.apache.cassandra.dht.RandomPartitioner

注意:在运行pig_cassandra之前,必须使用ant构建一次cassandra源代码。这将在pig_cassandra脚本需要的cassandra_source / build / lib / jars文件夹中生成一些lib。否则,你将从猪开始出错。不记得错误到底是什么。这与猪内部序列化/反序列化阶段未找到的方法类似。

答案 2 :(得分:0)

通过这样做解决了我的问题

register hdfs:/udf/cassandra-all.jar;
define CqlStorage org.apache.cassandra.hadoop.pig.CqlNativeStorage();