发布于 2015-02-05 01:37:08 | 398 次阅读 | 评论: 1 | 来源: PHPERZ

这里有新鲜出炉的精品教程,程序狗速度看过来!

Apache Spark

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。


本文为大家讲解的是Spark连接Hadoop读取HDFS问题小结 ,感兴趣的同学参考下。

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版本:

 
// Hadoop version to build against. For example, "0.20.2", "0.20.205.0", or  
// "1.0.4" for Apache releases, or "0.20.2-cdh3u5" for Cloudera Hadoop.  
val HADOOP_VERSION = "1.0.4"  
val HADOOP_MAJOR_VERSION = "1"  
  
// For Hadoop 2 versions such as "2.0.0-mr1-cdh4.1.1", set the HADOOP_MAJOR_VERSION to "2"  
//val HADOOP_VERSION = "2.0.0-mr1-cdh4.1.1"  
//val HADOOP_MAJOR_VERSION = "2"  

解决方案

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集群信息和账户密码;后者提供了下面这个配置:

<property>  
   <name>fs.hdfs.impl</name>  
   <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>  
   <description>The FileSystem for hdfs: uris.</description>  
</property>

完成这两步后,进入./spark-shell,运行下

val file = sc.textFile("hdfs://xxx")  
file.count()  

能正常跑出结果的话就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别的包的一些兼容啊,版本提升的问题。具体问题具体再解决吧。



最新网友评论  共有(1)条评论 发布评论 返回顶部
ssscjvm 发布于2016-09-29 14:59:14
这个不错!
支持(0)  反对(0)  回复

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务