阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

阿里云购买同一地区下的三台服务器,操作系统为Centos7.6,内网地址分别是172.17.58.37 172.17.58.38, 172.17.58.39,对应的节点分别为node1,node2,node3,node1为主机。部署CDH6.1.0,详细部署过程如下:

一、基础环境配置(全部节点)

1、修改主机名

#hostnamectl set-hostname node1

#vi /etc/hosts,修改内容如下:

127.0.0.1       localhost       localhost.node1 localhost4      localhost4.localdomain4

::1     localhost       localhost.node1 localhost6      localhost6.localdomain6

172.17.58.37    node1   node1

172.17.58.38    node2   node2

172.17.58.39    node3   node3

三台节点分别执行以上指令。

2、关闭防火墙

阿里云服务器默认关闭防火墙,我们也可以通过以下指令关闭防火墙。

# systemctl stop firewalld

#systemctl disable firewalld

3、关闭selinux

selinux是linux系统的安全增强模块,阿里云服务器默认是关闭的,也可以使用以下指令关闭:

# vim /etc/sysconfig/selinux

SELINUX=disabled

这个需要重启生效。

4、时钟同步

安装ntp:yum -y install ntp

vi /etc/ntp.conf

主节点增加:restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap,具体地址根据自己的ip范围设定。

从节点增加:server 主节点ip,并注释其他server

重启ntp服务即可。

设置开机启动。

#chkconfig ntpd on

如果无法启动,可能是由于chrony冲突引起的,如是使用systemctl is-enabled chronyd来查看一下,往往得到的结果是chrony已经被设置为enabled。

所以,解决这一问题的方法就是:

systemctl disable chronyd

5、设置文件打开数量限制

因为在部署过程出现too many file open的错误,所以还是先提前设置。如下修改两个配置:

1)vi /etc/security/limits.conf,修改

* soft nofile 2000 

* hard nofile 65535

2)vi /etc/sysctl.conf,增加

fs.file-max = 65535

fs.inotify.max_user_instances = 1024

6、配置SSH免密登陆

三台主机之间需要SSH免密连接,配置过程如下:

node1操作如下:

1)node1生成无密码的**对:ssh-****** -t rsa

2)将公钥添加到认证文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

3)置authorized_keys的访问权限:chmod 600 ~/.ssh/authorized_keys

4)node1将认证文件拷贝到其他两个节点:

scp ~/.ssh/id_rsa.pub [email protected]172.17.58.38:~/.ssh/id_rsa_node1.pub

scp ~/.ssh/id_rsa.pub [email protected]172.17.58.39:~/.ssh/id_rsa_node1.pub

注意这里在其他节点的认证文件命名为node1

node2、node3依次执行上述操作。这时候每个节点的~/.ssh目录下分别存在其他两个节点的认证文件。分别给这个目录下的认证文件进行授权。

node1下执行:

cat ~/.ssh/id_rsa_node2.pub >> ~/.ssh/authorized_keys

cat ~/.ssh/id_rsa_node3.pub >> ~/.ssh/authorized_keys

同理,node2,node3执行。

执行完毕后,在node1下执行ssh node2就可以直接连接了。

8、禁用透明大页面压缩

如果不禁用,后面部署cdh的时候会提示重大性能问题。如下:

#vi /etc/rc.local

添加:

echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo never > /sys/kernel/mm/transparent_hugepage/enabled

重启生效。

9、优化交换分区

tuned 服务会动态调整系统参数,查找 tuned 中配置,直接将配置修改为 vm.swappiness=0

sysctl -w vm.swappiness=0

echo vm.swappiness = 0 >> /etc/sysctl.conf

至此,基础环境已经配置完成。阿里云提供了快照的功能,为了后期出现问题又无法解决需要重新安装操作系统,可以使用快照进行快速的备份和还原。

二、软件环境配置

主要是java环境和mysql

1、Java JDK1.8.0安装(全部节点)

1)查看系统自带Java,输入java -version,如果有openjdk,卸载,没有直接安装最新的jdk

2)搜索jdk # yum search java|grep jdk

3)下载并安装jdk1.8 # yum install java-1.8.0-openjdk

到这一步java基本安装完成,使用java-version也可以查看java版本,但是缺少java开发环境,后期cdh会提示找不到java。所以继续安装如下:

4)安装开发环境:yum install java-1.8.0-openjdk-devel.x86_64

5)配置环境变量:vi /etc/profile,添加:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64

export JRE_HOME=$JAVA_HOME/jre

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

执行指令使配置生效:source /etc/profile

2、安装mysql5.7(主节点node1)

1)下载mysql压缩包:

wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar

2)解压

tar -xvf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar

3)安装

安装前先卸载旧版本mariadb-libs:

rpm -qa | grep mariadb

下载上述命令查到的mariadb-libs包:

rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

4)开始安装

rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm

如果安装过程提示缺少libaio,执行yum -y install libaio

5)启动mysql服务

service mysqld start

6)关闭密码策略

vi /etc/my.cnf,my.cnf是mysql的配置文件,添加:

validate_password = off

主要是测试使用,使用类似123456的简单密码。也可以不用关闭,设置复杂密码。

7)查看初始密码

grep 'temporary password' /var/log/mysqld.log

