离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务

历时一天半,着实废了不少功夫。
整个搭建过程,是参考这篇文章和大神的部署文档。

一、系统环境配置

前提是/etc/hostname已经修改过了。并且要注意,hostname中不允许有下划线_,一律用-代替。

1.修改映射关系

修改所有节点/etc/hosts文件并添加所有节点的映射关系

[root@see-data-pre-slave-1 local]# vim /etc/hosts

查看修改后的/etc/hosts文件内容

[root@see-data-pre-slave-1 local]# cat /etc/hosts
#127.0.0.1  localhost  localhost.localdomain  see-data-pre-slave-1
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.1  see-data-pre-master-01
192.168.0.2  see-data-pre-slave-1

2.配置免密的sudo用户

[root@see-data-pre-slave-1 local]# useradd hadoop
[root@see-data-pre-slave-1 local]# passwd hadoop

用户名:hadoop,密码:hadoop
root用户下visudo,添加hadoop ALL=(ALL) NOPASSWD: ALL

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       NOPASSWD: ALL

所有节点都需要这样配置

3.配置节点间免密ssh(hadoop用户)

hadoop用户下

ssh-keygen -t rsa

猛按回车。
~/.ssh/下会生成公钥id_rsa.pub和私钥id_rsa文件。然后将各节点的公钥互相追加。
公钥追加时,ssh-copy-id也好,手动创建也好,都可以。
但要确保节点对应用户下的authorized_keys文件,有对应的读权限。比较常见的作法就是chmod 400 authorized_keys。不然有可能会在都配置好的情况下,ssh时要么需要密码验证。要么会报Permission denied (publickey,gssapi-keyex,gssapi-with-mic).的error。
同时也要注意sshd_config的配置方法。

$ vim /etc/ssh/sshd_config

记得放开PasswordAuthentication no > yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication no
#PermitEmptyPasswords no
PasswordAuthentication yes

如果要修改ssh默认的端口配置,则需要vim /etc/ssh/ssh_config,将port变更为你想要的端口。

   Port 37500
#   Protocol 2
#   Cipher 3des

之后重启sshd服务。
全部完成后,开一个窗口测试下能否免密登录

$ ssh hadoop@see-data-pre-slave-1

4.关闭防火墙

$ systemctl stop firewalld.service

5.关闭SELINUX

这里我选择永久关闭

$ vi /etc/selinux/config

SELINUX=enforcing 改为 SELINUX=disabled
设置需要重启后才能生效。

6.配置jdk

下载Linux环境下的jdk1.8,上传至/opt并解压。

$ cd /opt
$ tar zxvf jdk-8u144-linux-x64.tar.gz
$ mv jdk1.8.0_144/ /lib/jvm

配置环境变量

$ vi /etc/profile

在其中添加

#jdk
export JAVA_HOME=/lib/jvm/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre   
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib   
export PATH=${JAVA_HOME}/bin:$PATH 

保存后使环境变量生效

$ source /etc/profile

通过java -versionwhereis java验证。
这里如果没用生效的话。我是选择设置软链接的方式,直接指向我解压的文件夹

$ ln -sf /lib/jvm/jdk1.8.0_144/jre/bin/java /bin/java
$ ln -sf /lib/jvm/jdk1.8.0_144/bin/javac /bin/javac

7.设置NTP

所有节点安装NTP

$ yum install ntp

设置同步

$ ntpdate -d master-01

然后重启服务

$ service ntpd restart

这里需要注意,如果是腾讯云的云服务器,需要vim /etc/ntp.conf来使用腾讯云的服务。

sudo vim /etc/ntp.conf
 
# Use public servers from the pool.ntp.org project.
 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
 
server ntpupdate.tencentyun.com
 
#server 0.centos.pool.ntp.org iburst
 
#server 1.centos.pool.ntp.org iburst
 
#server 2.centos.pool.ntp.org iburst
 
#server 3.centos.pool.ntp.org iburst

8.安装httpd服务

$ yum install httpd

启动

$ service httpd start

