1. 离线包工作
-
下载Cloudera Manager安装包,地址:https://archive.cloudera.com/cm6/6.2.1/repo-as-tarball/
cm6.2.1-ubuntu1604.tar.gz
-
下载CDH6.2.1安装包,地址:https://archive.cloudera.com/cdh6/6.2.1/parcels/
CDH-6.2.1-1.cdh6.2.1.p0.1425774-xenial.parcel 2019-12-04 13:35 1.87GB CDH-6.2.1-1.cdh6.2.1.p0.1425774-xenial.parcel.sha1 2019-12-04 13:38 40B CDH-6.2.1-1.cdh6.2.1.p0.1425774-xenial.parcel.sha256 2019-12-04 13:37 64B manifest.json
2. 环境准备
集群都是Ubuntu16.04版本的
2.2 配置/etc/hosts映射,其中一台的示例
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.2.42 cldev-701-02
192.168.2.44 cldev-701-04
192.168.2.45 cldev-701-05
192.168.2.46 cldev-701-06
192.168.2.47 cldev-701-07
192.168.2.48 cldev-701-08
192.168.2.49 cldev-701-09
192.168.2.50 cldev-701-10
192.168.2.51 cldev-701-11
192.168.2.52 cldev-701-12
192.168.2.53 cldev-701-13
192.168.2.54 cldev-701-14
192.168.2.65 cldev-701-25
192.168.2.66 cldev-701-26
192.168.2.67 cldev-701-27
192.168.2.68 cldev-701-28
192.168.2.69 cldev-701-29
192.168.2.70 cldev-701-30
192.168.2.71 cldev-701-31
192.168.2.72 cldev-701-32
192.168.2.73 cldev-701-33
192.168.2.74 cldev-701-34
2.3 关闭防火墙
ufw status
ufw disable
2.4 配置ssh无密码登录
2.5 配置NTP服务,我使用的是公网的ip
/etc/ntp.conf
properties
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/
# Specify one or more NTP servers.
# more information.
#pool 2.ubuntu.pool.ntp.org iburst
#pool 3.ubuntu.pool.ntp.org iburst
# Use Ubuntu's ntp server as a fallback.
#pool ntp.ubuntu.com
# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
# might also be helpful.
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1
# Needed for adding pool entries
restrict source notrap nomodify noquery
# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.123.0 mask 255.255.255.0 notrust
# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255
# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines. Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient
#Changes recquired to use pps synchonisation as explained in documentation:
#http://www.ntp.org/ntpfaq/NTP-s-config-adv.htm#AEN3918
#server 127.127.8.1 mode 135 prefer # Meinberg GPS167 with PPS
#fudge 127.127.8.1 time1 0.0042 # relative to PPS for my hardware
#server 127.127.22.1 # ATOM(PPS)
#fudge 127.127.22.1 flag3 1 # enable PPS API
server cn.pool.ntp.org
2.6 jdk环境
properties
配置环境变量无效,java必须安装在/usr/java目录下
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/
export PATH=$JAVA_HOME/bin:$PATH
2.7 创建/usr/share/java目录,将mysql-jdbc包放过去(所有节点)
shell
mkdir -p /usr/share/java
mv /opt/mysql-j/mysql-connector-java-5.1.34.jar /usr/share/java/
cd /usr/share/java
mv mysql-connector-java-5.1.34.jar mysql-connector-java.jar
2.8 安装MySQL,并创建库
sql
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
--hive库
create database hive DEFAULT CHARSET utf8 collate utf8_general_ci;
--report manager库
create database rman 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;
grant all on hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
grant all on rman.* TO 'hive'@'%' IDENTIFIED BY 'hive';
grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
grant all on hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';
3. 安装
3.1 制作离线源
shell
#以下不管用 应直接修改 /etc/apt/sources.list
添加
deb [arch=amd64] http://192.168.2.65:8000/cm6/cm6.2.1/ xenial-cm6.2.1 contrib
sudo mkdir -p /var/www/html/cloudera-repos/cm6
# 解压下载的cm包
sudo tar -zxvf cm6.2.1-ubuntu1604.tar.gz -C /var/www/html/cloudera-repos/cm6
cd /var/www/html/cloudera-repos/cm6/cm6.2.1
sudo mv cloudera-manager.list /etc/apt/sources.list.d/
cd /etc/apt/sources.list.d/
# 修改源地址,将cloudera-manager.list里的内容改为如下
vi cloudera-manager.list
# Cloudera Manager 6.2.1
deb [arch=amd64] http://192.168.2.65:8000/cm6/cm6.2.1/ xenial-cm6.2.1 contrib
3.2 启动http服务
shell
# 因为上面的地址根是/cm6/cm6.2.1,所以进到上一级目录,开始python3自带的http服务
cd /var/www/html/cloudera-repos
python3 -m http.server
3.3 安装Cloudera Manager
shell
sudo apt-get install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server --allow-unauthenticated
安装完CM后/opt/ 下会出现cloudera目录,cloudera目录下有cm,cm-agent,parcel-repo,将下载的CDH包放到parcel-repo下
执行命令
shell
sudo mv CDH-6.2.1-1.cdh6.2.1.p0.1425774-xenial.parcel.sha1 CDH-6.2.1-1.cdh6.2.1.p0.1425774-xenial.parcel.sha
3.4 执行cm数据库初始化
shell
#先创建scm,用户授权
CREATE USER 'scm'@'%' IDENTIFIED BY 'scm';
grant all privileges on *.* to scm@'%' identified by 'scm';
flush privileges;
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
注:这里使用mysql 5.7版本出现ssl连接问题,解决办法是修改mysqld.cnf文件或者my.cnf文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]下添加skip_ssl 然后重启mysql
3.5 开启server服务,进入web界面
shell
sudo service cloudera-scm-server start
打开http://192.168.2.65:7180,这里有可能需要等待一会儿才会出现界面,刚开始直接出现服务无响应,我以为出了什么问题,不得不吐槽下cloudera做的太差了,像ambari流程的流畅性就好多了
4、集群安装
一直到Specify Hosts,输入各个节点主机名,进行搜索,选中,然后继续
11.1、选择存储库
上传parcel文件到/opt/cloudera/parcel-repo文件夹
选项,这一步很迷,有时候你放在存储库的parcel版本刷不出来。
下一步,不安装jdk
提供ssh,如果是root直接用root,如果不是,需要有无密码执行sudo权限的用户。
下一步开始安装cloudera-manager-agent
4. 安装CDH
一路走到Welcome(Add Cluster-Installation)
-
配置自己所要安装集群的机器hostname,每一行是一个主机,选择Parcel(默认就可以),JDK不选择安装Oracle Java SE开发工具,使用我们自己的JDK
-
Enter Login Credentials:这里因为我是用的普通用户,授予sudo权限,所以选择其他用户,选择所有主机接收相同私钥,我将cloudera-scm-master所在机器的id_rsa进行copy出来,上传
-
Install Agents:自动安装Agents,这里我碰到两个问题
- 第一个是我配置的cloudera-manager.list里面的路径被改掉了,本来我配置的是有层级目录的,但是变成了,http://:,暂时不知道什么原因,导致allkeys.asc这个文件找不到,所以我修改了python3 http server的启动目录,进到allkeys.asc所在的目录,启动python3 -m http.server,安装成功。
- 第二个是因为ERROR Failed to connect to previous supervisor,这个查看日志发现是端口冲突了,但是cloudera竟然没有写冲突的端口是什么...,真坑,后来发现是我安装的机器原来有一个集群,没有卸载干净,supervisor进程还残留着,杀掉集群节点上的这个进程就好了
-
Install Parcels:这里最开始是会变红的,然后再边绿,这里同样要吐槽下,什么鬼?为什么一开始是红的?导致一开始以为出错了,这个过程中遇到的错比较多,而且很坑,再次吐槽下cloudera manager做的真的不好。第一个是不知道为什么,这里卡了很久,查看日志发现HTTP Error 404: Not Found,这里本来/opt/cloudera/parcel-repo下会有个.torrent文件的,但是没有发现,不知道为什么...,我尝试了很多办法,包括在 cloudera-scm-server 主节点下手动把需的 parcel 包放到 /opt/cloudera/parcel-repo/ 下面,注意修改属组为 cloudera-scm,后台甚至重启了cloudera-scm-server,这导致了很大的文件,之前做的都操作步骤都没有了,需要从第一步走下来,但是第一步输入名称报集群名已存在,然后我重新初始化了cloudera-scm-server的数据库,不报集群名已存在了,但是有些节点说已经被使用了,然后进到cloudera-manager的主页,http://:7180/cmf/home,在主机地方,删除所有添加的节点重新来,这样竟然可以传输parcel了,很奇怪。但是报了一个新的异常:主机运行状况不良,解决办法在下面,这里删除了后,需要等待一段时间才会好,cloudera manager的心跳感觉很慢,改了错误之后,需要一段时间才能反映过来,这个过程中还有过Connection refused的错误,好像是其中的某一个节点连接不到master节点了,但是一段时间后又好了,就很坑
-
过了上一步之后就好了,会进行检测是否主机都满足安装条件了,这里我遇到了一些版本不适用的检测问题,没有管它,直接往下走了
-
组件安装,我选择的自定义服务,这里又有一个比较坑的地方,所有的cloudera manager的组件(Alert Publisher,Event Server,Host Monitor,Reports Manager,Service Monitor)安装节点必须选择cloudera-scm-server所在的节点,因为需要引用/opt/cloudera/cm下的lib包,我第一次弄错了,直接导致后面的很多初始化过不去,然后返回到上一步更改了这部分,但是初始化的时候还是用的老的配置,就很坑,然后是我进到cloudera manager主页,也就是http://:7180/cmf/home,把老的配置的机器上的cloudera manager的组件删掉,然后重启。数据库设置那里要注意数据库主机的名称,数据库名称和密码分别是之前配置的那些
问题解决
-
Install Parcels报:主机运行状况不良,查看日志发现是agent和server的id对不上,CM的集群是Server-Agent模式的,那么必须有一个唯一的id来标识Server和Agent属于同一个集群,在Agent端就是使用cm_guid文件来记录id的,因为之前频繁的重新安装导致的,解决办法:删除有问题节点下的
lib/cloudera-scm-agent/
下的cm_guid
文件,然后重启shellcd /var/lib/cloudera-scm-agent/ sudo rm -rf cm_guid sudo service cloudera-scm-agent restart
-
cdh安装提示 当前受管,导致无法选择主机
之前安装中断过,导致后面的安装中所有的主机处于 当前受管 状态,无法选择,进入之前创建的集群中(即namenode:7180/cmf/home),删除主机即可。
-
启动Spark失败,报日志目录不存在
javaCaused by: java.io.FileNotFoundException: Log directory specified does not exist: hdfs://<ip>:<port>/user/spark/spark2ApplicationHistory at org.apache.spark.deploy.history.FsHistoryProvider.org$apache$spark$deploy$history$FsHistoryProvider$$startPolling(FsHistoryProvider.scala:207) at org.apache.spark.deploy.history.FsHistoryProvider.initialize(FsHistoryProvider.scala:153) at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:149) at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:77) ... 6 more Caused by: java.io.FileNotFoundException: File file:/user/spark/spark2ApplicationHistory does not exist at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:598) at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:811) at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:588) at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:425) at org.apache.spark.deploy.history.FsHistoryProvider.org$apache$spark$deploy$history$FsHistoryProvider$$startPolling(FsHistoryProvider.scala:197) ... 9 more
解决办法
shell$ sudo -u hdfs hadoop fs -mkdir /user/spark $ sudo -u hdfs hadoop fs -mkdir /user/spark/applicationHistory $ sudo -u hdfs hadoop fs -chown -R spark:spark /user/spark $ sudo -u hdfs hadoop fs -chmod 1777 /user/spark/applicationHistory
https://docs.cloudera.com/documentation/enterprise/5/latest/topics/admin_spark_history_server.html
-
Yarn组件-》操作-》安装YARN MapReduce框架JAR,报异常说找不到class
这是因为这个包在/opt/cloudera/cm的lib下,我的YARN没有安装在cm的Master节点,所以错误了,首先在出错的节点上创建目录/opt/cloudera/cm,然后将master节点上的lib包移过来就好了
-
HDFS启动报错Canary test failed to find parent directory /tmp/.cloudera_health_monitoring_canary_files
找不到/tmp目录,原因是我没有初始化好集群,所以切换到hdfs用户手动创建了/tmp目录,然后就好了