1.环境准备

1.1 安装vagrant虚拟机

node01

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.hostname = "node01"
  config.vm.network "private_network", ip: "10.1.100.11"
  # 虚拟机配置
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "1024"
	vb.cpus = 2
  end
  # 初始化安装脚本
  config.vm.provision "shell", inline: <<-SHELL
    yum update
    yum install -y vim wget
	sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/'  /etc/ssh/sshd_config
	systemctl restart sshd	
	# 关闭防火墙
	systemctl stop firewalld.service 
	systemctl disable firewalld.service
	# 关闭selinux
	sed -i 's/enforcing/disabled/' /etc/selinux/config
	# 转发流量到iptables
	cat > /etc/sysctl.d/k8s.conf << EOF 
	net.bridge.bridge-nf-call-ip6tables = 1 
	net.bridge.bridge-nf-call-iptables = 1 
	EOF 
	sysctl --system
	# 开启时间同步
	yum install ntpdate -y 
	ntpdate time.windows.com
	# 时区
	timedatectl set-timezone Asia/Shanghai
	# 安装lrzsz命令
	yum install -y lrzsz
  SHELL
end

node02

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.hostname = "node02"
  config.vm.network "private_network", ip: "10.1.100.12"
  # 虚拟机配置
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "1024"
	vb.cpus = 2
  end
  # 初始化安装脚本
  config.vm.provision "shell", inline: <<-SHELL
    yum update
    yum install -y vim wget
	sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/'  /etc/ssh/sshd_config
	systemctl restart sshd	
	# 关闭防火墙
	systemctl stop firewalld.service 
	systemctl disable firewalld.service
	# 关闭selinux
	sed -i 's/enforcing/disabled/' /etc/selinux/config
	# 转发流量到iptables
	cat > /etc/sysctl.d/k8s.conf << EOF 
	net.bridge.bridge-nf-call-ip6tables = 1 
	net.bridge.bridge-nf-call-iptables = 1 
	EOF 
	sysctl --system
	# 开启时间同步
	yum install ntpdate -y 
	ntpdate time.windows.com
	# 时区
	timedatectl set-timezone Asia/Shanghai
	# 安装lrzsz命令
	yum install -y lrzsz
  SHELL
end

node03

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.hostname = "node03"
  config.vm.network "private_network", ip: "10.1.100.13"
  # 虚拟机配置
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "1024"
	vb.cpus = 2
  end
  # 初始化安装脚本
  config.vm.provision "shell", inline: <<-SHELL
    yum update
    yum install -y vim wget
	sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/'  /etc/ssh/sshd_config
	systemctl restart sshd	
	# 关闭防火墙
	systemctl stop firewalld.service 
	systemctl disable firewalld.service
	# 关闭selinux
	sed -i 's/enforcing/disabled/' /etc/selinux/config
	# 转发流量到iptables
	cat > /etc/sysctl.d/k8s.conf << EOF 
	net.bridge.bridge-nf-call-ip6tables = 1 
	net.bridge.bridge-nf-call-iptables = 1 
	EOF 
	sysctl --system
	# 开启时间同步
	yum install ntpdate -y 
	ntpdate time.windows.com
	# 时区
	timedatectl set-timezone Asia/Shanghai
	# 安装lrzsz命令
	yum install -y lrzsz
  SHELL
end

安装

# 分别创建三个目录node01、node02、node03,并把上面三个配置文件放入到其对应目录中执行下面命令
# 安装启动
vagrant up
# 进入当前安装系统,查看是否安装成功
vagrant ssh
1.2 修改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
1.3 安装docker
# 安装docker
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

# 配置docker yum源、开机启动、重启
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

# 补全工具
yum install -y bash-completion \
&& source /usr/share/bash-completion/completions/docker \
&& source /usr/share/bash-completion/bash_completion \
&& yum clean all
1.4 安装基本工具
yum install -y vim wget ntp net-tools \
&& yum clean all
1.5 关闭防火墙
systemctl stop firewalld \
&& systemctl disable firewalld \
&& systemctl status firewalld
1.6 设置selinux模式
setenforce 0 \
|| sed -i 's/enforcing/disabled/g' /etc/selinux/config \
&& sed -i 's/permissive/disabled/g' /etc/selinux/config \
&& getenforce
1.7 配置时间同步

配置文件

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

启动NTP服务

