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;  (允许远程用户登录MysqL)
MysqL>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无法启动

CDH 5.9 CentOS 6.5 离线安装部署的更多相关文章

  1. ios – Xcode警告:“没有处理文件的规则”和“找不到目录”

    重命名我的项目文件夹后,我收到以下错误消息:什么可能出错?解决方法关于第一个警告,您可以在项目设置中的“构建阶段”中检查XCode,即头文件不会出现在“编译源”列表中.

  2. 你如何将xcode项目转换为cocoapod?

    我有一段代码,我发现我在多个不同的项目中重复使用,所以我想把它变成一个cocoapod并使用私人cocoapod仓库.我的问题是如何将xcode项目设置为cocoapod?它应该是一个静态库还是一个带有appdelegate的空“项目”?

  3. ios – 如何将文件添加到主包的/ Library / Sounds目录中?

    根据Apple’sdocumentation,/Library/Sounds中的声音文件将在尝试播放声音时由系统搜索.如何将声音文件添加到此文件夹?适用于iOS的正确文档应为here总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中.

  4. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  5. ios – 从icloud备份中限制sqlite-wal和sqlite-shm

    我是第一次使用coredata,我必须从文档目录中的iCloud备份限制sqlitedb文件,我使用下面的代码完成了它//阻止iCloud备份文档目录文件夹现在我不明白的是,我们还需要从icloud备份中限制sqlite-wal和sqlite-shm文件,如果是,那么如何从icloud备份限制sqlite-wal和sqlite-shm文件我想要一个解决方案,而无需从文档目录文件夹中更改sqlitedb位置…

  6. iOS:如何从文档目录中删除具有特定扩展名的所有现有文件?

    当我更新我的iOS应用程序时,我想删除Documents目录中的任何现有sqlite数据库.现在,在应用程序更新时,我将数据库从软件包复制到文档目录,并通过附加软件包版本来命名它.因此,在更新时,我还想删除可能存在的任何旧版本.我只是希望能够删除所有sqlite文件,而无需循环浏览并查找以前版本的文件.是否有任何方法可以对removeFileAtPath:方法进行通配符?解决方法那么,你想要删除所有*.sqlite文件?

  7. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  8. ios – 从文件目录加载UIImage

    我正在尝试从文件目录加载一个UIImage,并将其设置为UIImageView,如下所示:但是,每当我尝试以上,图像从不加载.该图像在Documents/MyAppCustomDirectory/school.png中.以上是否正确从该目录加载?我也尝试了其他几个:UIImageimageWithContentsOfFile,以及基于SO响应的其他方法.解决方法要获取您应该使用的文档目录:我不太清

  9. Xcode 6 / iOS 8模拟器数据和软件包文件夹脚本

    随着xcode6的最新更改,它看起来像.app文件和文档文件夹不再驻留在iPhone模拟器目录中的同一个文件夹中.以前,我们可以访问目录和.app文件但在Xcode6中,模拟器目录是完全不同的:和其中CryptNumber1,2和3都不同.有没有办法找到包含.app文件的文件夹后,我可以得到相应的文件夹?我有这个麻烦.为什么…?

  10. ios – 上传符号文件

    我该如何解决?

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部