spark与hadoop版本
我使用0.7.2的spark版本,且是pre-built过的版本,支持的hadoop版本是hadoop1。在http://spark-project.org/files/上能下载的预编译过的spark版本里,凡是预编译cdh4的压缩包,下载后解压会中断,文件本身有问题。我在google论坛上发帖说明了这个问题:https://groups.google.com/forum/#!topic/spark-users/y4ij1458d18。所以我现在使用预编译了1代hadoop的spark,来连接2代hadoop。按理说在编译spark的时候,通过改动spark_home/project/sparkbuild.scala,可以指定要支持的hadoop版本:
解决方案
1. 受了https://groups.google.com/forum/#!topic/spark-users/xkj__psy-ea这个帖子的启发,替换了spark_home/lib_managed/jars下的hadoop-core-1.0.4.jar,换成了自己hadoop-client里hadoop/lib下的hadoop-2-core.jar包。
2. 在spark_home/conf下要添加hadoop的配置文件。我是添加了hadoop-site.xml和hadoop-default.xml两个配置文件。原因是,前者提供了连接的hdfs集群信息和账户密码;后者提供了下面这个配置:
完成这两步后,进入./spark-shell,运行下
能正常跑出结果的话就ok了。
其他问题
这边再提供一个unable to load native-hadoop library 和 snappy native library not loaded的解决方案。这个问题主要是jre目录下缺少了libhadoop.so和libsnappy.so两个文件。具体是,spark-shell依赖的是scala,scala依赖的是java_home下的jdk,libhadoop.so和libsnappy.so两个文件应该放到java_home/jre/lib/amd64下面。要注意的是要知道真正依赖到的java_home是哪一个,把两个.so放对地方。这两个so:libhadoop.so和libsnappy.so。前一个so可以在hadoop_home下找到,比如hadoop\lib\native\linux-amd64-64。第二个libsnappy.so需要下载一个snappy-1.1.0.tar.gz,然后./configure,make编译出来。snappy是google的一个压缩算法,在hadoop
jira下https://issues.apache.org/jira/browse/hadoop-7206记录了这次集成。
单替换了hadoop的core包后,可能还会出一些warn或者error的提示,主要牵扯到的是hadoop别的包的一些兼容啊,版本提升的问题。具体问题具体再解决吧。
(全文完)