【问题标题】:Pig + Cassandra : ERROR 1070猪 + 卡桑德拉:错误 1070
【发布时间】:2013-03-08 01:09:02
【问题描述】:

我正在使用 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.]

解析失败:Pig 脚本解析失败: pig 脚本无法验证: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.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:错误 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) 在 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) 在 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。] 在 org.apache.pig.impl.PigContext.resolveClassName(PigContext.java:523) 在 org.apache.pig.parser.LogicalPlanBuilder.validateFuncSpec(LogicalPlanBuilder.java:1206)

... 18 更多

谢谢。

【问题讨论】:

    标签: hadoop cassandra apache-pig


    【解决方案1】:

    基于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 jar 包含到 HADOOP_CLASSPATH 中(例如:在 hadoop-env.sh 中设置)

    【讨论】:

      【解决方案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 内部的序列化/反序列化阶段未找到的方法。

      【讨论】:

        【解决方案3】:

        这样做解决了我的问题

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-19
          • 2015-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-16
          • 1970-01-01
          相关资源
          最近更新 更多