目前CDH支持的spark版本都是1.x, 如果想要使用spark 2x的版本, 只能編譯spark源碼生成支持CDH的版本。
一、准備工作
找一台Linux主機, 由於spark源碼編譯會下載很多的第三方類庫包, 因此需要主機能夠聯網。
1、安裝Java, 配置環境變量, 版本為JDK1.7或者以上
下載地址:
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
export JAVA_HOME=/usr/java/default
export JRE_HOME=/usr/java/default/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
2、安裝Maven, 版本為3.3.9或者以上
export MAVEN_HOME=/usr/local/apache-maven-3.3.9
export PATH=$MAVEN_HOME/bin:$PATH
二、編譯Spark的源碼包
1、下載spark 2.1.0的源碼包

2、增加cdh的repository
解壓spark的源碼包,
編輯pom.xml文件, 在repositories節點 加入如下配置:
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>

3、開始編譯
./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.7.0
在編譯過程中, 可能會出現各種莫名其妙的原因導致中斷, 只需要重新執行上面的編譯命令即可, 第一編譯可能需要幾個小時,第一次編譯成功后, 后面再編譯就很快了。
編譯成功后, 可以看到如下:

編譯成功后, 可以看到生成了tar包:

三、測試
1、提交到yarn上面

需要配置HADOOP_CONF_DIR或者YARN_CONF_DIR環境變量:
# export HADOOP_CONF_DIR=/etc/hadoop/conf

val file=spark.sparkContext.textFile("/tmp/appveyor.yml")
val wc = file.flatMap(line => line.split(",")).map(word=>(word,1)).reduceByKey(_ + _)

2、訪問hive的表
需要將hive的hive-site.xml復制到spark的conf目錄下面。
scala> spark.sql("select * from iot.tp").collect().foreach(println)
