分享

在Hadoop 2.2.0上部署Spark

需要注意两点:(1)使用的Hadoop必须是2.0系列,比如0.23.x,2.0.x,2.x.x或CDH4、CDH5等,将Spark运行在Hadoop上,本质上是将Spark运行在Hadoop YARN上,因为Spark自身只提供了作业管理功能,资源调度要依托于第三方系统,比如YARN或Mesos等 (2)之所以不采用Mesos而是YARN,是因为YARN拥有强大的社区支持,且逐步已经成为资源管理系统中的标准。

注意,目前官方已经发布了0.8.1版本,可以直接从这里选择合适的版本下载,如果你使用的是hadoop 2.2.0或者CDH5,可以直接从这里下载。

将Spark部署到Hadoop 2.2.0上需要经过以下几步:

步骤1:准备基础软件

步骤2:下载编译spark 0.8.1或者更高版本

步骤3:运行Spark实例

接下来详细介绍这几个步骤。

步骤1:准备基础软件

(1) 基本软件

包括linux操作系统、Hadoop 2.2.0或者更高版本、Maven 3.0.4版本(或者最新3.0.x版本),其中,Hadoop 2.2.0只需采用最简单的方式安装即可,具体可参考我的这篇文章:Hadoop YARN安装部署,Maven安装方法很简单,可以在http://maven.apache.org/download.cgi上下载binary版本,解压后,配置MAVEN_HOME和PATH两个环境变量,具体可自行在网上查找相关方法,比如这篇“Linux下安装maven”,但需要注意,版本不是3.0.x版,Spark对版本要求很严格。

(2)硬件准备

Spark 2.2.0专门搞出来一个yarn-new支持hadoop 2.2.0,因为hadoop 2.2.0的API发生了不兼容变化,需要使用Maven单独编译并打包,而编译过程非常慢(一般机器,2个小时左右),且占用内存较多,因此,你需要一台满足以下条件的机器作为编译机:

条件1:可以联网:第一次编译时,maven需要从网上下载大量的jar包,速度比较慢,如果你网络不行,建议直接放弃编译。

条件2:内存2GB以上

步骤2:下载编译spark 0.8.1或者更高版本

可以用git下载或者直接wget或者spark 0.8.1版本
  1. wget https://github.com/apache/incubator-spark/archive/v0.8.1-incubating.zip
复制代码
注意,0.8.1之前的版本不支持hadoop 2.2.0,从0.8.1版本开始支持。

下载之后,对其解压:
  1. unzip v0.8.1-incubating
复制代码
然后进入解压目录,输入以下命令:
  1. cd incubator-spark-0.8.1-incubating
  2. export MAVEN_OPTS=”-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m”
  3. mvn -Dyarn.version=2.2.0 -Dhadoop.version=2.2.0  -Pnew-yarn -DskipTests package
复制代码
一般需要等待很长时间,编译完成后,将spark内核打包成一个独立的jar包,命令如下:
  1. SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true ./sbt/sbt assembly
复制代码
打包完成后,在assembly/target/scala-2.9.3/目录下会生成两个jar包,其中一个是spark-assembly-0.8.1-incubating-hadoop2.2.0.jar,examples/target/scala-2.9.3/下面也有一个jar包:spark-examples-assembly-0.8.1-incubating.jar,接下来将重点使用这两个包。
如果你想把spark作为一个客户端,放到hadoop集群上,供用户使用,需要拷贝以下几个目录:
  1. conf/
  2. assembly/target/scala-2.9.3/ 只需拷贝jar包
  3. examples/target/scala-2.9.3/只需拷贝jar包
  4. spark-class
复制代码
注意,需要保证以上目录的层次结构,即一个目录下有:
  1. conf目录、spark-class文件,assembly目录(内部有target目录)、examples目录(内部有target目录)
复制代码
一切就绪后,可以编写一个shell脚本run_spark_shell.sh运行pi计算程序:
  1. #用YARN_CONF_DIR或HADOOP_CONF_DIR指定YARN或者Hadoop配置文件存放目录
  2. export YARN_CONF_DIR=/opt /yarn/etc/hadoop/
  3. SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \
  4. ./spark-class org.apache.spark.deploy.yarn.Client \
  5. –jar ./assembly/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \
  6. –class org.apache.spark.examples.JavaSparkPi \
  7. –args yarn-standalone \
  8. –num-workers 3 \
  9. –master-memory 2g \
  10. –worker-memory 2g \
  11. –worker-cores 1
复制代码
然后运行该shell脚本:
  1. sh run_spark_shell.sh
复制代码
可在终端看到以下内容:
以上程序比较简单,你可以运行一个复杂点的迭代程序,Spark提供了一个图闭包传递算法(Transitive closure),可以通过以下脚本运行(run_spark_tc.sh):
  1. #用YARN_CONF_DIR或HADOOP_CONF_DIR指定YARN或者Hadoop配置文件存放目录
  2. export YARN_CONF_DIR=/opt /yarn/etc/hadoop/
  3. SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \
  4. ./spark-class org.apache.spark.deploy.yarn.Client \
  5. –jar ./assembly/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar \
  6. –class org.apache.spark.examples.SparkTC \
  7. –args yarn-standalone \
  8. –num-workers 3 \
  9. –master-memory 2g \
  10. –worker-memory 2g \
  11. –worker-cores 1
复制代码
运行该脚本后,可在YARN界面上看到运行过程:

如果你使用的CDH4或者2.0.x版本,无需使用maven编译,直接使用sbt打包即可,具体可参考:Building a YARN-Enabled Assembly JAR。

截止目前,CDH成为第一个宣称支持Spark的发行版,预计在CDH5版本中将打入Spark,到之后使用Spark更加方便。

另外,如果你只想体验一下Spark,不想自己编译打包Spark,可以直接下载我打包好的spark(下载地址:spark-on-hadoop-2.2.0.tar.gz),内置两个可以直接运行的spark作业(run_spark_pi.sh和run_spark_tc.sh),不过运行前,你需要先配置以下hadoop目录所在位置,即修改脚本的第一行内容:

export YARN_CONF_DIR=/opt/pgs/yarn/etc/hadoop/

目前0.8.1版本已经发布,官网提供了安装包下载,下载后可以直接使用,下载链接是:spark-hadoop2。



来自群组: Hadoop技术组

已有(2)人评论

跳转到指定楼层
9528 发表于 2014-2-18 10:14:35
学习一个,楼主辛苦了
回复

使用道具 举报

月岩 发表于 2014-6-18 22:08:01
学习一下  很好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条