4

我正在使用 hadoop 1.0.4、cassandra 1.2.2 和 pig 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.]

解析失败:猪脚本解析失败:猪脚本验证失败:org.apache.pig.backend.executionengine.ExecException:错误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。org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69) 在 org.apache.pig.Main.run(Main.java:538) 在 org.apache 的 parseStopOnError(GruntParser.java:170) .pig.Main.main(Main.java:157) 原因:猪脚本无法验证:org.apache.pig.backend.executionengine.ExecException:错误 1070:无法使用导入解析 CassandraStorage:[,org.apache。 pig.builtin., org.apache.pig.impl.builtin.] at org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1209) at org.apache.pig.parser.LogicalPlanBuilder.buildFuncSpec(LogicalPlanBuilder. java:1194) at org.apache.pig.parser.LogicalPlanGenerator.func_clause(LogicalPlanGenerator.java:4766) at org.apache.pig.parser.LogicalPlanGenerator.load_clause(LogicalPlanGenerator.java:3183) at org.apache.pig.parser .LogicalPlanGenerator。op_clause(LogicalPlanGenerator.java:1315) 在 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) at 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)general_statement(LogicalPlanGenerator.java:799) at org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:517) at org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:392) at 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) at org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder .java:1206)general_statement(LogicalPlanGenerator.java:799) at org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:517) at org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:392) at 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) at org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder .java:1206)query(LogicalPlanGenerator.java:392) at 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) at org .apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1206)query(LogicalPlanGenerator.java:392) at 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) at org .apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1206)java:523) 在 org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1206)java:523) 在 org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1206)

... 18 更多

谢谢。

4

3 回答 3

4

根据Pygmalion项目的文档pig_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 jar 也包含在其中HADOOP_CLASSPATH(例如:将其设置在 hadoop-env.sh 中)

于 2013-03-19T13:33:09.827 回答
2

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

您还需要设置以下环境变量:

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 文件夹中生成一些库。否则,您将在开始 pig 时遇到错误。不记得究竟是什么错误。这类似于在 pig 内部的序列化/反序列化阶段未找到的方法。

于 2013-03-28T07:23:55.817 回答
0

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

register hdfs:/udf/cassandra-all.jar;
define CqlStorage org.apache.cassandra.hadoop.pig.CqlNativeStorage();
于 2015-09-23T07:12:21.200 回答