CDH 5.9 CentOS 6.5 离线安装部署

CDH 5.9 离线安装部署手册
站在巨人的肩膀上面继续前进,不断的踩坑与填坑,感谢破击手的参考指南。

安装包下载

考虑到公司机器不能直接上外网,采用离线安装方式,需要先下载好安装包如下。
Cloudera Manager 5.9http://archive-primary.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.9.0_x86_64.tar.gz
CDH5.9 主文件http://archive-primary.cloudera.com/cdh5/parcels/5.9.0.23/CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel
CDH5.9 sha文件http://archive-primary.cloudera.com/cdh5/parcels/5.9.0.23/CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha1
manifest 文件http://archive-primary.cloudera.com/cdh5/parcels/5.9.0.23/manifest.json
下载后将这些包上传到master机器的/opt/cdn目录下

机器规划

规划搞5台,一台master,四台node节点,搞了一台牛叉的物理机,再虚拟五台出来。

172.16.18.150  master
172.16.18.150  node01
172.16.18.150  node02
172.16.18.150  node03
172.16.18.150  node04

虚拟安装操作系统为Red Hat 6.564位,Centos也是一样。

主机名配置

修改/etc/hosts文件,五台机均添加如下内容

172.16.18.150   master
172.16.18.151   node01
172.16.18.152   node02
172.16.18.153   node03
172.16.18.154   node04

修改/etc/sysconfig/network文件,在此只列举master机器的配置如下

NETWORKING=yes
HOSTNAME=master

reboot重启生效

免密码登陆配置

SSH免密码登陆,因为HADOOP环境中需要机器传输文件啥的。
在五台机器上均执行命令ssh-keygen -t rsa,遇到提示一路回车,生成公钥文件
在master上面执行命令cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在master上面将授权文件分别拷贝到其它四个节点scp ~/.ssh/authorized_keys root@node01:~/.ssh/
此时的你可以在master上任意scp一个文件到其它节点机器,发现不用输入密码了,恭喜成功了。

关闭防火墙

防火墙可能引起Hadoop相关组件之间的通讯,所以关闭它,五台机器均执行以下操作。

service iptables stop (临时关闭)
chkconfig iptables off (重启后生效)

关闭SELINUXsetenforce 0临时生效,另外修改修改/etc/selinux/config 下的SELINUX=disabled,重启机器

NTP配置

NTP时间同步,集群机器之间必须时间同步,不一定分秒不差,但要保持在一个合理的范围之内,不然服务运行会报错。时间同步有两种方式,一种是五台均同步单独的时钟服务器,一种是使用master本身作为时钟服务器,其它节点同步它,接下来采用第二种方式。

修改配置文件

打开master机器/etc/ntp.conf文件,其它地方可以注释,留下如下关键信息,保存退出

driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
restrict default nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 8
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

启动服务

执行如下命令启动NTP服务,如果服务之前己启动,则重启服务。ntp与自身进行同步需要一小段时间,大约需要5分钟。

service ntpd start chkconfig ntpd on

使用命令ntpstat检查服务启动后自身是否同步完成,如出现以下信息则完成。

synchronised to local net at stratum 9 
time correct to within 12 ms
polling server every 64 s

客户端同步

好了,服务己启动,就差其它节点机器同步了,使用命令ntpdate 172.16.18.150查看结果,如出现以下信息则同步完成。
24 Feb 13:37:35 ntpdate[13675]: adjust time server 172.16.18.150 offset 0.068598 sec

实用shell

实用shell这一小节主要是讲的后续安装过程可能是考虑到各个机器间需要拷贝文件啥的,用脚本的方式批处理,这是破击手文中提到的非常棒的想法,我就照搬不误的啦,在屏幕面前静静滴看着刷刷的快感。
在master机器root目录下,产生一个nodes文件文件内容如下,主要将各节点的主机名维护起来

node01
node02
node03
node04

