一、环境准备

我搭建的时候,没有文档,都是网上搜的资料,而且资料都不全,我装了3天,过程非常痛苦,任何一个环节搞错都可能前功尽弃,我反复的搭建了5遍,最终成功。如果你看到了这篇文章,中途出现了什么问题,请不要放弃,逐一排查并解决问题,最终都是会搭建成功了。 (这个搭建过程,是我搭建之后整理出来的,如果有什么问题,请及时指出。)

1.下载文件

我安装的是5.12.0版本,注意下载时的版本与linux版本相对应,下载离线包连接:
cloudera-manager.tar.gz(版本自选):http://archive.cloudera.com/cm5/cm/5/
parcel文件(版本自选):http://archive.cloudera.com/cdh5/parcels/5.12.0/
sha1文件(版本字段,下载后改名sha后缀):http://archive.cloudera.com/cdh5/parcels/5.12.0/
json文件(版本自选):http://archive.cloudera.com/cdh5/parcels/5.12.0/
一共需要下载4个文件,具体上传到哪里,后面会说到,如下:
cloudera-manager-el6-cm5.12.0_x86_64.tar.gz
CDH-5.12.0-1.cdh5.12.0.p0.29-el6.parcel(el6代表centos6)
CDH-5.12.0-1.cdh5.12.0.p0.29-el6.parcel.sha(一定要改文件名)
manifest.json(注意此文件里的CDH-5.12.0-1.cdh5.12.0.p0.29-el6.parcel,与parcel文件名称相对应,要检查一下,我这里没有对应,我手动改的。)

2.集群目录

操作系统 hostname
ip 角色
CentOS6(64位) master 11.10.119.23 cloudera-manager/agent
CentOS6(64位) datanode1 11.10.119.22 cloudera-agent
CentOS6(64位) datanode2 11.10.119.24 cloudera-agent

二、linux环境配置

1.配置hostname主机名(所有节点执行)

  1. 永久修改主机名:
  2. vim /etc/sysconfig/network
  3. 修改内容如下:
  4. (主节点)
  5. NETWORKING=yes
  6. HOSTNAME=master
  7. (从节点1)
  8. NETWORKING=yes
  9. HOSTNAME=datanode1
  10. (从节点2)
  11. NETWORKING=yes
  12. HOSTNAME=datanode2

2.配置hosts文件映射(所有节点执行)

  1. 所有节点相同操作:
  2. vim /etc/hosts
  3. 修改内容如下:
  4. 127.0.0.1 localhost
  5. 11.10.119.22 datanode1
  6. 11.10.119.23 master
  7. 11.10.119.24 datanode2

3.禁用selinux(所有节点执行)

  1. 所有节点相同操作:
  2. vim /etc/selinux/config
  3. 修改内容如下:
  4. SELINUX=disabled
  5. SELINUXTYPE=targeted

4.关闭防火墙(所有节点执行)

  1. 所有节点相同操作:
  2. service iptables stop
  3. 注意此操作只是临时关闭防火墙,重启后失效。生产环境中应对指定的端口进行开放,而不是关闭防火墙。
  4. 具体开放哪些端口,需依据安装的程序决定。

5.服务器之间SSH免密登录

  1. 此步骤省略,自行百度。
  2. 关键字:服务器之间SSH免密登录

6.集群同步时钟

  1. 此步骤省略,自行百度。
  2. 关键字:服务器之间ntp同步时钟

7.设置swap(所有节点执行)

  1. echo vm.swappiness = 10 >> /etc/sysctl.conf

8.设置透明大页面(所有节点执行)

  1. 所有节点相同操作:
  2. echo never > /sys/kernel/mm/transparent_hugepage/defrag
  3. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  4. 将如下语句添加到/etc/rc.d/rc.local文件中:
  5. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  6. echo never > /sys/kernel/mm/transparent_hugepage/defrag
  7. 执行命令:chmod +x /etc/rc.d/rc.local

9.安装JDK(所有节点执行)

  1. 此处省略,自行百度。
  2. 注意:版本1.8或以上。安装的路径必须在/usr/java/目录下,如:/usr/java/jdk1.8.xxxxx

