spark2.3安装以及遇到的一些坑

最近公司的基于CDH的Hadoop大数据计算平台需要迁移,由于时间过长,原来的搭建步骤以及踩过的坑都忘得差不多了,现在为了将来能够有个依据,特将本次重新搭建平台所踩的坑给记录下来。

    使用的软件及版本:

        CDH-5.14.2-1.cdh5.14.2.p0.3

        jdk1.8.0_171

        Spark2.3

    总体的步骤参看请参看这篇文章:http://blog.csdn.net/f1321368/article/details/49635587,讲得蛮详细的,图文件并茂。

    下面记录的是一些上面那篇文件中没有谈到的一些问题,也就是我所碰到的另外的一些坑的处理办法。

    1.添加Cloudera数据源

    在安装的第一步更新源的过程中,需要选择适合自己linux版本的cloudear.list,如我的ubuntu是xenial,因而我选择的是http://archive.cloudera.com/cm5/ubuntu/xenial/amd64/cm/cloudera.list,并保存在目录/etc/apt/sources.list.d中,在执行系统更新命令"apt update && apt upgrade"之前,需要把archive.key取下来,我的对应的是http://archive.cloudera.com/cm5/ubuntu/xenial/amd64/cm/archive.key,并通过命令"apt-key add archive.key"将其key添加到系统中。

2.手动安装JDK1.8

如果只想使用CDH当前自带的Spark1.6,那么可以不用安装JDK1.8,安装JDK1.7即可,如果需要使用Spark2.3(后面有如何安装),则需要安装JDK1.8,否则后面想使用的时候再来修改集群中的JDK,那会碰到很多莫名的问题,别问我为什么知道。

安装JDK1.8最好是从Oracle官方下载,然后解压到/usr/lib/jvm目录中,并在/etc/profile中增加上JAVA_HOME变量并把bin目录加到PATH中:
  1. JAVA_HOME= /usr/lib /jvm/jdk1. 8.0_171
  2. PATH=$JAVA_HOME/ bin:$PATH
  3. export PATH JAVA_HOME
    为了防止其它问题的发生,最好建立如下的软链接:
  1. ln -s /usr/ lib/jvm/jdk1 .8 .0_171 /etc/alternatives/java
  2. ln -s /etc/alternatives/java /usr/bin/java
  3. ln -s /usr/bin/java /bin/java

    3.修改SCM的模式为生产模式

    修改scm的数据库为外部数据库,这样做的目的是不使用其自带的数据库,以避免SCM控制台提示非生产环境,也可以避免以后将数据从自带的数据库迁移到外面,当然数据也确实会更加安全。

    相关参考: https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_installing_configuring_dbs.html#cmig_topic_5_2
    1)准备好外部可用的数据库:
  1. create database scm default character set utf8;
  2. grant all privileges on scm.* to 'scm'@ '%' by 'scm';
  3. flush privileges;
    2)然后执行数据库初使化(在执行数据库初使用脚本之前,需要先安装后JDK):    
/usr/share/cmf/schema/scm_prepare_database.sh mysql -h db_server scm scm scm

    命令的使用方法,可直接输入scm_prepare_database.sh不带参数,会有提示。


    4.安装mysql的jdbc驱动
    在上面的提到的参考文章中的安装过程的第5步启动cloudera manager过后,可能无法访问7180端口,此时查看cloudera的日志文件,其存放于/var/log/cloudera-scm-server目录下,会发现“JDBC Driver class not found: com.mysql.jdbc.Driver” 这样的错误,这是没有找到对应的mysql jdbc connector,解决方案是通过如下命令安装mysql的java驱动:
