Mapreduce 卡桑德拉地图还原

Mapreduce 卡桑德拉地图还原,mapreduce,cassandra,Mapreduce,Cassandra,我正在开发一个简单的MapReduce程序,从Cassandra列族读取数据,但遇到以下错误。如有任何关于如何进行的提示,我们将不胜感激。提前谢谢 Cassandra version : 1.0.3 Hadoop version : 0.20.2 HADOOP_CLASSPATH has: apache-cassandra-1.0.3.jar, libthrift-0.6.jar, commons-lang-2.4.jar and guava-10.0.1.jar What works : Ha

我正在开发一个简单的MapReduce程序,从Cassandra列族读取数据,但遇到以下错误。如有任何关于如何进行的提示,我们将不胜感激。提前谢谢

Cassandra version : 1.0.3
Hadoop version : 0.20.2
HADOOP_CLASSPATH has: apache-cassandra-1.0.3.jar, libthrift-0.6.jar, commons-lang-2.4.jar and guava-10.0.1.jar
What works : Hadoop MR word count example, Reads from Cassandra column family using cassandra-cli, Thrift and Hector
错误:

11/12/01 20:05:23 INFO mapred.JobClient: Running job: job_201112010835_0009<br/>
11/12/01 20:05:24 INFO mapred.JobClient:  map 0% reduce 0%<br/>
11/12/01 20:05:33 INFO mapred.JobClient: Task Id : attempt_201112010835_0009_m_000000_0, Status : FAILED<br/>
Error: java.lang.ClassNotFoundException: com.google.common.collect.AbstractIterator<br/>
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)<br/>
        at java.security.AccessController.doPrivileged(Native Method)<br/>
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)<br/>
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)<br/>
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)<br/>
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)<br/>
        at java.lang.ClassLoader.defineClass1(Native Method)<br/>
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)<br/>
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)<br/>
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)<br/>
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)<br/>
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)<br/>
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)<br/>
        at java.security.AccessController.doPrivileged(Native Method)<br/>
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)<br/>
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)<br/>
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)<br/>
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)<br/>
        at org.apache.cassandra.hadoop.ColumnFamilyRecordReader.initialize(ColumnFamilyRecordReader.java:158)<br/>
        at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:418)<br/>
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:620)<br/>
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)<br/>
        at org.apache.hadoop.mapred.Child.main(Child.java:170)<br/>
11/12/01 20:05:23信息映射。作业客户端:运行作业:作业\u 201112010835\u 0009
11/12/01 20:05:24信息映射。作业客户端:映射0%减少0%
11/12/01 20:05:33 INFO mapred.JobClient:任务Id:尝试\u 201112010835\u 0009\u m\u000000\u 0,状态:失败
错误:java.lang.ClassNotFoundException:com.google.common.collect.AbstractIterator
在java.net.URLClassLoader$1.run(URLClassLoader.java:202)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:306)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)
位于java.lang.ClassLoader.defineClass1(本机方法)
在java.lang.ClassLoader.defineclassecond(ClassLoader.java:631)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:615)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
在java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
在java.net.URLClassLoader.access$000(URLClassLoader.java:58)
在java.net.URLClassLoader$1.run(URLClassLoader.java:197)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:306)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)
位于org.apache.cassandra.hadoop.ColumnFamilyRecordReader.initialize(ColumnFamilyRecordReader.java:158)
位于org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:418)
位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:620)
位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
位于org.apache.hadoop.mapred.Child.main(Child.java:170)

是否将cassandra库添加到所有任务跟踪器的类路径中?从wiki页面:

关于让任务跟踪器能够通过
Cassandra:您需要更新/conf/HADOOP-env.sh中的HADOOP_类路径
包括Cassandra lib库。例如,您将要执行以下操作
在每个任务跟踪器的hadoop-env.sh文件中:
导出HADOOP\u类路径=/opt/cassandra/lib/*:$HADOOP\u类路径
显然,该示例中的路径应该替换为系统上cassandra库的正确路径。

1)您必须确保用于Hadoop的所有cassandra JAR版本(在cassandra二进制安装的lib目录中找到的所有JAR)与Hadoop版本兼容

2) 此外,Cassandra JAR可能有一些依赖项,您应该拥有此依赖项JAR的正确版本


3) 由于JAR的版本不匹配,我遇到了相同的问题。在从hadoop类路径中清除所有Cassandra JAR,然后从最新版本的Cassandra中添加所有JAR后,我解决了这个问题。

是的,我在单节点集群上将类路径设置为Cassandra lib。有什么想法吗?哪种版本的卡桑德拉?修改类路径后是否重新启动了任务跟踪器?
One configuration note on getting the task trackers to be able to perform queries over
Cassandra: you'll want to update your HADOOP_CLASSPATH in your <hadoop>/conf/hadoop-env.sh 
to include the Cassandra lib libraries. For example you'll want to do something like 
this in the hadoop-env.sh on each of your task trackers:


export HADOOP_CLASSPATH=/opt/cassandra/lib/*:$HADOOP_CLASSPATH