一、前言
本次采用的在線安裝方式,cdh為6.3.2版本,系統(tǒng)為centos7.4, docker節(jié)點(diǎn)可以為任意多個(gè),下文將以3個(gè)docker容器為示例進(jìn)行展示。此方法也可用在docker swarm上,docker容器能夠互連,網(wǎng)絡(luò)互通即可。安裝前請(qǐng)確保內(nèi)存夠用,我的32g內(nèi)存3個(gè)節(jié)點(diǎn)啟動(dòng)后內(nèi)存使用率75%。
二、宿主機(jī)初始化
以下在docker的宿主機(jī)上進(jìn)行操作。
?
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私有倉(cāng)庫(kù)地址
registry-mirrors:公共鏡像倉(cāng)庫(kù)加速地址
mkdir -p /etc/docker/ && \
(
cat <<EOF
{
"data-root":"/home/docker",
"registry-mirrors": ["https://1e7waog4.mirror.aliyuncs.com"]
}
EOF
) >>/etc/docker/daemon.json \
&& systemctl start docker \
&& systemctl enable docker \
&& cat /etc/docker/daemon.json \
&& docker version
安裝docker命令補(bǔ)全工具
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關(guān)閉防火墻
systemctl stop firewalld \
&& systemctl disable firewalld \
&& systemctl status firewalld
?
2.6設(shè)置SELinux模式
setenforce 0 \
|| sed -i 's/enforcing/disabled/g' /etc/selinux/config \
&& sed -i 's/permissive/disabled/g' /etc/selinux/config \
&& getenforce
?
2.7配置時(shí)間同步
vim /etc/ntp.conf
將時(shí)鐘服務(wù)器更改為如下4個(gè)
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
注意:若為離線安裝,則要將服務(wù)器地址改為內(nèi)網(wǎng)時(shí)間服務(wù)器地址。
啟動(dòng)設(shè)置ntp服務(wù)
systemctl start ntpd \
&& systemctl enable ntpd \
&& ntpdate -u 0.cn.pool.ntp.org \
&& hwclock --systohc \
&& date
?
2.8創(chuàng)建自定義網(wǎng)絡(luò)
docker network create --subnet=172.10.0.0/16 hadoop_net \
&& docker network ls
?
2.9下載CDH相關(guān)資源
由于CDH已經(jīng)從2021年2月以后已經(jīng)不提供免費(fèi)下載了,所以我這里收集了一份已經(jīng)下載好的安裝必須的軟件包集合(包括CDH,MYSQL,Dockerfile)。請(qǐng)大家自行下載
CDH資源下載 提取碼: u07l
?
2.10創(chuàng)建基礎(chǔ)系統(tǒng)鏡像
在下載后CDH文件夾中,Dockerfile同級(jí)目錄執(zhí)行:
docker build -t centos7-cdh .
?
2.11啟動(dòng)容器
如果想要開機(jī)自啟動(dòng)容器??梢栽诿钪屑由?code>--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文件夾同級(jí)目錄執(zhí)行:
{dockerId} 為2.11中創(chuàng)建的容器id
docker cp hadoop_CDH {dockerId}:/root/hadoop_CDH
?
三、容器安裝ClouderaManager
?
3.1初始化環(huán)境
進(jìn)入第二步創(chuàng)建的容器中,并將root的登錄密碼改為root
docker exec –it {dockerId} /bin/bash
su root
passwd
root
root
安裝基礎(chǔ)環(huán)境
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools \
&& yum clean all
?
3.2配置中文環(huán)境變量
(
cat <<EOF
export LC_ALL=zh_CN.utf8
export LANG=zh_CN.utf8
export LANGUAGE=zh_CN.utf8
EOF
) >> ~/.bashrc \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& source ~/.bashrc \
&& echo $LANG
?
3.3設(shè)置NTP時(shí)間同步服務(wù)
vim /etc/ntp.conf
更改為以下四個(gè)時(shí)鐘服務(wù)器
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
調(diào)整時(shí)區(qū)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
啟動(dòng)ntp服務(wù)
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數(shù)據(jù)庫(kù)
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數(shù)據(jù)庫(kù)授權(quán)
(
cat <<EOF
set password for root@localhost = password('123456Aa.');
grant all privileges on *.* to 'root'@'%' identified by '123456Aa.';
flush privileges;
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY '123456Aa.';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY '123456Aa.';
SHOW DATABASES;
EOF
) >> /root/c.sql
獲取MySQL初始密碼
systemctl start mysqld && grep password /var/log/mysqld.log | sed 's/.*\(............\)$/\1/'
執(zhí)行SQL腳本 {password}為剛剛查詢的初始密碼
mysql -uroot –p‘{password}’
登陸后執(zhí)行
source /root/c.sql
?
3.8配置mysql jdbc驅(qū)動(dòng)
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 <<EOF
[cloudera-manager]
name=Cloudera Manager 6.3.0
baseurl=http://172.10.0.2/cloudera-repos/
gpgcheck=0
enabled=1
EOF
) >> /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庫(kù)
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庫(kù)
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 123456Aa.
?
3.12啟動(dòng)cloudera-server服務(wù)
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節(jié)點(diǎn)
以下為worker容器的準(zhǔn)備方式,若為多個(gè)時(shí),重復(fù)執(zhí)行以下步驟,創(chuàng)建多個(gè)worker節(jié)點(diǎn)。
?
4.1創(chuàng)建多個(gè)worker容器
創(chuàng)建2個(gè)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
說明:
如果需要開機(jī)重啟可以添加--restart always開啟
?
4.2裝基本工具
上一步創(chuàng)建的所有容器均執(zhí)行,修改root的登錄密碼改為root
docker exec –it {dockerId} /bin/bash
su root
passwd
root
root
然后執(zhí)行:
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools \
&& yum clean all
?
4.3配置中文環(huán)境變量
(
cat <<EOF
export LC_ALL=zh_CN.utf8
export LANG=zh_CN.utf8
export LANGUAGE=zh_CN.utf8
EOF
) >> ~/.bashrc \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& source ~/.bashrc \
&& echo $LANG
?
4.4配置NTP時(shí)間同步服務(wù)
vim /etc/ntp.conf
更改為以下四個(gè)時(shí)鐘服務(wù)器
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
調(diào)整時(shí)區(qū)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
啟動(dòng)ntp服務(wù)
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主機(jī)的host文件
echo "172.10.0.3 cdh01.hadoop cdh01" >> /etc/hosts
echo "172.10.0.4 cdh02.hadoop cdh02" >> /etc/hosts
注意:不是在worker節(jié)點(diǎn)上操作,而是在2.11創(chuàng)建的cloud-manager節(jié)點(diǎn)上操作,有多少個(gè)work容器,執(zhí)行多少次,內(nèi)容按真實(shí)情況填寫即可。
五、CM管理平臺(tái)創(chuàng)建CDH集群
?
5.1登陸CM管理平臺(tái)
http://IP:7180/cmf/login 賬號(hào)密碼:admin/admin
?
5.2歡迎頁(yè)