在master机器root目录下,产生一个scp.sh文件文件内容如下,输入需要传送的源文件路径与目标机器的存放路径两个参数,路径都是绝对路径

#!/bin/bash
cat nodes | while read host
do
{
    scp -r $1 $host:$2
}&wait
done

JAVA环境安装

JDK环境的安装大家伙都是比较熟悉的啦,一般新安装的系统都会自带OpenJDK版本,使用rpm-qa|grep java,如果有则使用命令yum -y remove xxxx进行删除,我这里采用的版本是1.8.0_112,将下载好的JDK包解压放至/opt/java目录下
调置环境变量,编辑文件/etc/profile添加如下内容

export JAVA_HOME=/opt/java
export PATH=$JAVA_HOME/bin:$PATH

拷贝JAVA文件与profile文件至其它节点,注意一点,其它节点不需要己经存在java目录,此脚本会自动创建其目录

./scp.sh /opt/java/ /opt/java/
./scp.sh /etc/profile /etc

设置全局变量并生效,在五台机器上均执行如下命令

source /etc/profile
echo "JAVA_HOME=/opt/java" >> /etc/environment

检查JAVA是否安装成功,执行命令java -version出现如下结果

java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15,mixed mode)

MysqL安装

安装MysqL

MysqL安装是供CM使用,只需要在master机器上安装。我采用的是5.6.24版本,需要下载如下安装包,然后依次采用命令rpm -ivh xxxxx进行安装,如果中间出现冲突,就先删除再装

MysqL-libs-5.1.66-2.el6_3.x86_64.rpm
MysqL-shared-5.6.24-1.el6.x86_64.rpm
MysqL-devel-5.6.24-1.el6.x86_64.rpm
MysqL-server-5.6.24-1.el6.x86_64.rpm
MysqL-client-5.6.24-1.el6.x86_64.rpm

启动MysqL服务

chkconfig MysqL on
service MysqL start

修改初始密码

MysqL启动后,认其实己经生成认密码,密码保存在/root/.MysqL_secret文件中,但是这个密码怪怪的,一般为了以后方便起见,都需要改一下,这里我改成123456,执行如下命令。

# service MysqL stop
# MysqLd_safe --user=MysqL --skip-grant-tables --skip-networking&
# MysqL -u root MysqL
MysqL> use MysqL; 
MysqL> UPDATE user SET Password=PASSWORD('123456')where USER='root';
MysqL> FLUSH PRIVILEGES;
MysqL> quit
# service MysqL restart
# MysqL -u root –p
Enter password: 123456
MysqL>SET PASSWORD=PASSWORD('123456'); (重置密码)
MysqL> use MysqL; (此DB存放MysqL的各种配置信息)
Database changed
MysqL> select host,user from user; (查看是否能够查询)

设置远程登陆

执行如下命令