9.主节点(master)安装配置mysql

mysql 依赖libaio库

$ yum install libaio

下载mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz,上传至/opt,解压重命名至/usr/local/mysql

$ cd /opt
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
$ tar -zxvf /opt/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
$ mv /usr/local/mysql-5.7.19-linux-glibc2.12-x86_64/ /usr/local/mysql

新建用户组和用户

$ groupadd mysql
$ useradd mysql -g mysql

创建目录并授权

$ cd /usr/local/mysql/ 
$ mkdir data mysql-files
$ chmod 750 mysql-files
$ chown -R mysql .
$ chgrp -R mysql .

初始化mysql

$ bin/mysqld --initialize --user=mysql

注意mysql临时密码。root@localhost生成临时密码o89,也就是root@localhost:后的字符串。
授予读写权限

$ chown -R root .
$ chown -R mysql data mysql-files

添加到mysql启动脚本到系统服务

$ cp support-files/mysql.server /etc/init.d/mysql.server

给日志目录授予读写权限

$ mkdir /var/log/mariadb
$ touch /var/log/mariadb/mariadb.log
$ chown -R mysql:mysql /var/log/mariadb

修改/etc/my.cnf

$ vi /etc/my.cnf

修改 [mysqld]组下的 socket 路径,注释掉/var/lib/mysql/mysql.sock,加一行为tmp/mysql.sock

[mysqld]
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/tmp/mysql.sock

启动mysql服务

$ service mysql.server start

登录mysql

$ /usr/local/mysql/bin/mysql -uroot -p
Enter password: 

这里的密码就是之前提到的,临时密码o89

登陆成功后,设置MySQL密码

mysql> ALTER USER   'root'@'localhost' identified by '你想设置的密码';
mysql> flush privileges;

开启远程登录

mysql> grant all privileges on *.*  to  'root'@'%'  identified by '你想设置的密码'  with grant option;
mysql> flush privileges;
mysql> exit;

安装mysql时,我遇到过bin/mysqld: error while loading shared libraries: libnuma.so.1的error。
解决办法是yum -y install numactl(centos情况下)

10.下载依赖包

$ yum -y install chkconfig
$ yum -y install bind-utils
$ yum -y install psmisc
$ yum -y install libxslt
$ yum -y install zlib
$ yum -y install sqlite
$ yum -y install cyrus-sasl-plain
$ yum -y install cyrus-sasl-gssapi
$ yum -y install fuse
$ yum -y install portmap
$ yum -y install fuse-libs
$ yum -y install redhat-lsb

二、cloudera manager Server & Agent 安装

1.在所有节点,创建/opt/cloudera-manager

把下载好的cloudera-manager-centos7-cm5.12.1_x86_64.tar.gz安装包上传至 master节点/opt/目录。
所有节点解压安装Cloudera Manager Server & Agent。

$ cd /opt
$ tar xvzf cloudera-manager*.tar.gz -C /opt/cloudera-manager

2.在所有节点,创建用户cloudera-scm

$ useradd --system --home=/opt/cloudera-manager/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

3.配置cm agent

修改所有节点agent server_host

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

将server_host 修改成 master节点

# Hostname of the CM server.
server_host=192.168.0.1

# Port that the CM server is listening on.
server_port=7182

4.配置cm server的数据库

在master节点初始化cm5的数据库。
下载mysql驱动包

$ cd /opt/cloudera-manager/cm-5.12.1/share/cmf/lib
$ wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

启动mysql服务

$ service mysql.server start
$ cd /opt/cloudera-manager/cm-5.12.1/share/cmf/schema/

$ ./scm_prepare_database.sh mysql cm -h 192.168.0.1 -uroot -pseemysql2018 --scm-host 192.168.0.1 scm scm scm

如果看到如下信息,说明成功

[main] DbCommandExecutor              INFO  Successfully connected to database.
All done, your SCM database is configured correctly!

在这里遇到的坑就是,找不到$JAVA_HOME

./scm_prepare_database.sh: line 379: /lib/jvm/bin/java: No such file or directory

