我正在使用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)
感谢。
答案 0 :(得分:4)
根据Pygmalion项目的documentation和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罐子包含在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();