8)登陆并修改密码

mysql -uroot -p上述密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

9)远程访问

use mysql;

update user set host='%' where user='root' and host='localhost';

flush privileges;

10)设置开机启动

vi /etc/rc.local

在文件中添加 service mysqld start即可。

至此,软件环境安装完成。可以进行CDH安装了。

三、CDH工具包下载

1)cloudera-manager-agent

https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm

2)cloudera-manager-daemons

https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm

3)cloudera-manager-server

https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm

4)cloudera-manager-server-db

https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/cloudera-manager-server-db-2-6.1.0-769885.el7.x86_64.rpm

5)oracle-j2sdk1.8-1.8.0

https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm

6)cdhparcel包

https://archive.cloudera.com/cdh6/6.1.0/parcels/连接下找到:

CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel

CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel.sha256

manifest.json

7)mysql jdbc包

https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz

以上包分别使用wget下载至本地目录。

至此,CDH工具包准备完毕。

四、CDH安装

1)将mysql jdbc包复制到share目录,以备cdh使用。

tar zxvf mysql-connector-java-5.1.46.tar.gz

mkdir -p /usr/share/java/

cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar

注意,这里复制过去后统一命名为mysql-connector-java.jar。

2)为chd创建数据库

打开mysql

mysql -uroot p123456

use mysql;

CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '123456';

CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY '123456';

CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY '123456';

CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON hue.* TO [email protected]'%' IDENTIFIED BY '123456';

CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY '123456';

CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY '123456';

CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY '123456';

CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY '123456';

CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY '123456';

CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON hive .* TO 'hive'@'%' IDENTIFIED BY '123456';

flush privileges;提交生效。

3)安装cloudera manager包

主节点node1安装如下:

yum -y install cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm

yum -y install cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm

注:该包安装时出现错误如下:

Error: Package: 2:postfix-2.10.1-7.el7.x86_64 (@anaconda)

           Requires: libmysqlclient.so.18()(64bit)

解决方式:

下载Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm,

安装rpm -ivh Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm

安装后会提供libmysqlclient.so.18()。

继续安装:

yum -y install cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm

从节点安装:

yum -y install cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm

yum -y install cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm

4)修改agent配置文件,指向主节点(全部节点)

vi  /etc/cloudera-scm-agent/config.ini

server_host=node1

5)配置 Cloudera Manager 数据库(主节点)

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm

输入scm密码:123456

6)配置cloudera manager 仓库,后面选择cdh版本和分发parcel的时候会用到(主节点)

#wget https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/

#rpm --import https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPM-GPG-KEY-cloudera

7)准备parcel包(主节点),后面parcel下载的时候可以直接使用

创建目录:mkdir /opt/cloudera/parcel-repo/

并将刚才下载的parcel包,如下:

CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel

CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel.sha256

manifest.json

使用cp命令,拷贝至该目录下,并将CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel.sha256重命名为CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel.sha。

注:cdh安装过程选择版本时出现无法选择cdh6.1.0时,可以重新写入sha。如下:

sha1sum /opt/cloudera/parcel-repo/CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel

vi /opt/cloudera/parcel-repo/CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel.sha

用生成的sha替换下。替换后需要重启scm server:service cloudera-scm-server restart

8、启动scm-server

systemctl start cloudera-scm-server

查看启动日志:

tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log,显示

INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.

表示启动成功。

9、启动agent,别忘记配置config.ini,指向node1节点。

systemctl start cloudera-scm-agent

至此,cdh全部环节部署完成。

这里可以建个快照。

五、CDH集群配置

由于阿里云ECS服务器的Centos环境是*面的,没办法直接使用内置的浏览器进行设置,我们只能通过外网端口进行设置,通过阿里云配置7180端口的访问权限,配置完成后,访问主节点node1的外网地址:7180。显示如下登陆界面:

阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

 输入默认的用户名密码:admin,admin进行登陆设置。

后续如无特殊说明,直接点击下一步进行默认设置。

阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

版本选择时选择Express免费版本,基本能够满足使用。

阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

这一步能够看到已经连接的主机,全部选中,进行下一步。我这里当时忘了截图,使用的别人的界面,勿怪。

如果这一步无法自动识别agent主机,尝试重启agent服务,还是不行尝试删除uuid:rm -rf /var/lib/cloudera-scm-agent/uuid,再重启agent服务。但是这时候会多出几个节点,原因是scm数据库hosts表多了几条uuid的记录,删除即可,如果不能删除,则重新初始化数据库。

阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

這裏CDH版本选择6.1.0,其他默认。如果没有该选项,回到4.6,4.7步骤查看是否如此操作。

阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

这里完成parcel的下载和分发,因为已经在4.7步骤配置parcel-repo,无需再网络下载,直接分发,如果分发过程出现主机运行状态不良的问题,删除agent的guid文件。如下:rm -rf /var/lib/cloudera-scm-agent/cm_guid,重启agent

阿里云ECS服务器Centos7.6环境下部署CDH6.1.大数据集群

这一步用来测试数据库的连接,配置数据库hue错误:Unexpected error. Unable to verify database connection错误,查看日志,缺少包,安装如下:

wget https://dev.mysql.com/get/Downloads/mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm

后续一路继续,知道完成为止。