10.下载第三方依赖(所有节点执行)

  1. 所有节点相同操作:
  2. 如果安装不了,需要离线安装。
  3. yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb postgresql* portmap mod_ssl openssl-devel python-psycopg2 MySQL-python
  4. 安装python-pip包管理工具,安装psycopg2
  5. yum install python-pip
  6. pip install psycopg2==2.8.4
  7. 如果yum安装不了,需采用离线安装,我是离线安装的:
  8. 我的linux自带python版本是2.6.6,需要升级一下
  9. 下载pythonhttps://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
  10. 上传、解压、进入目录
  11. 执行:./configure --prefix=/usr/local/python3
  12. 执行:make
  13. 执行:make install
  14. 执行:ln -s /usr/local/python3/bin/python3 /usr/bin/python3
  15. 配置环境变量
  16. vim /etc/profile
  17. 加入内容:export PATH=$PATH$HOME/bin:/usr/local/python3/bin
  18. 生效环境变量:source /etc/profile
  19. 检查版本:python3 -V -- 大写的V
  20. 安装安装setuptools
  21. 安装好python3以后,安装setuptools(python2.7以下版本安装setuptools会报错)
  22. 下载(zip的压缩包):https://pypi.python.org/pypi/setuptools#downloads
  23. 解压并进入目录(unzip命令解压,如unzip setuptools-45.2.0.zip)
  24. 执行:python3 setup.py install
  25. 安装pip
  26. 下载:https://pypi.python.org/pypi/pip#downloads
  27. 解压并进入目录
  28. 执行:python3 setup.py install
  29. 安装psycopg2
  30. 下载:https://pypi.org/project/psycopg2-binary/
  31. 我下载的是:psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_x86_64.whl
  32. 上传文件,执行:pip install psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_x86_64.whl

10.安装mysql(在datanode2节点执行)

此处省略。自行百度。(调整为innodb引擎)
注意安装完自己连接一下看能否连接成功。

11.创建CM用的数据库(在datanode2节点执行)

进入mysql执行:./mysql -uroot -padmin

注意:
1.此处不要创建scm数据库。
2.如果有不使用的服务,可以不创建对应的数据库。

创建数据库:
create database if not exists amon default charset utf8 collate utf8_general_ci;
grant all on amon.* to 'root'@'%' identified by 'admin';
create database if not exists rman default charset utf8 collate utf8_general_ci;
grant all on rman.* to 'root'@'%' identified by 'admin';
create database if not exists hue default charset utf8 collate utf8_general_ci;
grant all on hue.* to 'root'@'%' identified by 'admin';
create database if not exists hive default charset utf8 collate utf8_general_ci;
grant all on hive.* to 'root'@'%' identified by 'admin';
create database if not exists sentry default charset utf8 collate utf8_general_ci;
grant all on sentry.* to 'root'@'%' identified by 'admin';
create database if not exists nav default charset utf8 collate utf8_general_ci;
grant all on nav.* to 'root'@'%' identified by 'admin';
create database if not exists navms default charset utf8 collate utf8_general_ci;
grant all on navms.* to 'root'@'%' identified by 'admin';
create database if not exists oozie default charset utf8 collate utf8_general_ci;
grant all on oozie.* to 'root'@'%' identified by 'admin';
flush privileges;
  • 数据库对应关系
服务名 数据库名
Cloudera Manager Server(注意先不要建立) scm
Activity Monitor amon
Reports Manager rman
Hue hue
Hive hive
Sentry Server sentry
Cloudera Navigator Audit Server nav
Cloudera Navigator Metadata Server navms
Oozie oozie

三、CM安装部署

1.解压(在主节点执行)

上传cloudera-manager-el6-cm5.12.0_x86_64.tar.gz包到(主节点)任意位置。
创建文件夹:mkdir -p /opt/cloudera-manager
解压文件到:tar -zxvf cloudera-manager-el6-cm5.12.0_x86_64.tar.gz -C /opt/cloudera-manager/


2.上传mysql驱动包(所有节点执行)

驱动包:mysql-connector-java.jar

驱动包名必须是:mysql-connector-java.jar
上传目录(没有自行创建):/usr/share/java

3.在mysql中创建cm库(在主节点执行)

执行命令:
/opt/cloudera-manager/cm-5.12.0/share/cmf/schema/scm_prepare_database.sh mysql scm -hdatanode2 -uroot -padmin --scm-host datanode2 scm scm scm