apt install libmysql-java
    然后安装的搜索出来的libmysql-java解决的问题。

    安装完后,需要重启cloudera服务了。另http://www.cnblogs.com/spec-dog/p/4664944.html 这篇日志有记录这个错误。

    5.准备spark2.3的相关的包

    将spark2.3的paralles放到cloudera对应的目录下,以便于cdh可以正确发现该包,并可以执行安装。为了简化,我使用以下命令处理:    

  1. cd /opt/cloudera/csd
  2. wget http: //archive.cloudera.com/spark2/csd/SPARK2_ON_YARN-2.3.0.cloudera2.jar
  3. cd /opt/cloudera/parcel-repo
  4. wget http: //archive.cloudera.com/spark2/parcels/2.3.0.cloudera2/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-xenial.parcel
  5. wget http: //archive.cloudera.com/spark2/parcels/2.3.0.cloudera2/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-xenial.parcel.sha1
  6. wget http: //archive.cloudera.com/spark2/parcels/2.3.0.cloudera2/manifest.json
  7. mv SPARK2- 2.3.0.cloudera2- 1.cdh5.13.3.p0.316101-xenial.parcel.sha1 SPARK2- 2.3.0.cloudera2- 1.cdh5.13.3.p0.316101-xenial.parcel.sha

    以上命令在每台服务器上都要执行,并且一定要在CM的管理控制台Hosts->Parcels中找到Spark2,并点击Distribute,分发完成后,再点击Active,然后才能够在CM中增加该服务

    参考:https://blog.csdn.net/u010936936/article/details/73650417

    6.重新安装Cloudera服务可能会碰到的一些问题

    在某些情况下,集群可能需要重装,有甚至于整个Cloudera服务都需要删除过后再重装,但是重装并不是我们想像中的那么简单,它甚至于第一次安装都更有可能碰到莫名的问题,以下是我所碰到一些莫名问题的记录。

    1)启动scm服务时找不到JAVA_HOME
    操作步骤:
    安装cloudera manager service后执行启动scm服务的命令:    
service cloudera-scm-server start
    在scm server的日志文件中报找不到JAVA_HOME的错误"Error: JAVA_HOME is not set and Java could not be found",但是系统确实是设置了JAVA_HOME,通过echo $JAVA_HOME也可以看到
    解决办法:
    通过修改/etc/default/cloudera-scm-server该文件,在其中增加上JAVA_HOME,如下:    
export JAVA_HOME="/usr/lib/jvm/jdk1.8.0_171"

    再次启动服务就正常了。

    2)在scm的web控制台安装新的集群时,填入应用如hive等外部数据库的链接时,点测试链接提示无法链接。
    这种情况会有两个错误:
    a)没有安装mysql把jdbc驱动,这种错误可以通过在每台服务器上执行以下安装命令即可解决问题:    
apt install libmysql-java
    b)明明有安装jdk,也有配置JAVA_HOME,但是却提示找不到java
    通过查看日志,agent会在/usr/lib/jvm目录下遍历一些jdk的目录,如下:
  1. 2018- 05- 24 03 : 16 : 55, 668 INFO CommandPusher:com.cloudera.cmf.service. AbstractDbConnectionTestCommand: ++ ls -rvd '/usr/lib/jvm/java-openjdk*'
  2. + for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
  3. ++ ls -rvd '/usr/lib/jvm/jre-openjdk*'
  4. + for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
  5. ++ ls -rvd '/usr/lib/jvm/java-1.7.0-openjdk*'
  6. + for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
  7. ++ ls -rvd '/usr/lib/jvm/java-7-openjdk*'
  8. + for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
  9. ++ ls -rvd '/usr/lib/jvm/java-1.8.0-openjdk*'
  10. + for candidate_regex in '${JAVA_HOME_CANDIDATES[@]}'
  11. ++ ls -rvd /usr/lib/jvm/java- 8-openjdk
  12. + for candidate in '`ls -rvd ${candidate_regex}* 2>/dev/null`'
  13. + '[' -e /usr/lib/jvm/java- 8-openjdk/bin/java ']'
  14. + export JAVA_HOME= /usr/lib /jvm/java- 8-openjdk
  15. + JAVA_HOME= /usr/lib /jvm/java- 8-openjdk
    从上面的日志可以看出,它会尝试读取一些JDK的安装目录,但我安装的是jdk1.8.0_171,并不在它检查的列表里面,此时解决的办法也简单,在/usr/lib/jvm下面,给其检查列表中的JDK增加一个软链接即可,每台服务器执行以下命令:
  1. cd /usr/lib/jvm
  2. ln -s jdk1.8.0_171 java-8-openjdk
    3)在web控制台查看服务器状态时,提示有些服务器的状态是“Host is in bad health”
    通过查看该台服务器scm agent的日志,发现其中有报如下错误:
