本篇安装版本
spark-2.1.1-bin-hadoop2.7
zeppelin0.9.0
Flume1.7
sqoop1.4.7
hbase-1.3.1
phoenix4.11
Spark
1、在官网下载解压spark的安装包
2、进入conf文件夹中将配置文件中的spark-defaults.conf.template、spark-env.sh.template和slaves.template末尾的“.template”去掉
在spark-env.sh文件中修改如下配置,这里要提一嘴,我虽然写了hadoopHome,但只是出于习惯才写的,其实spark本身并不需要所有的hadoophome下的文件,打开配置文件后看上面的注释,就可以发现它只需要hadoop的配置文件,而不是所有的,所以不要以为hadoop和spark必须在同一个群节点或者是需要有交集的节点
#JAVA JDK
export JAVA_HOME=/opt/jdk1.8.0_144
#scala JDK
export SCALA_HOME=/opt/scala-2.11.12
#master节点的IP
export SPARK_MASTER_IP=hdp2
export SPARK_MASTER_PORT=7077
#HADOOP_HOME
export HADOOP_HOME=/opt/hadoop-2.7.2
#hadoop配置文件
export HADOOP_CONF_DIR=/opt/hadoop-2.7.2/etc/hadoop/
#明确Spark Master、Worker守护进程的JVM选项,注意修改自己的 zookeeper地址
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp1:2181,hdp2:2181,hdp3:2181 -Dspark.deploy.zookeeper.dir=/spark"
#spark历史服务器的访问端口号,并设置底层日志文件保存在hdfs上,同时指定保留任务数上限,注意如果你是高可用hadoop,那么hdp1:9000应该修改为NN队列名,如果你的spark是单独运行。那么此处路径你可以写一个本地路径,但将意味着访问日志文件不是那么方便。这个配置可以写在spark-default.conf中
export SPARK_HISTORY_OPTS="-Dspark.yarn.historyServer.address=hdp2:18018 -Dspark.eventLog.enabled=true -Dspark.history.ui.port=18018 -Dspark.history.fs.logDirectory=hdfs://hdp1:9000/spark/applicationHistorylog -Dspark.history.retainedApplications=30"
#计算完成清理任务临时目录,一般on yarn的yarn会清理,但是保险起见配上
export SPARK_WORKER_OPTS=”-Dspark.worker.cleanup.enabled=true”
#单个worker资源配置
export SPARK_WORKER_CORES=6
export SPARK_WORKER_MEMORY=6g
#守护进程内存
export SPARK_DAEMON_MEMORY=1g
#单个worker持有的容器数,配置这个一定要确保资源可以均分
#export SPARK_WORKER_INSTANCES=2
#master节点的web页面端口
export SPARK_MASTER_WEBUI_PORT=8080
#worker节点的web页面端口
export SPARK_WORKER_WEBUI_PORT=8081
#关闭REST服务,防止被攻击,一般都是on yarn所以master并不需要自身的REST服务
export SPARK.MASTER.REST.ENABLED=false
#REST服务的端口号
#export SPARK.MASTER.UI.PORT=8082
当然整个spark不止上面这些配置,只是我们自己使用常配的就这几个,有兴趣了解其他配置的可以看官网或者是spark-env常用配置
在spark-defaults.conf中添加如下配置。后期需要统一让spark任务带默认参数就需要在spark-defaults.conf文件中定义
#上面env文件中的SPARK_HISTORY_OPTS你会在有些公司看到下面的这种单个配置方式,效果也是一样的,这里由于上面配置了,所以注释
#开启日志聚合
#spark.eventLog.enabled true
#spark的日志服务器地址,主要是yarn会读取这个配置从而跳转
#spark.yarn.historyServer.address hdp2:18018
#声明spark his服务的端口
#spark.history.ui.port 18018
#hdfs上的日志聚合地址,如hadoop是高可用,那么hdp1:9000改成对应的NN队列名,同时这个配置如果和spark-env中一起存在,一定要和spark-env.sh里面的日志聚合路径一致,至于日志服务器的所在节点是随着你的启动命令决定的
#spark.eventLog.dir hdfs://hdp1:9000/spark/applicationHistorylog
#his服务上保留多少个任务
#spark.history.retainedApplications 30
#spark处理任务日志的逻辑类
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider
#自己使用不需要,在每个公司内会实现一些 implement SparkListener 的类,逗号分割,在任务初始化时调用单参conf对象构造器,干一些事情
#spark.extraListeners xxxx
#sparksql对分区数据写入时的默认行为,这里改成覆写,它不会影响hive语句的行为。不过 rdd集合.write.option("partitionOverwriteMode", "dynamic").save(path) 优先级比它高
spark.sql.sources.partitionOverwriteMode dynamic
#设置为false,允许在交互式或者其他sql场景下通过set命令修改核心参数,这个核心参数比较模糊,一般都是放开的
spark.sql.legacy.setCommandRejectsSparkCoreConfs false
#开启日志滚动,且设置单个文件128M
spark.eventLog.rolling.enabled true
spark.eventLog.rolling.maxFileSize 128m
#spark在hdfs上的资源jar,通常的商用on yarn集群不配置这个,让spark默认在提交任务时将jar打包进task,上传到hdfs运行任务时从task解压,这样就允许使用方动态的加一些资源,可控性比直接从hdfs上拉取高
spark.yarn.jars hdfs://hdp1:9000/home/hadoop/spark_jars/*.jar
#当前任务的ui端口
spark.ui.port 14040
#任务状态暴露能力,一般不需要另行配置,只有明确的第三方工具确定了,才显示为true
#spark.metrics.appStatusSource.enabled false
随后确保hadoop日志聚合是开启状态,并在hdfs上创建出配置文件中对应的/spark/applicationHistorylog、/home/hadoop/spark_jars目录,并将日志目录的权限修改为777,而spark_jars存放$SPARK_HOME/jars文件夹下的所有jar包
hadoop fs -mkdir -p /home/hadoop/spark_jars
hadoop fs -mkdir -p /spark/applicationHistorylog
hadoop fs -put /opt/spark-2.1.1/jars/* /home/hadoop/spark_jars
hadoop fs -chmod 777 /spark/applicationHistorylog
在slaves文件中修改集群成员如:
hdp1
hdp2
hdp3
3、将spark分发在服务器集群中
4、在master节点服务器的spark的sbin下使用相关命令启动spark
start-all-sh
start-history-server.sh
5、编写一个小程序,当我们编译好jar之后,在spark集群中使用时,调用bin目录下的spark-submit命令,格式如下,命令中的“\”是为了不让命令输入时,使用回车之后,直接执行命令,可以达到命令多行输入的效果,后面是解释,要注意我用的是自带的测试jar,该jar随着spark版本不同自身不同,大家自己注意一下
bin/spark-submit \ 调用的命令
--class org.apache.spark.examples.SparkPi \ 使用jar包中的那个类
--master spark://hdp1:7077 \ spark集群Master的地址,spark在这一点上比较奇葩,你在那台节点上运行的启动集群命令那台节点就很大概率是master节点,如是本地模式这个命令参数值为local就可以,不过一般本地的话都是在开发用的不会上机器
examples/jars/spark-examples_2.11-2.1.2.jar \ jar包路径,路径用自己的我这个路径是相对路径,这个配置写在倒数第二个
10 jar包运行时要传入参数,一般这个配置就是写到最后的
以上命令是最省略版的,如有需要可以去查询其他的参数,不过一般常用的格式如下
spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10
对于master参数,在实际使用时都是在yarn上执行,而并非直接使用spark自己的master调度
如果你想访问spark的iu页面,可以在浏览器中访问master节点的8080端口,而不是7077,历史服务器是你在那台节点上启动的spark历史服务就是那台
有一点要注意,上面的配置用的时spark on yarn,虽然有三个节点,但其实一个就够了,毕竟只需要用来生成spark上下文资源提交到yarn而已,甚至服务进程相关的资源配置都可能往小了设置。但如果你要搭建spark on master的测试环境,除了合理设置上面各项服务配置之外,还要在spark-defaults.conf文件中合理设置spark.local.dir配置,这是woker节点的工作路径,和yarn的yarn.nodemanager.local-dirs一个意思,还要在spark-env.sh中设置SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true",使得spark自动维护工作路径的空间
zeppelin
这个软件是一个可视化代码工具,支持很多的服务,在安装上属于开箱即用,apache下的

最低0.47元/天 解锁文章
745