如果之前配置了软链接,或环境变量生效的话,不会出现这个错误。
最坏的办法就是去修改对应的配置shell,找到java8下的目录列表,把你解压好的java绝对路径加进去。
在初始化失败后,再次启动时,会报cm库已存在的error。解决办法就是在mysql中删掉对应的库,再次初始化。


离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第1张图片
master配置的mysql

5.创建 parcel 目录

master节点创建目录/opt/cloudera/parcel-repo
将下载好的文件

CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha
manifest.json

cp到该目录下

$ mkdir -p /opt/cloudera/parcel-repo
$ chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
$ cd /opt/cloudera/parcel-repo

重命名,CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 否则,系统会重新下载 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel

$ mv CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1 CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha

slave 节点创建目录/opt/cloudera/parcels

$ mkdir -p /opt/cloudera/parcels
$ chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

6.启动cm manager & agent服务

master节点

$ /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-server start

这里如果启动失败的话。就sudo执行
slave节点

$ /opt/cloudera-manager/cm-5.12.1/etc/init.d/cloudera-scm-agent start

如果http://master:7180(用户名/密码,admin/admin)可以访问,则安装成功。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第2张图片
登录页
离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第3张图片
不选最后一个就行。现在默认会有60天的试用期,到期之后就会转到免费版,不影响集群使用。

再点击继续。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第4张图片
如果agent服务启动正常就可以在当前管理的主机中,看到对应的节点。

正常情况下,这里不用主动搜索新主机。如果当前管理的主机中没有缺少节点,则需要检查对应节点的agent服务是否正常启动。
ssh端口需修改成服务器sshd_config中指定的默认端口。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第5张图片
选中节点,点击继续

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第6张图片
选中离线下载的cdh对应版本

点击继续,如果配置本地 Parcel 包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了。
在这里,如果选择主动扫描添加新节点,在没有配置好本地yum的情况下,会出现各种各样意外的bug。
比如IOError: [Errno 20] Not a directory: u'/opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel/meta/parcel.json'
cloudemanager安装时出现ProtocolError:
cdh Timed out waiting for worker process collecting filesystem usage to complete。这个部分我没有找到很好的解决办法。困扰了至少2个小时。直到我选择在当前管理主机中安装,问题就解决了。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第7张图片
等待完成

中间出现的,选择是否安装oracle java se 开发工具包(JDK)步骤,勾选安装。
集群安装,是否启用单用户模式,不勾选。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第8张图片
点击继续,检查主机正确性

一般情况下,检查完之后只会出图中这两个error。第一个不清楚是什么。第二个是说已启用透明大页压缩,可能会导致性能问题。解决办法就是如下如下三个命令。

$ echo 0 > /proc/sys/vm/swappiness
$ echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled

然后将这两个命令添加到/etc/rc.local中。
重新运行检查主机正确性。完成后点击继续。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第9张图片
根据实际需求选择

点击继续。
角色分配页,分配好对应的角色后,
点击继续。
配置数据库,这里使用之前master节点安装的mysql数据库。
配置项共有hive/hue/ozzie,可根据实际需要建对应的库及账号。
对应配置确定之后,右下方会有一个测试连接按钮。全部测试通过后,才可以点击继续。
在这里,我遇到的一个 JDBC driver cannot be found. Unable to find the JDBC database jar on host的error。解决办法是 mysql-connector-java.jar 复制为 /usr/share/java/mysql-connector-java.jar,文件名必须一致。
点击继续。
目录文件的配置页,基本上保持默认即可。
点击继续。
等待分配,安装。

离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务_第10张图片
主页

至此,集群配置安装成功!
到这一步时,我还遇到一个错误 Cloudera NFS Gateway Error : Cannot connect to port 111。出现这种问题的原因可能是 rpcbind 停止了服务。
解决办法

$ systemctl status rpcbind.service
$ systemctl start rpcbind.service
$ systemctl stop rpcbind.service

你可能感兴趣的:(离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务)