MainThread agent        ERROR    Error, CM server guid updated, expected 348656e4-51b5-4d77-b056-181ff1f70c54, received 78e112e3-4c6f-46d0-b141-bec649b737c5
    解决方法如下:
    a)停止agent服务    
service service-scm-agent stop
    b)删除原来的cm_guid(不同版本的scm,这个文件的位置可能不一样,可以通过查看命令的找出来:find / -name cm_guid)    
rm /var/lib/cloudera-scm-agent/cm_guid
    c)启动agent服务    
service service-scm-agent start

    7.其它一些服务器准备的脚本   

    1)创建外部数据库(SQL脚本)
  1. create database scm default character set utf8;
  2. create database hive default character set utf8;
  3. create database hue default character set utf8;
  4. create database amon default character set utf8;
  5. create database rman default character set utf8;
  6. create database oozie_oozie_server default character set utf8;
  7. create database navms default character set utf8;
  8. grant all privileges on scm.* to 'scm'@ '%' identified by 'scm';
  9. grant all privileges on hive.* to 'hive'@ '%' identified by 'hive';
  10. grant all privileges on hue.* to 'hue'@ '%' identified by 'hue';
  11. grant all privileges on amon.* to 'amon'@ '%' identified by 'amon';
  12. grant all privileges on rman.* to 'rman'@ '%' identified by 'rman';
  13. grant all privileges on oozie_oozie_server.* to 'oozie'@ '%' identified by 'oozie';
  14. grant all privileges on navms.* to 'navms'@ '%' identified by 'navms';
    2)在每台服务器上执行硬盘格式化和挂载,这里的硬盘是/dev/xvdb,如果是其它位置根据情况调整
  1. mkfs.ext4 /dev/xvdb
  2. mkdir /data
  3. mount /dev/xvdb /data
  4. echo "/dev/xvdb /data ext4 defaults 0 0" & gt;& gt; /etc/fstab
    3)设置服务器的名称(每台服务器执行命令带不同的参数,这里可以不用执行,默认服务器的名称就类似如下的)
  1. hostnamectl set-hostname ip -172 -31 -16 -71
  2. hostnamectl set-hostname ip -172 -31 -20 -195
  3. hostnamectl set-hostname ip -172 -31 -31 -194
  4. hostnamectl set-hostname ip -172 -31 -19 -103
  5. hostnamectl set-hostname ip -172 -31 -28 -125
  6. hostnamectl set-hostname ip -172 -31 -24 -50
  7. hostnamectl set-hostname ip -172 -31 -24 -63
  8. hostnamectl set-hostname ip -172 -31 -31 -193
  9. hostnamectl set-hostname ip -172 -31 -22 -39
  10. hostnamectl set-hostname ip -172 -31 -31 -171
    4)增加控制swap的参数
  1. echo "vm.swappiness=0" & gt;& gt; /etc/sysctl.conf
  2. sysctl -p
    5)增加hosts配置(服务器的IP和名称情况实际情况调整),在每台服务器上面都执行
  1. echo "" & gt;& gt; /etc/hosts
  2. echo "172.31.16.71 ip-172-31-16-71 bigdata-1" & gt;& gt; /etc/hosts
  3. echo "172.31.20.195 ip-172-31-20-195 bigdata-2" & gt;& gt; /etc/hosts
  4. echo "172.31.31.94 ip-172-31-31-194 bigdata-3" & gt;& gt; /etc/hosts
  5. echo "172.31.19.103 ip-172-31-19-103 bigdata-4" & gt;& gt; /etc/hosts
  6. echo "172.31.28.125 ip-172-31-28-125 bigdata-5" & gt;& gt; /etc/hosts
  7. echo "172.31.24.50 ip-172-31-24-50 bigdata-6" & gt;& gt; /etc/hosts
  8. echo "172.31.24.63 ip-172-31-24-63 bigdata-7" & gt;& gt; /etc/hosts
  9. echo "172.31.31.193 ip-172-31-31-193 bigdata-8" & gt;& gt; /etc/hosts
  10. echo "172.31.22.39 ip-172-31-22-39 bigdata-9" & gt;& gt; /etc/hosts
  11. echo "172.31.31.171 ip-172-31-31-171 bigdata-10" & gt;& gt; /etc/hosts
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 下载Spark2.3二进制包并解压缩到指定目录下。 2. 配置Spark2.3环境变量,包括SPARK_HOME、PATH等。 3. 在Hive的配置文件hive-site.xml中添加以下配置: <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>spark.master</name> <value>yarn</value> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> </property> <property> <name>spark.executor.memory</name> <value>2g</value> </property> <property> <name>spark.executor.instances</name> <value>2</value> </property> <property> <name>spark.yarn.queue</name> <value>default</value> </property> 4. 在CDH管理界面中,选择“服务”->“Hive”->“配置”,在“Hive服务高级配置分类”中添加以下配置: hive.spark.client.server.connect.timeout=600 hive.spark.client.connect.timeout=600 hive.spark.client.rpc.max.size=52428800 hive.spark.client.rpc.threads=8 hive.spark.client.rpc.maxRetries=3 hive.spark.client.rpc.retryInterval=3000 5. 重启Hive服务,使配置生效。 以上就是在CDH5上离线安装Spark2.3并配置Hive on Spark2的步骤。 ### 回答2: CDH5是Cloudera的企业级Hadoop分布式平台,它包含了Hadoop、Hive、Spark、HBase等大数据生态系统的核心组件。本文将介绍如何在CDH5上离线安装Spark2.3并配置Hive on Spark2。 一、下载Spark2.3压缩包 首先,在离线环境中下载Spark2.3的二进制压缩包。可以前往Spark的官方网站(https://spark.apache.org/downloads.html)下载,或者在其他可联网的环境中下载后通过U盘等方式复制到离线环境中。 二、解压Spark2.3压缩包 把下载好的Spark2.3压缩包复制到离线环境中,并解压到指定目录下(例如:/opt/software)。 tar -xzvf spark-2.3.0-bin-hadoop2.7.tgz -C /opt/software 三、配置Spark2.3 1. 配置spark-env.sh 在Spark2.3的解压目录中,会有一个conf目录,里面包含了Spark的一些配置文件。我们需要修改其中的spark-env.sh文件,添加以下内容: export HADOOP_CONF_DIR=/etc/hadoop/conf export SPARK_LOCAL_IP=127.0.0.1 export SPARK_MASTER_HOST=127.0.0.1 export SPARK_MASTER_PORT=7077 其中,HADOOP_CONF_DIR指定的是Hadoop的配置文件所在目录,SPARK_LOCAL_IP是Spark本地IP地址,SPARK_MASTER_HOST指定的是Spark的master节点地址,SPARK_MASTER_PORT指定的是Spark的master节点端口号。 2. 配置spark-defaults.conf 修改spark-defaults.conf文件,添加以下内容: spark.executor.extraClassPath /opt/software/spark-2.3.0-bin-hadoop2.7/jars/* spark.driver.extraClassPath /opt/software/spark-2.3.0-bin-hadoop2.7/jars/* 其中,extraClassPath指定的是Spark j开头的jar包所在的目录。这些jar包包含了Spark运行所需的所有依赖。 四、配置Hive on Spark2 在用Spark2.3运行Hive之前,需要先配置Hive on Spark2。此配置步骤需要在Hive安装之前完成。 1. 创建hive-site.xml文件 在Hive的conf目录下,创建hive-site.xml文件,并添加以下内容: <property> <name>hive.execution.engine</name> <value>spark</value> <description>选择Hive on Spark2作为执行引擎</description> </property> <property> <name>spark.master</name> <value>spark://127.0.0.1:7077</value> <description>指定Spark的master地址</description> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> <description>指定Spark的deploy模式</description> </property> <property> <name>spark.executor.instances</name> <value>1</value> <description>指定每个任务的executor数量</description> </property> <property> <name>spark.driver.extraClassPath</name> <value>/opt/software/spark-2.3.0-bin-hadoop2.7/jars/*</value> <description>指定Spark的依赖jar包所在的目录</description> </property> 2. 修改hive-exec.jar 在Hive的lib目录下,找到hive-exec.jar包,将其解压,编辑hive-site.xml文件,添加如下内容: <property> <name>hive.execution.engine</name> <value>spark</value> <description>选择Hive on Spark2作为执行引擎</description> </property> <property> <name>hive.spark.client.server.connect.timeout</name> <value>600s</value> <description>指定连接Spark的超时时间</description> </property> 重新生成hive-exec.jar: jar -cf hive-exec.jar . 3. 启动SparkSpark的解压目录下,执行以下命令启动Spark: ./sbin/start-all.sh 启动成功后,可以通过以下命令查看Spark的Web UI: http://127.0.0.1:8080 四、启动Hive on Spark2 在完成了Spark和Hive的配置之后,就可以启动Hive on Spark2了。 1. 在Hive的bin目录下,执行以下命令启动Hive: ./hive 2. 运行Hive命令 可以执行以下Hive命令测试是否配置成功: hive> show databases; 如果一切正常,将看到当前数据仓库中的所有数据库名称。 以上就是在CDH5上离线安装Spark2.3并配置Hive on Spark2的步骤。 ### 回答3: CDH5是一套Hadoop发行版,其中包含了许多大数据组件。在CDH5上离线安装Spark2.3并配置Hive on Spark2需要进行以下步骤: 第一步,安装Java和Scala Java和Scala是Spark的预备条件。安装Java和Scala可以通过以下命令: $ sudo yum install java-1.8.0-openjdk $ sudo yum install scala 第二步,下载Spark 2.3 Spark最新的版本是2.3.0。从官方网站上下载Spark 2.3。下载后,将其解压到合适的目录中。例如,解压到/opt目录中: $ sudo tar xzf spark-2.3.0-bin-hadoop2.7.tgz -C /opt/ 第三步,配置Spark的环境变量 为了正确的运行Spark,需要设置环境变量。设置环境变量的方法如下: $ cd /opt $ sudo mv spark-2.3.0-bin-hadoop2.7 spark $ nano /etc/profile 将以下语句添加到文件末尾: export SPARK_HOME=/opt/spark export PATH=$PATH:$SPARK_HOME/bin 执行source命令,以便更改生效。 $ source /etc/profile 第四步,安装Hive on Spark2 要在Spark中使用Hive需要配置Hive on Spark2。安装Hive on Spark2可以执行以下命令: $ sudo yum install hive $ cd /opt/spark $ ./sbin/start-thriftserver.sh --master local --hiveconf hive.server2.thrift.port=10000 --hiveconf hive.server2.thrift.bind.host=localhost --hiveconf hive.server2.transport.mode=binary --hiveconf hive.server2.thrift.http.path=cliservice 第五步,使用Spark-shell 安装Spark和配置完Hive on Spark2,可以使用Spark-shell测试配置是否正确: $ /opt/spark/bin/spark-shell --master yarn --deploy-mode client 如果没有问题,便可以在Spark上使用Hive。 总结 通过以上步骤,在CDH5上离线安装Spark2.3并配置Hive on Spark2可以成功实现。这项工作的完成让您在现有的底层设施上建立一个强大的大数据处理和分析系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值