mapreduce - 通过 Pig 提交 map/reduce 作业时捆绑 jars?

标签 mapreduce cassandra thrift apache-pig

我正在尝试结合 Hadoop、Pig 和 Cassandra,以便能够通过简单的 Pig 查询处理存储在 Cassandra 中的数据。问题是我无法让 Pig 创建实际与 CassandraStorage 一起使用的 Map/Reduce 作业。

我所做的是将 storage-conf.xml 文件从我的一台集群机器复制到 contrib/pig(Cassandra 的源发行版)中的一台机器之上,然后将这些东西编译到 cassandra_loadfun.jar 文件中。

接下来,我修改了 example-script.pig 以包含所有 jars:

register /opt/pig/pig-0.7.0-core.jar;
register /tmp/apache-cassandra-0.6.3-src/lib/libthrift-r917130.jar;
REGISTER /tmp/apache-cassandra-0.6.3-src/contrib/pig/build/cassandra_loadfunc.jar;
rows = LOAD 'cassandra://Keyspace1/Standard1' USING org.apache.cassandra.hadoop.pig.CassandraStorage();
cols = FOREACH rows GENERATE flatten($1);
colnames = FOREACH cols GENERATE $0;
namegroups = GROUP colnames BY $0;
namecounts = FOREACH namegroups GENERATE COUNT($1), group;
orderednames = ORDER namecounts BY $0;
topnames = LIMIT orderednames 50;
dump topnames;

因此,如果我没记错的话,jar 应该捆绑到提交给 hadoop 的作业中。
但是在运行作业时,它只会向我抛出一个异常:
2010-08-04 22:11:46,395 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2117: Unexpected error when launching map reduce job.
2010-08-04 22:11:46,395 [main] ERROR org.apache.pig.tools.grunt.Grunt - org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias topnames
    at org.apache.pig.PigServer.openIterator(PigServer.java:521)
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:544)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:241)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:162)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:138)
    at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:89)
    at org.apache.pig.Main.main(Main.java:391)
Caused by: org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1002: Unable to store alias topnames
    at org.apache.pig.PigServer.store(PigServer.java:577)
    at org.apache.pig.PigServer.openIterator(PigServer.java:504)
    ... 6 more
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 2117: Unexpected error when launching map reduce job.
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:209)
    at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.execute(HExecutionEngine.java:308)
    at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:835)
    at org.apache.pig.PigServer.store(PigServer.java:569)
    ... 7 more
Caused by: java.lang.RuntimeException: Could not resolve error that occured when launching map reduce job: java.lang.NoClassDefFoundError: org/apache/thrift/TBase
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$JobControlThreadExceptionHandler.uncaughtException(MapReduceLauncher.java:510)
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1845)

我不明白,因为 thrift 库被明确列出,应该被捆绑,不是吗?

最佳答案

异常清楚地表明它无法找到 TBase 类

java.lang.NoClassDefFoundError: org/apache/thrift/TBase

分解捆绑的 jar 并检查 thrift lib jar 是否实际存在于正确的位置。节俭 jar 可能已捆绑在不同的位置。

您也可以尝试将 jar 放在捆绑 jar 的 lib 文件夹中。另一种选择是将 jar 显式添加到类路径。

关于mapreduce - 通过 Pig 提交 map/reduce 作业时捆绑 jars?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409505/

相关文章:

hadoop - mapreduce:自定义任务内存不足失败

hadoop - HDFS中的数据 block 划分是如何发生的?

rest - 为什么 HBase Java 客户端比 REST/Thrift 慢

hadoop - 如何在Hadoop中的close()方法中发出信号?

java - 在自定义键的情况下,如何为自定义分区程序设置 numReduceTask

Cassandra vs Riak

cassandra - 在Cassandra中使用LCS时延迟了清除墓碑的原因

c# - C# DataStax 驱动程序中的 CassandraEntityBase

apache-spark - 在spark中读取未压缩的thrift文件

frameworks - Windows Phone 7 服务开发框架解决方案