docker搭建Hadoop?CDH高可用集群實(shí)現(xiàn)
首先我們?yōu)榱酥罄^續(xù)搭建軟件,這里沒(méi)有使用docker-compose,而是通過(guò)構(gòu)建四臺(tái)centos,再在里面搭建我們所需要的組件
宿主機(jī)最好提供10 GB的RAM,硬盤(pán)占用大概會(huì)在40G以上
本次采用的在線安裝方式,cdh為6.3.2版本,系統(tǒng)為centos7.4, docker節(jié)點(diǎn)可以為任意多個(gè),下文將以3個(gè)docker容器為示例進(jìn)行展示。此方法也可用在docker swarm上,docker容器能夠互連,網(wǎng)絡(luò)互通即可
離線安裝包地址:
鏈接: https://pan.baidu.com/s/1vMm0yMYya2vhbEabeJMPHQ 提取碼: xbrx
0. docker安裝
卸載(可選)
如果之前安裝過(guò)舊版本的Docker,可以使用下面命令卸載:
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
安裝docker
首先需要大家虛擬機(jī)聯(lián)網(wǎng),安裝yum工具
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken
然后更新本地鏡像源:
# 設(shè)置docker鏡像源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 第二步 sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo # 第三步 yum makecache fast
然后輸入命令:
yum install -y docker-ce
docker-ce為社區(qū)免費(fèi)版本。稍等片刻,docker即可安裝成功。
1. 構(gòu)建Centos-cdh鏡像
宿主機(jī)初始化
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
構(gòu)建容器的Dockerfile
文件(創(chuàng)建這個(gè)文件)
FROM docker.io/ansible/centos7-ansible RUN yum -y install openssh-server RUN yum -y install bind-utils RUN yum -y install which RUN yum -y install sudo
在Dockerfile同級(jí)目錄執(zhí)行:
docker build -t centos7-cdh .
生成要用的基礎(chǔ)centos7的鏡像
接著我們給鏡像創(chuàng)建一個(gè)網(wǎng)橋
docker network create --subnet=172.10.0.0/16 hadoop_net && docker network ls
啟動(dòng)容器
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 \ --restart always \ --name cm.hadoop \ --privileged \ centos7-cdh \ /usr/sbin/init \ && docker ps
參數(shù)解釋:
- run -d # 后臺(tái)啟動(dòng)
- --add-host cm.hadoop:172.10.0.2 # 給容器分配一個(gè)固定的ip,主機(jī)名為:cm.hadoop
- --net hadoop_net # 將容器加入到上一步創(chuàng)建的網(wǎng)橋中
- -p # 端口映射
- --restart always # docker重啟后會(huì)自動(dòng)開(kāi)啟此容器
- --name cm.hadoop # 給容器起名字,在docker中可以用主機(jī)名代替ip鏡像訪問(wèn)
- --privileged # 聲明此容器可以定制化,例如使container內(nèi)的root擁有真正的root權(quán)限等
2. 容器安裝ClouderaManager
2.1 初始化環(huán)境
我們進(jìn)入容器,配置一些東西
docker exec -it cm.hadoop bash
將root的登錄密碼改為root
$ 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
此步如果出錯(cuò),請(qǐng)嘗試容器是否可以正常聯(lián)網(wǎng),檢查docker網(wǎng)橋設(shè)置
2.2 配置中文環(huán)境變量
vim ~/.bashrc
,在末尾添加
export LC_ALL=zh_CN.utf8 export LANG=zh_CN.utf8 export LANGUAGE=zh_CN.utf8
執(zhí)行
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \ && source ~/.bashrc \ && echo $LANG
2.3 設(shè)置NTP時(shí)間同步服務(wù)
這一步是必須要做的,因?yàn)閔adoop集群如果時(shí)間不同步會(huì)出現(xiàn)通訊失敗的情況
安裝ntp
yum install ntp -y
同步時(shí)間
ntpdate -u ntp1.aliyun.com
修改時(shí)區(qū)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
再創(chuàng)建一個(gè)定時(shí)任務(wù),用于定時(shí)同步時(shí)間(防止虛擬機(jī)停止后時(shí)間異常)
crontab -e # 添加 0 */2 * * * /usr/sbin/ntpdate ntp1.aliyun.com
啟動(dòng)ntp服務(wù)
systemctl start ntpd && \ systemctl enable ntpd && \ date
2.4 安裝mysql
使用wget安裝(也可以單獨(dú)部署,單獨(dú)部署這里不再贅述):
mkdir -p /root/hadoop__CHD/mysql \ && wget -O /root/hadoop_CHD/mysql/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar \ https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar \ && ls /root/hadoop_CHD/mysql
使用wget會(huì)非常的慢,我們可以上傳給宿主機(jī),然后通過(guò)docker命令拷貝給centos-chd
# 前提是容器的/root/hadoop_CHD/mysql目錄必須事先創(chuàng)建。 docker cp mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar {容器ID}:/root/hadoop_CHD/mysql
準(zhǔn)備MySQL JDBC驅(qū)動(dòng)
mkdir -p /root/hadoop_CHD/mysql-jdbc \ && wget -O /root/hadoop_CHD/mysql-jdbc/mysql-connector-java-5.1.48.tar.gz \ https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz \ && ls /root/hadoop_CHD/mysql-jdbc
2.5 準(zhǔn)備Cloudera-Manager安裝包
這樣下載很慢,建議用finalshell等工具直接從自己的電腦上上傳到虛擬機(jī)中,直接連接宿主機(jī)的10022端口即可
mkdir -p /root/hadoop_CHD/cloudera-repos \ && wget -O /root/hadoop_CHD/cloudera-repos/allkeys.asc \ https://archive.cloudera.com/cm6/6.3.0/allkeys.asc \ && wget -O /root/hadoop_CHD/cloudera-repos/cloudera-manager-agent-6.3.0-1281944.el7.x86_64.rpm \ https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPMS/x86_64/cloudera-manager-agent-6.3.0-1281944.el7.x86_64.rpm \ && wget -O /root/hadoop_CHD/cloudera-repos/cloudera-manager-daemons-6.3.0-1281944.el7.x86_64.rpm \ https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPMS/x86_64/cloudera-manager-daemons-6.3.0-1281944.el7.x86_64.rpm \ && wget -O /root/hadoop_CHD/cloudera-repos/cloudera-manager-server-6.3.0-1281944.el7.x86_64.rpm \ https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPMS/x86_64/cloudera-manager-server-6.3.0-1281944.el7.x86_64.rpm \ && wget -O /root/hadoop_CHD/cloudera-repos/cloudera-manager-server-db-2-6.3.0-1281944.el7.x86_64.rpm \ https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPMS/x86_64/cloudera-manager-server-db-2-6.3.0-1281944.el7.x86_64.rpm \ && wget -O /root/hadoop_CHD/cloudera-repos/enterprise-debuginfo-6.3.0-1281944.el7.x86_64.rpm \ https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPMS/x86_64/enterprise-debuginfo-6.3.0-1281944.el7.x86_64.rpm \ && wget -O /root/hadoop_CHD/cloudera-repos/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm \ https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPMS/x86_64/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm \ && ll /root/hadoop_CHD/cloudera-repos
準(zhǔn)備Parcel包
mkdir -p /root/hadoop_CHD/parcel \ && wget -O /root/hadoop_CHD/parcel/ CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel \ https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel \ && wget -O /root/hadoop_CHD/parcel/manifest.json \ https://archive.cloudera.com/cdh6/6.3.2/parcels/manifest.json \ && ll /root/hadoop_CHD/parcel
搭建本地yum源
yum -y install httpd createrepo \ && systemctl start httpd \ && systemctl enable httpd \ && cd /root/hadoop_CHD/cloudera-repos/ && createrepo . \ && mv /root/hadoop_CHD/cloudera-repos /var/www/html/ \ && yum clean all \ && ll /var/www/html/cloudera-repos
2.6 安裝jdk
yum install -y java-1.8.0-openjdk-devel.x86_64
查看一下:
java -version
jdk會(huì)默認(rèn)安裝在/usr/lib/jvm
目錄下:
這樣安裝沒(méi)有配置JAVA_HOME
,我們需要進(jìn)一步配置,不然后面安裝會(huì)報(bào)錯(cuò)
( cat <<EOF #set java environment JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME CLASSPATH PATH EOF ) >> /etc/profile && source /etc/profile && java -version
2.7 啟動(dòng)前準(zhǔn)備
安裝配置MySQL數(shù)據(jù)庫(kù)(采用docker獨(dú)立安裝跳過(guò)此步)
cd /root/hadoop_CHD/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_CHD/mysql/ \ && yum clean all \ && rpm -qa |grep mysql
建數(shù)據(jù)庫(kù)表
( 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
保存為:/root/c.sql
獲取MySQL初始密碼
systemctl start mysqld && grep password /var/log/mysqld.log | sed 's/.*(............)$/1/'
執(zhí)行SQL腳本
mysql -u root -p
輸入查詢出的默認(rèn)密碼,然后執(zhí)行:
source /root/c.sql
配置mysql jdbc驅(qū)動(dòng)
$ mkdir -p /usr/share/java/ $ cd /root/hadoop_CHD/mysql-jdbc/ $ tar -zxvf mysql-connector-java-5.1.48.tar.gz $ cp /root/hadoop_CHD/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_CHD/mysql-jdbc/ $ ls /usr/share/java/
這里有坑,就是這個(gè)驅(qū)動(dòng)版本不能太高,剛開(kāi)始我的是5.1.47的驅(qū)動(dòng),然后就會(huì)報(bào)錯(cuò),換了5.1.6的就好了(手動(dòng)上傳),還有就是驅(qū)動(dòng)不能帶版本號(hào)
名字要為mysql-connector-java.jar
安裝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
配置parcel庫(kù)
cd /opt/cloudera/parcel-repo/;mv /root/hadoop_CHD/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_CHD/parcel/ \ && chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/* \ && ll /opt/cloudera/parcel-repo/
初始化scm庫(kù)
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 123456Aa.
接著上面的,如果驅(qū)動(dòng)沒(méi)有問(wèn)題
啟動(dòng)cloudera-server服務(wù)
systemctl start cloudera-scm-server.service \ && sleep 2 \ && tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log | grep "INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server"
這里如果出錯(cuò),請(qǐng)多看錯(cuò)誤日志,一般為驅(qū)動(dòng)未找到,或者是bean構(gòu)建失敗等等,如果失敗不要反復(fù)重啟服務(wù),因?yàn)?code>scm數(shù)據(jù)庫(kù)里面的數(shù)據(jù)很可能會(huì)出現(xiàn)問(wèn)題,應(yīng)該刪除該數(shù)據(jù)庫(kù)再重新啟動(dòng)
到這里如果沒(méi)有什么問(wèn)題,你可以在你的瀏覽器里面看到頁(yè)面,http://IP:7180/cmf/login 賬號(hào)密碼:admin/admin
先別急著操作,先配置兩個(gè)slave結(jié)點(diǎn)
3. 配置CDH的worker節(jié)點(diǎn)
以下為worker容器的準(zhǔn)備方式,若為多個(gè)時(shí),重復(fù)執(zhí)行以下步驟,創(chuàng)建多個(gè)worker節(jié)點(diǎn)
3.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 \ --restart always \ --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 \ --restart always \ --name cdh02.hadoop \ --privileged \ centos7-cdh \ /usr/sbin/init \ && docker ps
到這里正常的話我們就有三臺(tái)主機(jī)了
和之前的操作一樣,先安裝基本工具
上一步創(chuàng)建的所有容器均執(zhí)行,修改root的登錄密碼改為root
$ su root $ passwd $ root $ root
然后執(zhí)行
配置中文環(huán)境
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools && yum clean all
3.2 環(huán)境配置
配置中文環(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
這一步是必須要做的,因?yàn)閔adoop集群如果時(shí)間不同步會(huì)出現(xiàn)通訊失敗的情況
安裝ntp
yum install ntp -y
同步時(shí)間
ntpdate -u ntp1.aliyun.com
修改時(shí)區(qū)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
再創(chuàng)建一個(gè)定時(shí)任務(wù),用于定時(shí)同步時(shí)間(防止虛擬機(jī)停止后時(shí)間異常)
crontab -e# 添加0 */2 * * * /usr/sbin/ntpdate ntp1.aliyun.com
啟動(dòng)ntp服務(wù)
systemctl start ntpd && \ systemctl enable ntpd && \ date
配置MySQL JDBC
這里為了防止出錯(cuò),建議配置和master結(jié)點(diǎn)一樣的驅(qū)動(dòng),且不要帶版本號(hào)
mkdir -p /usr/share/java/
上傳驅(qū)動(dòng)即可
修改CM主機(jī)的host文件
這樣我們可以很方便的使用后面的名字訪問(wèn)這些主機(jī)
echo "172.10.0.3 cdh01.hadoop cdh01" >> /etc/hosts echo "172.10.0.4 cdh02.hadoop cdh02" >> /etc/hosts
這里我們還可以配置一下免密碼登錄
4. CM管理平臺(tái)創(chuàng)建CDH集群
4.1 登陸CM管理平臺(tái)
http://IP:7180/cmf/login 賬號(hào)密碼:admin/admin
歡迎界面:
此面一直點(diǎn)擊
繼續(xù)
,需要同意條款的同意條款
然后就可以來(lái)到集群安裝的歡迎界面
我們來(lái)安裝集群
選擇繼續(xù),并給集群起一個(gè)名字
設(shè)置主機(jī)地址: 172.10.0.[2-4]
選擇存儲(chǔ)
自定義存儲(chǔ)庫(kù):http://172.10.0.2/cloudera-repos
Jdk安裝
SSH憑據(jù),密碼為容器root用戶的登錄密碼,此處為root
安裝代理
安裝大數(shù)據(jù)組件
集群狀態(tài)檢查
集群設(shè)置
選擇你要安裝的組件
選擇好你要安裝的大數(shù)據(jù)組件,然后點(diǎn)繼續(xù)
這里如果選擇了hive之類的組件,需要在cm結(jié)點(diǎn)上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),可以用組件名命名
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; grant all privileges on scm.* to scm@'localhost' identified by '密碼'; grant all privileges on scm.* to scm@'%' identified by '密碼'; grant all privileges on hive.* to hive@'localhost' identified by '密碼'; grant all privileges on hive.* to hive@'%' identified by '密碼'; CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; grant all privileges on hue.* to hue@'%' identified by '密碼'; grant all privileges on hue.* to hue@'localhost' identified by '密碼2'; CREATE DATABASE rm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; grant all privileges on rm.* to rm@'localhost' identified by '密碼'; grant all privileges on rm.* to rm@'%' identified by '密碼'; flush privileges;
紅色表示必填的項(xiàng)目
Datanode-> /dfs/datanode
Namenode-> /dfs/namenode
HDFS檢查點(diǎn)-> /dfs/checkpoint
NodeManager 本地目錄-> /dfs/nodemanager
然后就等待集群構(gòu)建完成!
到此這篇關(guān)于docker搭建Hadoop CDH高可用集群實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker Hadoop CDH高可用集群內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。