写在前面
CDH系列默认阉割掉了Spark的spark-sql工具,但是很多公司还是有这个使用的需要,因为线上就有这块的需求,所以结合cdh6.x版本,做了具体的对spark-sql工具支持的集成。
版本说明
组件名称 | 组件版本 |
CDH | CDH 6.2.1 |
spark | spark-2.4.8 |
第一步:下载原生apache spark
# cd /opt/cloudera/parcels/CDH/lib
# wget http://archive.apache.org/dist/spark/spark-2.4.8/spark-2.4.8-bin-hadoop2.7.tgz
# tar zxvf spark-2.4.8-bin-hadoop2.7.tgz
# ln -s spark2 spark-2.4.8-bin-hadoop2.7
第二步:修改spark配置文件
2.1 配置spark-env.sh
#!/usr/bin/env bash ##JAVA_HOME 需要结合实际路径配置 export JAVA_HOME=/usr/java/jdk1.8.0_144 export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive export HADOOP_COMMON_HOME="$HADOOP_HOME" export HADOOP_CONF_DIR=/etc/hadoop/conf export YARN_CONF_DIR=/etc/hadoop/conf export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark2 export SPARK_CONF_DIR=${SPARK_HOME}/conf |
2.2 配置spark-defaults.conf
小提示:建议直接cp 现有spark的配置文件,在此基础上修改。
# cd /opt/cloudera/parcels/CDH/lib/spark2/conf #cp -r /etc/spark/conf/spark-defaults.conf ./ ### 将hive的配置文件一并cp过来 #cp /etc/hive/conf/hive-site.xml ./ |
Vim /opt/cloudera/parcels/CDH/lib/spark2/conf/spark-defaults.conf
小提示:修改配置文件时,只需要修改文件中标红部分即可,其他可以保持默认。
spark.authenticate=false spark.driver.log.dfsDir=/user/spark/driverLogs spark.driver.log.persistToDfs.enabled=true spark.dynamicAllocation.enabled=true spark.dynamicAllocation.executorIdleTimeout=60 spark.dynamicAllocation.minExecutors=0 spark.dynamicAllocation.schedulerBacklogTimeout=1 spark.eventLog.enabled=true spark.io.encryption.enabled=false spark.network.crypto.enabled=false spark.serializer=org.apache.spark.serializer.KryoSerializer spark.shuffle.service.enabled=true spark.shuffle.service.port=7337 spark.ui.enabled=true spark.ui.killEnabled=true spark.lineage.log.dir=/var/log/spark/lineage spark.lineage.enabled=true spark.master=yarn spark.submit.deployMode=client spark.eventLog.dir=hdfs://ds-nameservice1/user/spark/applicationHistory spark.yarn.historyServer.address=http://ds-bigdata-001:18088 ## 我这里将spark的依赖包都放在hdfs上 spark.yarn.jars=hdfs://ds-nameservice1/user/spark2/jars/* spark.driver.extraLibraryPath=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1580995/lib/hadoop/lib/native:/opt/cloudera/parcels/GPLEXTRAS-6.2.0-1.gplextras6.2.0.p0.967373/lib/hadoop/lib/native spark.executor.extraLibraryPath=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1580995/lib/hadoop/lib/native:/opt/cloudera/parcels/GPLEXTRAS-6.2.0-1.gplextras6.2.0.p0.967373/lib/hadoop/lib/native spark.yarn.am.extraLibraryPath=/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1580995/lib/hadoop/lib/native:/opt/cloudera/parcels/GPLEXTRAS-6.2.0-1.gplextras6.2.0.p0.967373/lib/hadoop/lib/native spark.yarn.config.replacementPath={{HADOOP_COMMON_HOME}}/../../.. spark.yarn.historyServer.allowTracking=true spark.yarn.appMasterEnv.MKL_NUM_THREADS=1 spark.executorEnv.MKL_NUM_THREADS=1 spark.yarn.appMasterEnv.OPENBLAS_NUM_THREADS=1 spark.executorEnv.OPENBLAS_NUM_THREADS=1 #spark.extraListeners=com.cloudera.spark.lineage.NavigatorAppListener #spark.sql.queryExecutionListeners=com.cloudera.spark.lineage.NavigatorQueryListener |
2.3 配置日志级别
# vim /opt/cloudera/parcels/CDH/lib/spark2/conf/log4j.properties
在配置文件中追加以下配置项,其他保持默认
log4j.logger.org.apache.spark=WARN |
第三步:配置依赖包
3.1 上传spark 依赖jar包
##将spark的依赖jar包放到hdfs指定路径(说明:这个和配置文件中spark.yarn.jars的配置项相对应,如果使用的是local路径,可以不上传。) # hdfs dfs -mkdir -p hdfs://ds-nameservice1/user/spark2/jars/ # hdfs dfs -put /opt/cloudera/parcels/CDH/lib/spark2/jars/* hdfs://ds-nameservice1/user/spark2/jars/ |
3.2 配置lzo jar包
#cp /opt/cloudera/parcels/GPLEXTRAS/jars/hadoop-lzo-0.4.15-cdh6.2.0.jar /opt/cloudera/parcels/CDH/lib/spark2/jars/ |
第四步:配置spark-sql 的全局变量
vim /etc/profile.d/spark.sh
#!/bin/bash export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark2 export PATH=$SPARK_HOME/bin:$PATH |
#生效
# source /etc/profile |
第五步:测试使用
全局的任意位置执行 spark-sql指令(注意:执行的linux用户需要有提交任务到yarn的权限)
如果都没有问题,执行show databases ;会看到集群中的所有库。
补充说明:其他客户端如果需要此环境,将上述配置全部scp过去即可。