4.配置CM Agent(在主节点执行)

修改文件/opt/cloudera-manager/cm-5.12.0/etc/cloudera-scm-agent/config.ini

vim /opt/cloudera-manager/cm-5.12.0/etc/cloudera-scm-agent/config.ini

修改内容如下:
server_host=master

5.分发cloudera-manager(在主节点执行)

将刚才解压的出来的cm-5.12.0,整个目录拷贝到其他两个节点
scp -r /opt/cloudera-manager/cm-5.12.0 datanode1:/opt/
scp -r /opt/cloudera-manager/cm-5.12.0 datanode2:/opt/

6.创建Parcel-repo 目录

在主节点执行:
创建2个目录:
mkdir -p /opt/cloudera/parcel-repo
mkdir -p /opt/cloudera/parcels
拷贝下载文件到/opt/cloudera/parcel-repo主节点目录下
文件1:CDH-5.12.0-1.cdh5.12.0.p0.29-el6.parcel
文件2:CDH-5.12.0-1.cdh5.12.0.p0.29-el6.parcel.sha(注意改名)
文件3:manifest.json(注意内容与parcel文件名对应)

在datanode1和datanode2节点(从节点)执行:
创建1个目录:
mkdir -p /opt/cloudera/parcels
从节点创建目录即可,不需要拷贝任何文件。

8.启动和关闭CM Server&Agent 服务

主节点(master)执行:
启动:
/opt/module/cloudera-manager/cm-5.12.0/etc/init.d/cloudera-scm-server start
/opt/module/cloudera-manager/cm-5.12.0/etc/init.d/cloudera-scm-agent start


从节点(datanode1和datanode2)执行:
启动:
/opt/module/cm-5.12.0/etc/init.d/cloudera-scm-agent start

关闭(此处在需要关闭时执行):
把start改成stop为关闭

四、页面安装

步骤截图

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

image.png
image.png

五、添加服务

添加Zookeeper服务

image.png
image.png
image.png
image.png
image.png
image.png
image.png

安装好以后,会有一个异常。不良 : ZooKeeper 服务 canary 因未知原因失败。但不要紧张,该报警会持续两分钟然后自动恢复!

NameNode 高可用

image.png
image.png
image.png
image.png
image.png
image.png
image.png

添加YARN服务

YARN服务依赖HDFS服务,如上已经完成HDFS服务的安装,则可以继续添加YARN服务。如果没有安装HDFS,需先安装HDFS。

image.png
image.png
image.png
image.png
image.png
image.png

其他的服务安装类似,不在赘述。

六、常见问题**

1.不良 : 主机的 NTP 服务未同步至任何远程服务器。

首先检查ntpd服务是否启动。如已启动:

所有节点执行相同操作:
如:选择与10.10.10.10服务器ntp进行同步
编辑:
vim /etc/ntp.conf

内容如下:
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1 
restrict -6 ::1
server 10.10.10.10 prefer
server 127.127.1.0
fudge 127.127.1.0 stratum 10

编辑:
vim /etc/ntp/step-tickers

内容如下:
# List of servers used for initial synchronization.
10.10.10.10

重启ntpf服务:
service ntpd restart

检查ntpd服务:
ntpdc -np

2.HDFS:不良 : 群集中有 9 个 副本不足的块 块。群集中共有 12 个块。百分比 副本不足的块: 75.00%。 临界阈值:40.00%。

原因:设置的副本备份数与DataNode的个数不同。
dfs.replication的默认是3,也就是说副本数--块的备份数默认为3份。 
但是我设置的只有两个DataNode。所以导致了达不到目标,副本备份不足
点击集群-HDFS-配置,搜索dfs.replication,设置为2后保存更改。

3.HDFS:格式化 Failed to format NameNode.

原因:由于之前初始化 namenode 在 /dfs/nn 留下了残留数据(失效数据),从而影响再次初始化

手动格式化namenode
在namenode节点执行:
hdfs namenode -format

在namenode节点执行:
rm -rf /dfs/nn

在datanode节点执行:
rm -rf /dfs/dn

如果是重新安装,直接:
rm -rf /dfs

4.Hiveserver2:运行一会就警告,说退出了

image.png
image.png