本地环境:
- hadoop3.0
- spark2.3
注:由于测试中,换了机器,导致下面的截图,是在两个spark版本(2.2和2.3)的机器上做的,hostname略有不同(hdp1 和 hd1) ,不影响实际结果,下面的配置依然是正确的,实际测试中以自己的hostname,spark版本为准!
1.下载,解压
2.目录结构
bin:本地脚本
sbin:服务端脚本
conf:配置文件
examples:样例代码
jars:依赖包(1.x是在lib目录,很少的几个大包, 2.x是在jars目录下,很多个小包)
1.x的lib目录
2.x的jars目录
3.local模式(测试用):
不用改任何配置,不用启动任何进程(开箱即用)
./spark-shell --master local[2] --name test
log4j在conf目录下,可以调节log级别,默认info级别
(4)standlone模式(spark集群,master/slave主从模式)
修改conf下的spark-env.sh
export SCALA_HOME=/DATA/sdb/scala-2.11.8 export JAVA_HOME=/etc/alternatives/java_sdk_1.8.0 export SPARK_MASTER_IP=hdp1 export SPARK_WORKER_CORES=31 export SPARK_WORKER_MEMORY=120g export HADOOP_CONF_DIR=/DATA/sdb/hadoop-3.0.0/etc/hadoop export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
修改slaves文件(hosts写上去)
hdp1 hdp2 hdp3
启动
./sbin/start-all.sh
jps查看有worker和master两个进程
web ui是在8080
这个模式,修改配置文件需要同步到其他节点
(5)spark on yarn模式
- 不需要启动任何进程
- 只是把spark作为作业提交的客户端而已
- 修改配置文件不需要同步到其他节点
- yarn的Resource Manager 和 Node Manager 要先启动起来
- spark on yarn是把作业提交到yarn上运行
- 只在1到2台机器上部署spark即可
- 所有运行调度交给yarn,通过Resource Manager申请资源,然后再NodeManager上启动container,把spark作业泡在yarn的NodeManager上的container里
启动命令
./spark-shell --master yarn
注意:
- 需要配置hadoop_conf_dir或yarn_conf_dir(否则报错)
- lib下放mysql驱动包,使用mysql做数据源
- spark.yarn.jars或spark.yarn.archive需要配置,避免每次都上传jar包到集群
(6)参数
--jars 指定依赖包
(7)spark.yarn.jars配置
在spark-defaults.conf文件里添加下面参数,注意一定要写 /* ,不是 /(如果写/,会启动失败,具体如下图)
spark.yarn.jars hdfs://hd1:9000/jars/*
验证参数效果:启动 spark-sql --master yarn
<1>不设置这个参数,分析日志,发现会上传两个zip包,一个是conf,一个是libs
下载日志中的libs zip包hdfs://hd1:9000/user/root/.sparkStaging/application_1521429219577_0032/__spark_libs__2446030819495419882.zip
本地解压后,查看目录里的jar包,和spark目录下的jars完全一致(210个包)
<2>设置这个参数,分析日志,只会上传一个conf的zip包(2.x版本和1.x版本配置后,日志的输出内容不太一样)