MysqL> Grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;  (允许远程用户登录MysqLMysqL>flush privileges;

到此恭喜你MysqL的环境己基本配置完成

创建CM用的数据库

执行如下命令,这些库是接下来集群安装时所需要的,用意暂且不表。

--hive数据库
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
--oozie数据库
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
--hue数据库
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Cloudera推荐设置

在试安装的过程,发现Cloudera给出了一些警告,如下图

设置swap空间

echo "vm.swappiness = 10" >> /etc/sysctl.conf
./scp.sh /etc/sysctl.conf /etc/

关闭页面压缩

试过只设置defrag,但貌似个别节点还是会有警告,干脆全部设置,编辑/etc/rc.local,末尾添加如下命令

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

同步到各个节点机器./scp.sh /etc/rc.local /etc/,然后重启reboot生效。

安装CM

  1. 进入/opt/cdh目录,将CM解压到/opt目录下,不能解压到其他地方,因为cdh5的源会认在/opt/cloudera/parcel-repo寻找,而CM可以按照个人喜好安装
tar -zxvf cloudera-manager-el6-cm5.9.0_x86_64.tar.gz -C /opt/
mkdir -p /opt/program
mv /opt/cm-5.9.0/ /opt/program/
ln -s /opt/program/cm-5.9.0/ /opt/cm
  1. 将CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel 和 CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha1移动到/opt/cloudera/parcel-repo,这样安装时CM就能直接找到了
mv CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha1 /opt/cloudera/parcel-repo/
  1. 将CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha1重命名为CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha(去掉结尾的1),非常重要。我试安装时,这点遗漏了,导致安装CDH的时候一直刷不出5.9版本,通过日志发现,没有manifest.json就会去下载,不能访问外网就报错了,但不影响安装CDH,还是mv一下吧。
mv manifest.json /opt/cloudera/parcel-repo/
cd /opt/cloudera/parcel-repo/
mv CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha1 CDH-5.9.0-1.cdh5.9.0.p0.23-el6.parcel.sha
  1. 修改配置文件中的server_host,编辑/opt/cm/etc/cloudera-scm-agent/config.ini
server_host=master
  1. MysqL的JDBC驱动放入CM的lib目录下,下载地址http://dev.mysql.com/downloads/connector/j/,gz和zip都无所谓,最终要的是里面的jar包。解压获得mysql-connector-java-5.1.40-bin.jar上传到集群。
mv MysqL-connector-java-5.1.40-bin.jar /opt/cm/share/cmf/lib/
  1. 为CM创建数据库
/opt/cm/share/cmf/schema/scm_prepare_database.sh MysqL cm -hlocalhost -uroot -p123456 --scm-host localhost scm scm scm
  1. 为每个节点创建cloudera-scm用户,五台机均执行
useradd --system --home=/opt/cm/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

接下来其实可以直接在master上启动服务安装了,但因为其它节点没有CM,最后还是通过远程的yum在线下载再安装,我这设置了内部网络,其它节点是访问不了外网的,所以拷贝CM到其它节点进行完全离线安装。
8. 拷贝CM到每个节点

./scp.sh /opt/program/cm-5.9.0/ /opt/program/cm-5.9.0/
ln -s /opt/program/cm-5.9.0/ /opt/cm     (每台机手动执行)

此时就静静的看着屏幕不停的拷贝吧!!!!!
9. 在master上启动CM的service服务

/opt/cm/etc/init.d/cloudera-scm-server start
  1. 在所有节点上面节点上启动CM的agent服务
/opt/cm/etc/init.d/cloudera-scm-agent start

service服务过程需要启动几分钟,这看机器性能,如果用netstat -apn|grep 7180能够查看到端口占用,就可以用浏览器打开http://masterIP:7180/进行访问,登录用户名与密码分别为admin
到此基本上CM的安装启动己完成,接下来就可以用过WEB界面进行安装CDH了,哗啦哗啦,前面安装的步骤到不是很复杂,但安装的东西倒不少。

安装CDH

  1. 登陆

  2. 勾选然后继续

  3. 按需选择,我选择免费
  4. 继续
  5. 因为我们在节点上启动了agent,所以直接点“当前管理的主机”,此时当前管理主机有5个。如果节点上没有CM,只有master上有,这边可以在新主机下去搜索,例如192.168.2.[100-104],但这样最后从节点会去yum在线安装。
  6. 全部勾上,然后继续
  7. 选择版本,然后继续
  8. 开始安装了,等着吧
  9. 好了之后继续
  10. 全部是勾,完美!炒鸡兴奋呀
  11. 集群设置,按需选择
  12. 角色分配,按需分配,我这里选择认,妈呀第一次不敢乱动
  13. 创建MysqL数据库并测试(按需创建,比如你没选oozie,就不用创建oozie的数据库,如下,其实我们己经在前面安装MysqL的时候己经建库了

    眼看着就要成功了,期待的出现上面的结果,但在我的安装过程中三个数据都连不上标红,请允许我这个地方忘记截图了,一下子萌了,不过不会被这点困难所吓倒的,首先想到的就是看日志,server的日志目录放在/opt/cm/log/cloudera-scm-server。主要有两个问题。
    问题一,贴点日志吧
+ exec /opt/java/bin/java -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:///dev/urandom -cp '/opt/program/cm-5.9.0/run/cloudera-scm-agent/process/11-HIVE-test-db-connection:/usr/share/java/mysql-connector-java.jar:/opt/program/cm-5.9.0/share/cmf/lib/postgresql-9.0-801.jdbc4.jar:/usr/share/java/oracle-connector-java.jar:/opt/program/cm-5.9.0/share/cmf/lib/*' com.cloudera.enterprise.dbutil.DbCommandExecutor db.properties
2017-02-22 16:48:25,662 INFO CommandPusher:com.cloudera.cmf.model.DbCommand: Command 30(HiveTestDatabaseConnection) has completed. finalstate:FINISHED,success:false,msg:Unable to connect to database on host 'master' from host 'master' using the credential provided.
2017-02-22 16:48:25,675 INFO CommandPusher:com.cloudera.cmf.service.AbstractOneOffHostCommand: Unsuccessful 'OozieTestDatabaseConnection'
2017-02-22 16:48:25,680 INFO CommandPusher:com.cloudera.cmf.service.AbstractDbConnectionTestCommand: Command exited with code: 4
2017-02-22 16:48:25,680 INFO CommandPusher:com.cloudera.cmf.service.AbstractDbConnectionTestCommand: + local JAVA8_HOME_CANDIDATES

其实从这个日志中也看不出来具体哪个地方错误,只知道是数据连不上,但是用show processlist查看时又己经有很多连上了,排除是缺少jar包之类的原因,很有可能是配置问题,灵机一动,想到把配置界面上的主机名由master改为127.0.0.1,OK,立马好了。
问题二,贴点日志

Traceback (most recent call last):
  File "/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hue/build/env/bin/hue",line 12,in <module>
    load_entry_point('desktop==3.9.0','console_scripts','hue')()
  File "/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hue/desktop/core/src/desktop/manage_entry.py",line 65,in entry
    raise e
django.core.exceptions.ImproperlyConfigured: Error loading MysqLdb module: libMysqLclient_r.so.16: cannot open shared object file: No such file or directory

日志提示找不到libMysqLclient_r.so.16这个库包,要本原因是我刚开始安装MysqL时没有装MysqL-libs-5.1.66-2.el6_3.x86_64.rpm,不过要注意对应的32还是64位哦。问题解决参考

环境测试

WEB界面集群环境配置好后,看到完成的界面很兴奋,来测试一下是否真正的能够跑个spark任务呢,可以运行spark中自带例子的jar包,简直就是贴心到位呀。
在master主机上运行以下命令,不过得先将原安装的root用户变成hdfs用户su hdfs,这个用户在安装的过程中己经添加好了的。

spark-submit \
    --master yarn-client \     --class org.apache.spark.examples.SparkPi \     --driver-memory 512m \     --executor-memory 512m \     --executor-cores 2 \  /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.9.0-hadoop2.6.0-cdh5.9.0.jar 

囧,报错了,看到希望似乎要绝望么:

17/02/23 11:18:07 INFO spark.SparkEnv: Registering OutputCommitCoordinator
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/spi/container/servlet/ServletContainer
    at org.apache.spark.status.api.v1.ApiRootResource$.getServletHandler(ApiRootResource.scala:187)
    at org.apache.spark.ui.SparkUI.initialize(SparkUI.scala:74)
    at org.apache.spark.ui.SparkUI.<init>(SparkUI.scala:80)
    at org.apache.spark.ui.SparkUI$.create(SparkUI.scala:208)
    at org.apache.spark.ui.SparkUI$.createLiveUI(SparkUI.scala:150)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:485)
    at org.apache.spark.examples.SparkPi$.main(SparkPi.scala:29)
    at org.apache.spark.examples.SparkPi.main(SparkPi.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
    at java.net.urlclassloader.findClass(urlclassloader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 17 more
17/02/23 11:18:07 INFO storage.diskBlockManager: Shutdown hook called

原因:
网上一找,有人说缺少jersey-server包,有人说缺少jersey-bundle包,不管了,试了再说,下载了jersey-server包,打开一看里面目录结构都是不对的,pass掉转战另一个,果不其然缺少jersey-bundle-1.19.jar包所致。
再一把,执行以下命令:

spark-submit  \
--master yarn-client \ --class org.apache.spark.examples.SparkPi \ --driver-class-path /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/examples/lib/jersey-bundle-1.19.jar --driver-memory 512m \ --executor-memory 512m \ --executor-cores 2 \ /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.9.0-hadoop2.6.0-cdh5.9.0.jar

静静的等待吧,哇,又发现一个坑,不说了贴错误代码如下

URI_BASES -> http://master:8088/proxy/application_1487876966425_0004),/proxy/application_1487876966425_0004
17/02/23 16:30:15 INFO ui.JettyUtils: Adding filter: org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter
17/02/23 16:30:15 WARN servlet.Holder: 
java.lang.classNotFoundException: org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter
    at java.net.urlclassloader.findClass(urlclassloader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.spark-project.jetty.util.Loader.loadClass(Loader.java:100)
    at org.spark-project.jetty.util.Loader.loadClass(Loader.java:79)
    at org.spark-project.jetty.servlet.Holder.doStart(Holder.java:107)
    at org.spark-project.jetty.servlet.FilterHolder.doStart(FilterHolder.java:90)
    at org.spark-project.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.spark-project.jetty.servlet.ServletHandler.initialize(ServletHandler.java:768)
    at org.spark-project.jetty.servlet.ServletHandler.updateMappings(ServletHandler.java:1357)
    at org.spark-project.jetty.servlet.ServletHandler.setFilterMappings(ServletHandler.java:1393)
    at org.spark-project.jetty.servlet.ServletHandler.addFilterMapping(ServletHandler.java:1113)
    at org.spark-project.jetty.servlet.ServletHandler.addFilterWithMapping(ServletHandler.java:979)
    at org.spark-project.jetty.servlet.ServletContextHandler.addFilter(ServletContextHandler.java:332)
    at org.apache.spark.ui.JettyUtils$$anonfun$addFilters$1$$anonfun$apply$6.apply(JettyUtils.scala:215)
    at org.apache.spark.ui.JettyUtils$$anonfun$addFilters$1$$anonfun$apply$6.apply(JettyUtils.scala:215)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    at org.apache.spark.ui.JettyUtils$$anonfun$addFilters$1.apply(JettyUtils.scala:215)
	at org.apache.spark.ui.JettyUtils$$anonfun$addFilters$1.apply(JettyUtils.scala:193)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
    at org.apache.spark.ui.JettyUtils$.addFilters(JettyUtils.scala:193)
    at org.apache.spark.scheduler.cluster.YarnSchedulerBackend$$anonfun$org$apache$spark$scheduler$cluster$YarnSchedulerBackend$$addWebUIFilter$3.apply(YarnSchedulerBackend.scala:98)

一看又是ClassNotFoundException错误,一般都是没有相对应的jar包,或者有jar包没有放到加载的路径上去,上百度一搜这个类位于hadoop-yarn-server-web-proxy这个JAR中,首先到机器中find查找,确实没有,就要去下载。下载很方便,现在一般都是Maven项目构建,网上有一个超级大的Maven仓库http://mvnrepository.com/,直接根据名字进行搜索下载,实在是太方便,唯一有点遗憾是电脑不能直接上网,哈哈。
最后一把,执行命令如下:

spark-submit  \
--master yarn-client \ --class org.apache.spark.examples.SparkPi \ --driver-class-path /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/examples/lib/jersey-bundle-1.19.jar:/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/examples/lib/hadoop-yarn-server-web-proxy-2.4.0.2.1.4.0-632.jar \ --driver-memory 512m \ --executor-memory 512m \ --executor-cores 2 \ /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.9.0-hadoop2.6.0-cdh5.9.0.jar

可以将这两个依赖包放到任意一个路径,这样命令不会那么长,难看,看屏幕输出计算PI的结果如下3.13858,与想象中的3.1415926不一样呀,哈哈,以后再解释。

17/02/23 16:32:46 INFO cluster.YarnScheduler: Removed TaskSet 0.0,whose tasks have all completed,from pool 
17/02/23 16:32:46 INFO scheduler.DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:36) finished in 8.070 s
17/02/23 16:32:46 INFO scheduler.DAGScheduler: Job 0 finished: reduce at SparkPi.scala:36,took 8.560082 s
Pi is roughly 3.13858
17/02/23 16:32:46 INFO ui.SparkUI: Stopped Spark web UI at http://172.16.18.150:4040
17/02/23 16:32:47 INFO cluster.YarnClientSchedulerBackend: Shutting down all executors
17/02/23 16:32:47 INFO cluster.YarnClientSchedulerBackend: Interrupting monitor thread
17/02/23 16:32:47 INFO cluster.YarnClientSchedulerBackend: Asking each executor to shut down

其它问题

利用spark-shell启动时出现如下,不过首先得切换到hdfs用户,这个用户在安装过程己创建好。

java.lang.NoClassDefFoundError: com/sun/jersey/spi/container/servlet/ServletContainer
    at org.apache.spark.status.api.v1.ApiRootResource$.getServletHandler(ApiRootResource.scala:187)
    at org.apache.spark.ui.SparkUI.initialize(SparkUI.scala:74)
    at org.apache.spark.ui.SparkUI.<init>(SparkUI.scala:80)
    at org.apache.spark.ui.SparkUI$.create(SparkUI.scala:208)
    at org.apache.spark.ui.SparkUI$.createLiveUI(SparkUI.scala:150)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:485)
    at org.apache.spark.repl.SparkILoop.createSparkContext(SparkILoop.scala:1022)

原因是由于jersey-bundle-1.19.jar没有加入到加载路径中去,编辑/opt/cloudera/parcels/CDH/lib/spark/conf/classpath.txt添加jar包的绝对路么径,在master机器即可。

内存配置参数不够如下

ERROR spark.SparkContext: Error initializing SparkContext.
java.lang.IllegalArgumentException: required executor memory (1024+384 MB) is above the max threshold (1024 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
    at org.apache.spark.deploy.yarn.Client.verifyClusterResources(Client.scala:284)
    at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:140)

这个问题折腾我好久,一直定位为yarn配置文件的配置问题,但不知道哪个具体的yarn-site.xml改了生效,尝试了很多次/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/spark/conf/yarn-conf/yarn-site.xml这个配置文件未果,后来在WEB配置界面的YARN配置选项中,通过查找yarn.scheduler.maximum-allocation-mb项发生真有耶,把报错的两项均修改为2G,保存配置,重启过期配置,再次执行spark-shell命令成功。原来人家早就考虑到基本的配置操作在WEB上面,自己干嘛还去机器中改呀,呵呵,还提供了你更改配置与原有配置的对比,类似SVN提交记录一样。

参考教程

破击手http://www.cnblogs.com/pojishou/archive/2017/01/12/6267616.html
Cloudera Manager 5 和 CDH5 本地(离线)安装指南http://www.aboutyun.com/thread-9086-1-1.html
http://blog.csdn.net/wumiqing1/article/details/53671045 MysqLclient问题
https://community.cloudera.com/t5/Cloudera-Manager-Installation/Deploy-Client-Configuration-failed-at-upgrade-to-CDH5-4-1-using/m-p/27763 解决deploy client configuration 失败问题
http://www.aboutyun.com/thread-12431-1-1.html yarn无法启动

相关文章

Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native