一、环境准备
我搭建的时候,没有文档,都是网上搜的资料,而且资料都不全,我装了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主机名(所有节点执行)
永久修改主机名:
vim /etc/sysconfig/network
修改内容如下:
(主节点)
NETWORKING=yes
HOSTNAME=master
(从节点1)
NETWORKING=yes
HOSTNAME=datanode1
(从节点2)
NETWORKING=yes
HOSTNAME=datanode2
2.配置hosts文件映射(所有节点执行)
所有节点相同操作:
vim /etc/hosts
修改内容如下:
127.0.0.1 localhost
11.10.119.22 datanode1
11.10.119.23 master
11.10.119.24 datanode2
3.禁用selinux(所有节点执行)
所有节点相同操作:
vim /etc/selinux/config
修改内容如下:
SELINUX=disabled
SELINUXTYPE=targeted
4.关闭防火墙(所有节点执行)
所有节点相同操作:
service iptables stop
注意此操作只是临时关闭防火墙,重启后失效。生产环境中应对指定的端口进行开放,而不是关闭防火墙。
具体开放哪些端口,需依据安装的程序决定。
5.服务器之间SSH免密登录
此步骤省略,自行百度。
关键字:服务器之间SSH免密登录
6.集群同步时钟
此步骤省略,自行百度。
关键字:服务器之间ntp同步时钟
7.设置swap(所有节点执行)
echo vm.swappiness = 10 >> /etc/sysctl.conf
8.设置透明大页面(所有节点执行)
所有节点相同操作:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
将如下语句添加到/etc/rc.d/rc.local文件中:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
执行命令:chmod +x /etc/rc.d/rc.local
9.安装JDK(所有节点执行)
此处省略,自行百度。
注意:版本1.8或以上。安装的路径必须在/usr/java/目录下,如:/usr/java/jdk1.8.xxxxx
10.下载第三方依赖(所有节点执行)
所有节点相同操作:
如果安装不了,需要离线安装。
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
安装python-pip包管理工具,安装psycopg2包
yum install python-pip
pip install psycopg2==2.8.4
如果yum安装不了,需采用离线安装,我是离线安装的:
我的linux自带python版本是2.6.6,需要升级一下
下载python:https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
上传、解压、进入目录
执行:./configure --prefix=/usr/local/python3
执行:make
执行:make install
执行:ln -s /usr/local/python3/bin/python3 /usr/bin/python3
配置环境变量
vim /etc/profile
加入内容:export PATH=$PATH$HOME/bin:/usr/local/python3/bin
生效环境变量:source /etc/profile
检查版本:python3 -V -- 大写的V
安装安装setuptools:
安装好python3以后,安装setuptools(python2.7以下版本安装setuptools会报错)
下载(zip的压缩包):https://pypi.python.org/pypi/setuptools#downloads
解压并进入目录(unzip命令解压,如unzip setuptools-45.2.0.zip)
执行:python3 setup.py install
安装pip:
下载:https://pypi.python.org/pypi/pip#downloads
解压并进入目录
执行:python3 setup.py install
安装psycopg2:
下载:https://pypi.org/project/psycopg2-binary/
我下载的是:psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_x86_64.whl
上传文件,执行: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
上传目录(没有自行创建):/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为关闭
四、页面安装
- 访问主节点(master):http://11.10.119.23:7180(用户名:admin 密码:admin)
步骤截图
五、添加服务
添加Zookeeper服务
安装好以后,会有一个异常。不良 : ZooKeeper 服务 canary 因未知原因失败。但不要紧张,该报警会持续两分钟然后自动恢复!
NameNode 高可用
添加YARN服务
YARN服务依赖HDFS服务,如上已经完成HDFS服务的安装,则可以继续添加YARN服务。如果没有安装HDFS,需先安装HDFS。
其他的服务安装类似,不在赘述。
六、常见问题**
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