1、编译spark源文件

下载spark时,可以选择对应自己hadoop版本的pre-built版下载最新spark1.3.0。

如果没有自己hadoop版本对应的预构建版本,或者spark对应的hive版本不一致等都需要重新构建

构建方法详情见spark官网网址为https://spark.apache.org/docs/latest/building-spark.html

本文是使用maven进行构建,构建的命令为:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

执行上述命令,避免在构建过程中内存不足错误。然后执行以下命令:


mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -Phive -Phive-0.12.0 -Phive-thriftserver -DskipTests clean package


Pyarn代表支持yarn,Phadoop指定hadoop版本,Phive指定hive版本。

只需要更改hadoop版本和hive版本即可。详情见https://spark.apache.org/docs/latest/building-spark.html

编译时间大概为两三个小时,具体根据网络情况而定。


由于我使用的是hadoop2.3版本,我首先下载了一个pre-built  for hadoop2.3版本的spark,由于我使用的hive版本为0.12.0,pre-built内hive版本为0.13.0不能使用。

我们只需将刚才构建spark目录下assembly/target/scala-2.10目录下的spark-assembly-1.3.0-hadoop2.3.0.jar文件将pre-built  for hadoop2.3版本目录下lib中的相同文件替换掉。此时pre-built  for hadoop2.3就是我们需要的spark for hadoop2.3  and hive0.12.0。

如果没有hadoop版本需要重新构建spark目录为pre-built spark形式。

2、在yarn上运行spark

修改spark配置,首先hive-site.xml文件放入spark目录下的conf文件中,以便支持hive。此时如果有一些不兼容的错误,需要修改hive-site.xml文件,

<property>
     <name>hive.metastore.schema.verification</name>
     <value>true</value>
   </property>

将上面的value值改为false

修改spark-env.sh配置

export JAVA_HOME=/usr/java/jdk1.7.0_55-cloudera
export SCALA_HOME=/path/scala-2.10.5
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HIVE_CONF_DIR=/etc/hive/conf
export SPARK_EXECUTOR_INSTANCES=12
export SPARK_EXECUTOR_CORES=6
export SPARK_EXECUTOR_MEMORY=4G
export SPARK_DRIVER_MEMORY=512M
export SPARK_YARN_APP_NAME="spark-130"
export SPARK_LIBRARY_PATH=${SPARK_HOME}/lib



以上的配置对spark on yarn 的client模式下起作用,如果配置其他的可以参考spark-env.sh.template文件说明,或者spark-shell --help查看

运行spark-sql会报缺少mysql驱动包错误,下载mysql-connector-java.jar包

在运行程序时进行指定一下就可以了

如下:

./spark-shell \
  --master yarn-client \
  --driver-class-path /path/spark-1.3.0-bin-hadoop2.3/lib/mysql-connector-java-5.1.18-bin.jar



3、说明

如果想让spark运行在yarn之上,spark部署将会非常简单。只需要将上面构建好的spark文件拷贝到driver机器上,运行spark  bin目录下命令即可,如果是client模式,yarn将会按照conf/spark-env.sh文件中设置的cpu和内存、worker  instances进行部署,部署工作由yarn进行分发,包括jar包的分发。如果是cluster模式,需要在命令行进行指定。

spark构建文件只需要放到一台机器上,就可以通过yarn启动数十台spark worker机器。