此面一直點(diǎn)擊“繼續(xù)”。


?
5.3集群安裝
歡迎頁(yè)

創(chuàng)建集群

添加節(jié)點(diǎn)

紅色部分為: 172.10.0.[2-4]
選擇存儲(chǔ)

自定義存儲(chǔ)庫(kù):http://172.10.0.2/cloudera-repos
Jdk安裝


SSH憑據(jù),密碼為容器root用戶的登錄密碼,此處為root。
安裝代理

?
卡在這一步的情況比較多,我來說說我遇到的情況和解決辦法
?
解決辦法1:
cloudera安裝報(bào)錯(cuò) socket.gaierror: [Errno -2] Name or service not known
修改/usr/bin/host文件名
mv /usr/bin/host /usr/bin/host1
返回重試Install Agents
解決辦法2:
安裝失敗。 無法接收 Agent 發(fā)出的檢測(cè)信號(hào)。
直接在要安裝agent的節(jié)點(diǎn)中重啟cloudera-scm-agent服務(wù)
如果重啟一次沒有成功就重啟兩次。
重啟后可以通過tail -200 /var/log/cloudera-scm-agent/cloudera-scm-agent.log命令查看是否報(bào)錯(cuò)
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 里面的機(jī)器名相對(duì)應(yīng),但是我們這種方式是配置好的,不用檢查。
解決辦法3:
安裝失敗。查看詳細(xì)信息后報(bào)錯(cuò)
cloudera-manager-agent must have Version=6.3.1 and Build=1466458, exiting
這是應(yīng)為 repo 和parcel 版本不一致導(dǎo)致的,這時(shí)候我們就要手動(dòng)安裝cloudera-manager-agent
1.在所有Slave節(jié)點(diǎn)安裝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
兩個(gè)安裝包拷貝到Slave節(jié)點(diǎn)中,之后執(zhí)行
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節(jié)點(diǎn)修改CM Server地址
vim /etc/cloudera-scm-agent/config.ini
# 將server_host修改為CM-Server所在的主機(jī)名
server_host= cm.hadoop
啟動(dòng)Agent
systemctl start cloudera-scm-agent
# 查看agent狀態(tài)
systemctl status cloudera-scm-agent
#查看日志
tail -100f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
重啟服務(wù)后刷新頁(yè)面http://IP:7180/ 你就會(huì)看到這個(gè)界面

點(diǎn)擊主機(jī)->所有主機(jī)

你會(huì)看到3臺(tái)機(jī)器已經(jīng)納入管理了

說明agent安裝成功了,接下來我們加繼續(xù)安裝大數(shù)據(jù)組建
由于剛才我們建集群的步驟被中斷了,所以我們?cè)賮斫ㄒ淮?/p>
集群->添加集群

之后前面的步驟我就不再重復(fù)了,只需要在這個(gè)頁(yè)面改為當(dāng)前管理的主機(jī)

之后配置不變進(jìn)入安裝界面


?
5.4集群設(shè)置


紅色為添加3個(gè)節(jié)點(diǎn)

這里填寫我們配置好的數(shù)據(jù)庫(kù)
| 服務(wù) | 主機(jī)名稱 | 數(shù)據(jù)庫(kù)名稱 | 用戶名 | 密碼 |
|---|---|---|---|---|
| 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檢查點(diǎn)-> /dfs/checkpoint
NodeManager 本地目錄-> /dfs/nodemanager

安裝完成!

?
?
?
六、用戶設(shè)置
用于spark等需要用hdfs用戶,需要設(shè)置一下dhfs賬戶的登陸權(quán)限
以cm機(jī)器為例
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
之后測(cè)試一下
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