一、前言
本次采用的在线安装方式,cdh为6.3.2版本,系统为centos7.4, docker节点可以为任意多个,下文将以3个docker容器为示例进行展示。此方法也可用在docker swarm上,docker容器能够互连,网络互通即可。安装前请确保内存够用,我的32g内存3个节点启动后内存使用率75%。
二、宿主机初始化
以下在docker的宿主机上进行操作。
2.1配置yum源
yum install -y wget \
&& mkdir -p /etc/yum.repos.d/repo_bak \
&& mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/ \
&& wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
&& yum clean all \
&& yum makecache \
&& yum update –y
2.2安装docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2 \
&& yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo\
&& yum makecache fast \
&& yum -y install docker-ce \
&& yum clean all \
&& docker version
2.3配置docker
data-root:docker根目录路径
insecure-registries:docker私有仓库地址
registry-mirrors:公共镜像仓库加速地址
mkdir -p /etc/docker/ && \
(
cat <>/etc/docker/daemon.json \
&& systemctl start docker \
&& systemctl enable docker \
&& cat /etc/docker/daemon.json \
&& docker version
安装docker命令补全工具
yum install -y bash-completion \
&& source /usr/share/bash-completion/completions/docker \
&& source /usr/share/bash-completion/bash_completion \
&& yum clean all
2.4安装基本工具
yum install -y vim wget ntp net-tools \
&& yum clean all
2.5关闭防火墙
systemctl stop firewalld \
&& systemctl disable firewalld \
&& systemctl status firewalld
2.6设置SELinux模式
setenforce 0 \
|| sed -i 's/enforcing/disabled/g' /etc/selinux/config \
&& sed -i 's/permissive/disabled/g' /etc/selinux/config \
&& getenforce
2.7配置时间同步
vim /etc/ntp.conf
将时钟服务器更改为如下4个
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
注意:若为离线安装,则要将服务器地址改为内网时间服务器地址。
启动设置ntp服务
systemctl start ntpd \
&& systemctl enable ntpd \
&& ntpdate -u 0.cn.pool.ntp.org \
&& hwclock --systohc \
&& date
2.8创建自定义网络
docker network create --subnet=172.10.0.0/16 hadoop_net \
&& docker network ls
2.9下载CDH相关资源
由于CDH已经从2021年2月以后已经不提供免费下载了,所以我这里收集了一份已经下载好的安装必须的软件包集合(包括CDH,MYSQL,Dockerfile)。请大家自行下载
CDH资源下载 提取码: u07l
2.10创建基础系统镜像
在下载后CDH文件夹中,Dockerfile同级目录执行:
docker build -t centos7-cdh .
2.11启动容器
如果想要开机自启动容器。可以在命令中加上--restart always
docker run -d \
--add-host cm.hadoop:172.10.0.2 \
--net hadoop_net \
--ip 172.10.0.2 \
-h cm.hadoop \
-p 10022:22 \
-p 7180:7180 \
--name cm.hadoop \
--privileged \
centos7-cdh \
/usr/sbin/init \
&& docker ps
2.12拷贝安装CDH需要的文件到容器
在下载后CDH文件夹中,hadoop_CDH文件夹同级目录执行:
{dockerId}
为2.11中创建的容器id
docker cp hadoop_CDH {dockerId}:/root/hadoop_CDH
三、容器安装ClouderaManager
3.1初始化环境
进入第二步创建的容器中,并将root的登录密码改为root
docker exec –it {dockerId} /bin/bash
su root
passwd
root
root
安装基础环境
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools \
&& yum clean all
3.2配置中文环境变量
(
cat <> ~/.bashrc \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& source ~/.bashrc \
&& echo $LANG
3.3设置NTP时间同步服务
vim /etc/ntp.conf
更改为以下四个时钟服务器
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
调整时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
启动ntp服务
systemctl start ntpd && \
systemctl enable ntpd && \
ntpdate -u 0.cn.pool.ntp.org && \
hwclock --systohc && \
date
3.4搭建本地yum源
yum -y install httpd createrepo \
&& systemctl start httpd \
&& systemctl enable httpd \
&& cd /root/hadoop_CDH/cloudera-repos/ && createrepo . \
&& mv /root/hadoop_CDH/cloudera-repos /var/www/html/ \
&& yum clean all \
&& ll /var/www/html/cloudera-repos
3.5安装jdk
cd /var/www/html/cloudera-repos/;rpm -ivh oracle-j2sdk1.8-1.8.0update181-1.x86_64.rpm
3.6安装配置MySQL数据库
cd /root/hadoop_CDH/mysql/;tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar \
&& yum install -y libaio numactl \
&& rpm -ivh mysql-community-common-5.7.27-1.el7.x86_64.rpm \
&& rpm -ivh mysql-community-libs-5.7.27-1.el7.x86_64.rpm \
&& rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm \
&& rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm \
&& rpm -ivh mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm \
&& echo character-set-server=utf8 >> /etc/my.cnf \
&& rm -rf /root/hadoop_CDH/mysql/ \
&& yum clean all \
&& rpm -qa |grep mysql
3.7数据库授权
(
cat <> /root/c.sql
获取MySQL初始密码
systemctl start mysqld && grep password /var/log/mysqld.log | sed 's/.*\(............\)$/\1/'
执行SQL脚本 {password}
为刚刚查询的初始密码
mysql -uroot –p‘{password}’
登陆后执行
source /root/c.sql
3.8配置mysql jdbc驱动
mkdir -p /usr/share/java/ \
&& cd /root/hadoop_CDH/mysql-jdbc/;tar -zxvf mysql-connector-java-5.1.48.tar.gz \
&& cp /root/hadoop_CDH/mysql-jdbc/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar /usr/share/java/mysql-connector-java.jar \
&& rm -rf /root/hadoop_CDH/mysql-jdbc/ \
&& ls /usr/share/java/
3.9安装Cloudera Manager
(
cat <> /etc/yum.repos.d/cloudera-manager.repo \
&& yum clean all \
&& yum makecache \
&& yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server \
&& yum clean all \
&& rpm -qa | grep cloudera-manager
3.10配置parcel库
cd /opt/cloudera/parcel-repo/;mv /root/hadoop_CDH/parcel/* ./ \
&& sha1sum CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel | awk '{ print $1 }' > CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha \
&& rm -rf /root/hadoop_CDH/parcel/ \
&& chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/* \
&& ll /opt/cloudera/parcel-repo/
3.11初始化scm库
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 123456Aa.
3.12启动cloudera-server服务
systemctl start cloudera-scm-server \
&& sleep 2 \
&& tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log | grep "INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server"
四、配置CDH的worker节点
以下为worker容器的准备方式,若为多个时,重复执行以下步骤,创建多个worker节点。
4.1创建多个worker容器
创建2个work容器
Worker-1:
docker run -d \
--add-host cm.hadoop:172.10.0.2 \
--add-host cdh01.hadoop:172.10.0.3\
--net hadoop_net \
--ip 172.10.0.3 \
-h cdh01.hadoop \
-p 20022:22 \
--name cdh01.hadoop \
--privileged \
centos7-cdh \
/usr/sbin/init \
&& docker ps
Worker-2:
docker run -d \
--add-host cm.hadoop:172.10.0.2 \
--add-host cdh02.hadoop:172.10.0.4 \
--net hadoop_net \
--ip 172.10.0.4 \
-h cdh02.hadoop \
-p 30022:22 \
--name cdh02.hadoop \
--privileged \
centos7-cdh \
/usr/sbin/init \
&& docker ps
说明:
如果需要开机重启可以添加--restart always
开启
4.2装基本工具
上一步创建的所有容器均执行,修改root的登录密码改为root
docker exec –it {dockerId} /bin/bash
su root
passwd
root
root
然后执行:
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools \
&& yum clean all
4.3配置中文环境变量
(
cat <> ~/.bashrc \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& source ~/.bashrc \
&& echo $LANG
4.4配置NTP时间同步服务
vim /etc/ntp.conf
更改为以下四个时钟服务器
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
调整时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
启动ntp服务
systemctl start ntpd && \
systemctl enable ntpd && \
ntpdate -u 0.cn.pool.ntp.org && \
hwclock --systohc && \
date
4.5配置MySQL JDBC
mkdir -p /usr/share/java/ \
&& wget -O /usr/share/java/mysql-connector-java-5.1.48.tar.gz \
https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz \
&& cd /usr/share/java/;tar -zxvf mysql-connector-java-5.1.48.tar.gz \
&& cp /usr/share/java/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar /usr/share/java/mysql-connector-java.jar \
&& rm -rf mysql-connector-java-5.1.48 mysql-connector-java-5.1.48.tar.gz \
&& ls /usr/share/java/
4.6修改CM主机的host文件
echo "172.10.0.3 cdh01.hadoop cdh01" >> /etc/hosts
echo "172.10.0.4 cdh02.hadoop cdh02" >> /etc/hosts
注意:不是在worker节点上操作,而是在2.11创建的cloud-manager节点上操作,有多少个work容器,执行多少次,内容按真实情况填写即可。
五、CM管理平台创建CDH集群
5.1登陆CM管理平台
http://IP:7180/cmf/login 账号密码:admin/admin
5.2欢迎页
此面一直点击“继续”。
5.3集群安装
欢迎页
创建集群
添加节点
红色部分为: 172.10.0.[2-4]
选择存储
自定义存储库:http://172.10.0.2/cloudera-repos
Jdk安装
SSH凭据,密码为容器root用户的登录密码,此处为root。
安装代理
卡在这一步的情况比较多,我来说说我遇到的情况和解决办法
解决办法1:
cloudera安装报错 socket.gaierror: [Errno -2] Name or service not known
修改/usr/bin/host文件名
mv /usr/bin/host /usr/bin/host1
返回重试Install Agents
解决办法2:
安装失败。 无法接收 Agent 发出的检测信号。
直接在要安装agent的节点中重启cloudera-scm-agent服务
如果重启一次没有成功就重启两次。
重启后可以通过tail -200 /var/log/cloudera-scm-agent/cloudera-scm-agent.log
命令查看是否报错
docker exec -it {cdh01.containerId} bash
systemctl restart cloudera-scm-agent.service
docker exec -it {cdh02.containerId} bash
systemctl restart cloudera-scm-agent.service
注意:如果是别的安装方式,还需要检查/etc/hosts 里面配置的ip和hostname是否与/etc/hostname 里面的机器名相对应,但是我们这种方式是配置好的,不用检查。
解决办法3:
安装失败。查看详细信息后报错
cloudera-manager-agent must have Version=6.3.1 and Build=1466458, exiting
这是应为 repo 和parcel 版本不一致导致的,这时候我们就要手动安装cloudera-manager-agent
1.在所有Slave节点安装agement,
这步需要先将CDH\hadoop_CDH\cloudera-repos 目录下的
cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
两个安装包拷贝到Slave节点中,之后执行
yum localinstall cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-agent -y
所有Slave节点修改CM Server地址
vim /etc/cloudera-scm-agent/config.ini
# 将server_host修改为CM-Server所在的主机名
server_host= cm.hadoop
启动Agent
systemctl start cloudera-scm-agent
# 查看agent状态
systemctl status cloudera-scm-agent
#查看日志
tail -100f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
重启服务后刷新页面http://IP:7180/ 你就会看到这个界面
点击主机->所有主机
你会看到3台机器已经纳入管理了
说明agent安装成功了,接下来我们加继续安装大数据组建
由于刚才我们建集群的步骤被中断了,所以我们再来建一次
集群->添加集群
之后前面的步骤我就不再重复了,只需要在这个页面改为当前管理的主机
之后配置不变进入安装界面
5.4集群设置
红色为添加3个节点
这里填写我们配置好的数据库
服务 | 主机名称 | 数据库名称 | 用户名 | 密码 |
---|---|---|---|---|
Oozie | cm.hadoop | oozie | oozie | 123456Aa. |
Hive | cm.hadoop | metastore | hive | 123456Aa. |
Hue | cm.hadoop | hue | hue | 123456Aa. |
Datanode-> /dfs/datanode
Namenode-> /dfs/namenode
HDFS检查点-> /dfs/checkpoint
NodeManager 本地目录-> /dfs/nodemanager
安装完成!
六、用户设置
用于spark等需要用hdfs用户,需要设置一下dhfs账户的登陆权限
以cm机器为例
docker exec -it {cdh01.containerId} bash
vim /etc/passwd
#搜有hdfs
:/hsfs
#修改 hdfs:x:996:993:Hadoop HDFS:/var/lib/hadoop-hdfs:/sbin/nologin
#为 hdfs:x:996:993:Hadoop HDFS:/var/lib/hadoop-hdfs:/bin/bash
:wq
之后测试一下
su hdfs
spark-shell
参考链接:
https://www.cnblogs.com/runnerjack/p/12693597.html
https://blog.csdn.net/weixin_39062173/article/details/93065342
https://blog.csdn.net/yabingshi_tech/article/details/67632472