官网我始终都下不下来,推荐一个国内的镜像: https://mirrors.tuna.tsinghua.edu.cn/apache/spark
虽然Spark是一个分布式计算框架,但是其不属于Hadoop Project,它有自己的资源层管理和文件系统,可以不依赖Hadoop的HDFS和Yarn,所以安装部署的时候可以只安装spark,对应的就是standalone集群, 但是一般都会使用HDFS作为数据存储层,使用Yarn进行资源管理(spark on yarn模式),这样就可以进行资源的复用,除了Yarn,还支持k8s等资源管理模块
StandAlone模式和Yarn模式资源层对应的角色如下:
StandAlone | Yarn | |
---|---|---|
主节点(管理集群计算资源) | Master | resourceManager |
工作节点(具体负责计算的节点) | Worker | nodeManager |
排除资源层的角色,剩下的就是计算层角色,主要是Driver和Executor,除了这两个角色,其实还有一个角色Client,只是Client的功能比较少,下结合这个图,介绍一下作业的执行流程:
主机名称 | Master | Worker |
---|---|---|
hdp001 | * | |
hdp002 | *(HA模式需要) | * |
hdp003 | * | |
hdp004 | * |
hdp002
hdp003
hdp004
export JAVA_HOME=/opt/hadoop/jdk1.8.0_121 #远程登录主机执行需要该变量
export HADOOP_CONF_DIR=/opt/hadoop/hadoop-2.9.2/etc/hadoop #hadoop配置文件地址,根据它找到hdfs和**yarn**
export SPARK_MASTER_HOST=hdp001 #主节点,写主节点对应的主机,如果hdp002也是主,则hdp002的配置文件要写hdp002主机
export SPARK_MASTER_PORT=7077 #主节点端口
export SPARK_WORKER_CORES=2 #worker虚拟核数
export SPARK_WORKER_MEMORY=1g #woker内存
export SPARK_MASTER_WEBUI_PORT=9090 #web界面端口
spark.deploy.recoveryMode ZOOKEEPER #也可以选择本地文件系统,一般都是zk
spark.deploy.zookeeper.url hdp001:2181,hdp002:2181,hdp003:2181,hdp004:2181
spark.deploy.zookeeper.dir /cmbspark #zk上的节点
scp 源路径 hdp002:`pwd`
准备一个测试文件上传到hdfs
命令格式:
spark-shell --master spark://hdp001:7077,hdp002:7077
进入界面后执行如下代码即可看到对应的输出:
sc.textFile("hdfs://mycluster/user/hdp01/data_in/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
spark-submit命令格式:
spark-submit \
--class <main-class> \
--master <url> \
--deploy-mode <client/cluster>
-- conf <key>=<value>
.... #other option
<application-jar>
[app-args<JVM参数或者其他>]
准备一个sh脚本运行即可,使用的代码是spark自带的例子程序:
claz=org.apache.spark.examples.SparkPi
jar=$SPARK_HOME/examples/jars/spark-examples_2.11-2.4.7.jar
$SPARK_HOME/bin/spark-submit \
--master spark://hdp001:7077,hdp002:7077 \
--class $claz\
--deploy-mode client \
$jar
100
默认情况下,spark进程退出后【包括yarn】,历史执行的任务信息也会丢失,需要配置历史记录服务存储历史任务的执行情况,不管是MR还是Spark,历史记录是由计算层负责写入对应存储层存储(比如HDFS),开启日志服务流程如下:
spark.eventLog.enabled true #开启日志记录
spark.eventLog.dir hdfs://mycluster/spark-logs #日志存储位置
spark.history.fs.logDirectory hdfs://mycluster/spark-logs #其他服务获取日志的路径,一般和上面一个是一样的
Spark On Yarn模式使用的资源层是Yarn,所以可以关闭StandAlone集群,但是需要启动Yarn集群,然后进行如下操作:
export JAVA_HOME=/opt/hadoop/jdk1.8.0_121 #远程登录主机执行需要该变量
export HADOOP_CONF_DIR=/opt/hadoop/hadoop-2.9.2/etc/hadoop #hadoop配置文件地址
<property>
<name>yarn.nodemanager.resource.memory-mbname>
<value>1024value>
property>
<property>
<name>yarn.nodemanager.cpu-coresname>
<value>2value>
property>
<property>
<name>yarn.nodemanager.vem-check-enablename>
<value>falsevalue>
property>
1、在hdfs创建目录 /work/spark_lib/jars
2、上传spark安装目录的jars目录下的jar包到以上目录
3、配置spark-default.conf
spark.yarn.jars hdfs://mycluster/work/spark_lib/jars/*
spark-shell --master yarn --executor-memory 512M --driver-memory 512M #有内存不能配置太小,有可能起不来