1、word完整版)windows下非submit 方式运行spark on yarn(CDH集群) windows 下运行spark on yarn (非submit方式) 本地环境 本地操作系统: windows 10. 1709 教育版 本地hadoop版本:hadoop-2。6。5 本地winutils版本:hadoop2。6.4-2。6。7 本地spark版本: spark—2.2.0—bin-hadoop2.6 本地scala版本:scala-2。11。11 本地java版本:jdk-1.8。0_151 本地IDEA版本:idea 2017。01 远端环境
2、集群操作系统: ubuntu-14。04-server版 集群hadoop版本: cloudera—cdh—5.13.0 集群spark 版本: SPARK2-2。2。0.cloudera1—1.cdh5.12.0。p0。142354 集群scala版本: cloudera cdh 5。13 自带spark1。6 (scala运行环境scala-2.9。2) spark2.2默认是用scala—2.11.8编译 集群java版本:jdk-1。8。0_151 资源下载地址 hadoop—2。6。5 http://mirrors.tuna.tsinghua。 spark—2.
3、2。0 http://mirrors.tuna.tsinghua。edu。cn/apache/spark/spark-2.2。0/spark—2.2。0—bin-hadoop2。6.tgz scala—2.11.11 https://downloads。 winutils https://github。com/steveloughran/winutils java spark2-csd http://archive.cloudera。com/spark2/csd/SPARK2_ON_YARN—2。2。0。cloudera1.jar 安装步骤 cdh5.13安装
4、 该安装步骤不是本文重点,详细方法见文档ubuntu 14.04 搭建cloudera CDH。docx idea 安装 该安装步骤自行百度即可 cdh中安装spark 2。2.0 由于cdh集成的spark依然是spark1。6,需要在集群中添加csd,然后安装spark 2 1. 将csd文件下载并放到cloudera manager 节点的 /opt/cloudera/csd/目录下 此处需要将SPARK2_ON_YARN-2.2。0。cloudera1.jar 的用户的组修改为cloudera—scm:cloudera-scm 2。重启 cloudera-scm
5、—server 服务 service cloudera-scm—server restart 在cloudera manager 的 主机->parcel下 可找到spark2 分配激活,并在集群中添加服务即可 配置系统环境变量 安装好scala和java后,分别配置JAVA_HOME和SCALA_HOME 同样,下载好hadoop和spark后配置SPARK_HOME和HADOOP_HOME。 并在path变量中添加%JAVA_HOME%\bin %SCALA_HOME%\bin %HADOOP_HOME%\bin %SPARK_HOME%\bin 此外需要将wi
6、nutils工具bin目录下的文件全部拷贝到%HADOOP_HOME%\bin中去(重复的文件忽略) 配置IDEA和MAVEN 配置maven的源,将maven的源修改为aliyun 我们看到,IDEA内建的meven是3.3.9 它默认使用的配置文件是在windows的当前用户的。m2目录下,我们修改setting.xml 在mirrors节添加mirror IDEA配置支持scala File-〉Settings—>Plugins->搜索scala 安装即可,重启idea生效 新建scala工程
7、
在pom。xml中
修改scala的版本,并enable auto import
删除
8、5〈/version〉
〈scope>test${scala。version}〈/scalaVersion〉
〈args〉
9、Structure
1。添加scala类库
设置resources目录为资源目录
将cdh5.13 的5个配置文件拷贝放进resources目录
拷贝 core-site.xml,hdfs—site.xml,mapred-site。xml,yarn—site。xml到resources目录
拷贝 hive—site.xml 到resources目录
(若使用hbase,同理)
添加cloudera cdh maven支持
〈repository〉
10、l〉https://repository。cloudera。com/artifactory/cloudera-repos/
在〈properties>节中 添加如下
〈properties〉
11、dh5.13.0
在〈dependencies>节中添加spark,hbase,cdh hadoop的依赖
〈groupId〉org.apache.spark〈/groupId〉
12、spark〈/groupId〉
〈artifactId>spark—core_2.11〈/artifactId〉
13、d>org。apache。spark
〈artifactId〉spark-streaming_2.11〈/artifactId〉
〈version>${spark。version}〈/version>
〈/dependency>
14、ndency〉
〈groupId>org。apache.spark
15、〈/dependency>
〈!-—cdh hadoop-->
16、rsion〉${hadoop。version} 17、
/**
* ConfigObj
*
* @author longhao
* @date 2017/11/9
* Email: longhao1@email。szu。edu。cn
*/
object ConfigObj {
var sparkConf = new SparkConf()
if (System。getProperty(”os。name”).startsWith("win”) || System.getProperty(”os。name”).startsWith(”Win")) {
sparkConf。s 18、etJars(List("E:\\java_workspace\\sparkdemo\\out\\artifacts\\sparkdemo_jar\\sparkdemo。jar”))
}
sparkConf.set("spark.yarn.jars", ”local:/opt/cloudera/parcels/SPARK2/lib/spark2/jars/*")
.set("spark.eventLog。enabled”, "true")
.set(”spark.eventLog。dir”, ”hdfs://hdfs—production/user/spar 19、k/spark2ApplicationHistory”)
.set("spark.yarn。historyServer.address", "http://Medusa001:18089”)
。set("spark。executor.instances”, ”3")
.set("spark.yarn.am.memory”, "1g”)
.set(”spark。yarn.executor。memoryOverhead", ”2g”)
.setMaster(”yarn")
}
ConfigObj中配置
spark。yarn。jars 避免 20、每次运行都会将%SPARK_HOME%\jars下的jar包上传到集群。spark.eventLog.enabled 和spark.eventLog。dir以及spark.yarn。historyServer.address
配置后可以在集群history server中存储本地的job历史信息.这里的配置参考集群的/opt/cloudera/parcels/SPARK2/lib/spark2/conf下的spark-defaults.conf
如图:
新建测试代码 SparkPi
import org。apache。spark.sql。SparkSession
21、
import scala.math.random
/**
* SparkPi
*
* @author longhao
* @date 2017/11/9
* Email: longhao1@
*/
object SparkPi {
def main(args: Array[String]) {
val spark = SparkSession
。builder
.appName("Spark Pi”)
。config(conf = ConfigObj。sparkConf)
22、 。getOrCreate()
val slices = if (args.length 〉 0) args(0).toInt else 2
val n = math.min(100000L * slices, Int。MaxValue)。toInt // avoid overflow
val count = spark.sparkContext。parallelize(1 until n, slices)。map { i =>
val x = random * 2 — 1
val y = random * 2 - 1
23、 if (x * x + y * y <= 1) 1 else 0
}.reduce(_ + _)
println(”Pi is roughly " + 4.0 * count / (n - 1))
spark。stop()
}
}
此时直接运行会报错与下面文件有关
/etc/hadoop/conf.cloudera.yarn/topology。py
修改core—site.xml文件
找到net.topology.script.file。name屏蔽掉它的值
结果如下;
集群中的历史记录
环境变量中也可以看到windows的路径






