资源描述
(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
远端环境
集群操作系统: 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.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安装
该安装步骤不是本文重点,详细方法见文档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—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
此外需要将winutils工具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工程
在pom。xml中
修改scala的版本,并enable auto import
删除
<dependency〉
<groupId>junit</groupId>
〈artifactId>junit</artifactId〉
<version〉4.4</version〉
<scope〉test〈/scope>
〈/dependency>
〈dependency>
<groupId>org.specs</groupId〉
〈artifactId>specs〈/artifactId〉
〈version>1.2.5〈/version〉
〈scope>test</scope〉
</dependency〉
设置target:jvm-1.8
<configuration〉
〈scalaVersion>${scala。version}〈/scalaVersion〉
〈args〉
<arg〉-target:jvm—1.8</arg>
</args>
〈/configuration〉
删除测试类
在工程的src/main/路径下创建resources目录
File—〉Project-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〉
<id〉cloudera〈/id〉
<url〉https://repository。cloudera。com/artifactory/cloudera-repos/</url〉
〈/repository>
在〈properties>节中 添加如下
〈properties〉
<scala。version>2。11.11</scala.version>
〈spark.version>2。2。0.cloudera1</spark.version>
〈hadoop.version〉2.6.0—cdh5。13.0〈/hadoop。version〉
〈hbase.version>1。2。0—cdh5.13.0</hbase.version〉
</properties>
在〈dependencies>节中添加spark,hbase,cdh hadoop的依赖
<!—-spark-—〉
<dependency>
〈groupId〉org.apache.spark〈/groupId〉
<artifactId〉spark—yarn_2。11</artifactId>
<version〉${spark。version}</version〉
〈/dependency>
<dependency〉
<groupId〉org。apache。spark〈/groupId〉
〈artifactId>spark—core_2.11〈/artifactId〉
<version>${spark。version}〈/version〉
〈/dependency>
<dependency〉
〈groupId〉org.apache。spark</groupId>
<artifactId〉spark—sql_2。11</artifactId>
〈version>${spark.version}〈/version〉
</dependency>
〈dependency〉
〈groupId>org。apache。spark</groupId>
〈artifactId〉spark-streaming_2.11〈/artifactId〉
〈version>${spark。version}〈/version>
〈/dependency>
<dependency〉
〈groupId〉org。apache.spark</groupId>
〈artifactId>spark—mllib_2.11</artifactId>
<version〉${spark。version}〈/version〉
</dependency>
<dependency〉
〈groupId>org。apache.spark</groupId>
<artifactId>spark—hive_2.11〈/artifactId>
〈version〉${spark。version}〈/version>
</dependency〉
<!-—hbase——>
〈dependency>
<groupId〉org。apache.hbase〈/groupId>
<artifactId〉hbase〈/artifactId>
〈version>${hbase.version}</version〉
〈/dependency>
〈!-—cdh hadoop-->
<dependency〉
〈groupId>org.apache.hadoop</groupId>
〈artifactId>hadoop-common〈/artifactId>
<version〉${hadoop。version}</version〉
</dependency>
<dependency〉
<groupId〉org.apache。hadoop〈/groupId〉
<artifactId〉hadoop-client</artifactId>
<version〉${hadoop。version}</version>
〈/dependency>
<dependency〉
〈groupId>org.apache.hadoop〈/groupId>
<artifactId〉hadoop—hdfs</artifactId〉
〈version>${hadoop.version}</version〉
</dependency>
此后会自动下载jar包,时间较长,耐性等待
新建一个scala配置对象ConfigObj
import org。apache.spark。SparkConf
/**
* 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。setJars(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/spark/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 避免每次运行都会将%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
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)
。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
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的路径
展开阅读全文