systemctl start ntpd \
&& systemctl enable ntpd \
&& ntpdate -u 0.cn.pool.ntp.org \
&& hwclock --systohc \
&& date
1.8 创建网络
docker network create --subnet=172.10.0.0/16 hadoop_net \
&& docker network ls
1.9 自制系统镜像

Dockerfile

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

同级目录执行下面命令,生成centos7镜像

docker build -t centos7-cdh .

解决警告Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

yum makecache fast
1.10 启动容器
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

2. 安装ClouderaManager

2.1 创建容器并修改root密码

进入第三步创建的容器中,并将root的登录密码改为root

docker exec –it {dockerId} /bin/bash
su root
passwd
root
root
2.2 安装基础环境
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools \
&& yum clean all
2.3 配置中文环境
(
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
2.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

启动NTP服务

systemctl start ntpd \
&& systemctl enable ntpd \
&& ntpdate -u 0.cn.pool.ntp.org \
&& hwclock --systohc \
&& date
2.5 准备MySQL安装包
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

# 离线下载安装包
docker cp mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar d1c71c8844be:/root/hadoop_CHD/mysql
2.6 准备MySQL驱动
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

# 离线下载安装包
docker cp mysql-connector-java-5.1.48.tar.gz d1c71c8844be:/root/hadoop_CHD/mysql
2.7 准备CDH安装包
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

docker cp allkeys.asc d1c71c8844be:/root/hadoop_CHD/cloudera-repos
docker cp cloudera-manager-agent-6.3.0-1281944.el7.x86_64.rpm d1c71c8844be:/root/hadoop_CHD/cloudera-repos
docker cp cloudera-manager-daemons-6.3.0-1281944.el7.x86_64.rpm d1c71c8844be:/root/hadoop_CHD/cloudera-repos
docker cp cloudera-manager-server-6.3.0-1281944.el7.x86_64.rpm d1c71c8844be:/root/hadoop_CHD/cloudera-repos
docker cp cloudera-manager-server-db-2-6.3.0-1281944.el7.x86_64.rpm d1c71c8844be:/root/hadoop_CHD/cloudera-repos
docker cp enterprise-debuginfo-6.3.0-1281944.el7.x86_64.rpm d1c71c8844be:/root/hadoop_CHD/cloudera-repos
docker cp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm d1c71c8844be:/root/hadoop_CHD/cloudera-repos
2.8 准备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

docker cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel d1c71c8844be:/root/hadoop_CHD/parcel
docker cp manifest.json d1c71c8844be:/root/hadoop_CHD/parcel
2.9 搭建本地源
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.10 安装jdk
cd /var/www/html/cloudera-repos/;rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
2.11 安装MySQL
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
2.12 数据库授权
(
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/'

执行脚本

mysql -uroot –p

执行

source /root/c.sql
2.13 安装MySQL驱动
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/
2.14 安装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
2.15 安装parcel
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/
2.16 初始化scm库
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 123456Aa.
2.17 启动cloudera manager服务
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"

3. 安装Woker节点

3.1 配置worker节点

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
3.2 安装基本工具
3.2.1 修改worker容器密码
docker exec –it {dockerId} /bin/bash
su root
passwd
root
root
3.2.2 安装工具
yum install -y kde-l10n-Chinese telnet reinstall glibc-common vim wget ntp net-tools \
&& yum clean all
3.2 配置中文环境
(
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 设置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

启动NTP服务

systemctl start ntpd \
&& systemctl enable ntpd \
&& ntpdate -u 0.cn.pool.ntp.org \
&& hwclock --systohc \
&& date
3.4 配置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/
3.5 修改CM主机的host文件
echo "172.10.0.3      cdh01.hadoop cdh01" >> /etc/hosts
echo "172.10.0.4      cdh02.hadoop cdh02" >> /etc/hosts
3.6 安装客户端异常

安装失败。 无法接收 Agent 发出的检测信号。请确保主机的名称已正确配置。请确保端口 7182 可在 Cloudera Manager Server 上访问(检查防火墙规则)。请确保正在添加的主机上的端口 9000 和 9001 空闲。检查正在添加的主机上 /var/log/cloudera-scm-agent/ 中的代理日志(某些日志可在安装详细信息中找到)。如果在 Cloudera Manager 中启用为代理使用 TLS 加密(管理 -> 设置 -> 安全),请确保 /etc/cloudera-scm-agent/config.ini 在正在添加的主机上有 use_tls=1。重启相应的代理,并单击此处的重试链接。

# 修改 /etc/cloudera-scm-agent/config.ini中use_tls为1
use_tls=1