CDH 安装部署


1.参考文档

https://blog.csdn.net/qq_39680564/article/details/100923644 https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_ig_custom_installation.html https://blog.csdn.net/ZZQHELLO2018/article/details/105161844/

2.服务器规划

IP 主机名 角色
192.168.28.29 cdh01.fjylwl.com
192.168.28.30 cdh02.fjylwl.com
192.168.28.32 cdh03.fjylwl.com

3.准备工作

#设置主机名,必须为FQDN(所有节点)

[root@cdh01 ~]# vi /etc/hosts
    192.168.28.29 cdh01.fjylwl.com cdh01 zk01
    192.168.28.30 cdh02.fjylwl.com cdh02 zk02
    192.168.28.32 cdh03.fjylwl.com cdh03 zk03
[root@cdh01 ~]# hostnamectl set-hostname cdh01.fjylwl.com
[root@cdh02 ~]# hostnamectl set-hostname cdh02.fjylwl.com
[root@cdh03 ~]# hostnamectl set-hostname cdh03.fjylwl.com
[root@cdh01 ~]# vi /etc/sysconfig/network
HOSTNAME=cdh01.fjylwl.com
[root@cdh02 ~]# vi /etc/sysconfig/network
HOSTNAME=cdh02.fjylwl.com
[root@cdh03 ~]# vi /etc/sysconfig/network
HOSTNAME=cdh03.fjylwl.com

#免密码登录

[root@cdh01 ~]# ssh-keygen -t rsa
[root@cdh01 ~]# ssh-copy-id cdh02.fjylwl.com
[root@cdh01 ~]# ssh-copy-id cdh03.fjylwl.com

[root@cdh01 ~]# scp /root/.ssh/authorized_keys cdh02:/root/.ssh
[root@cdh01 ~]# scp /root/.ssh/authorized_keys cdh03:/root/.ssh

#禁用防火墙(所有节点)

[root@cdh01 ~]# systemctl disable firewalld
[root@cdh01 ~]# systemctl stop firewalld

#关闭SELinux(所有节点)

[root@cdh01 ~]#setenforce 0
[root@cdh01 ~]# vi /etc/selinux/config
SELINUX=disabled

#设置集群始终同步ntp服务(所有节点)

[root@cdh01 ~]# yum install ntp -y
[root@cdh01 ~]# vim /etc/ntp.conf
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
[root@cdh01 ~]# systemctl start ntpd
[root@cdh01 ~]# systemctl enable ntpd

[root@cdh01 ~]# timedatectl set-timezone Asia/Shanghai

# 软件准备

# 建目录
[root@cdh01 ~]# mkdir -p /root/cloudera/{mysql,mysql-jdbc,parcel}
# mysql-jdbc
[root@cdh01 ~]# cd /root/cloudera/mysql-jdbc  
[root@cdh01 ~]#wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.47.tar.gz
# mysql-server
[root@cdh01 ~]#cd /root/cloudera/mysql/
#[root@cdh01 ~]#wget https://cdn.mysql.com//archives/mysql-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
[root@cdh01 ~]#wget https://tool-box.oss-cn-hangzhou.aliyuncs.com/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
# cdh6.3.2
[root@cdh01 ~]#cd /root/cloudera/parcel/
#[root@cdh01 ~]# wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
[root@cdh01 ~]# wget https://tool-box.oss-cn-hangzhou.aliyuncs.com/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
[root@cdh01 ~]# wget https://archive.cloudera.com/cdh6/6.3.2/parcels/manifest.json
# jdk
[root@cdh01 ~]# wget https://tool-box.oss-cn-hangzhou.aliyuncs.com/jdk-8u111-linux-x64.tar.gz

# JDK服务(所有节点,可使用cm里的java包安装)和mysql-connector

# 下载mysql-coonector,jdk
[root@cdh01 ~]# tar xvf jdk-8u111-linux-x64.tar.gz
[root@cdh01 ~]# mv jdk1.8.0_111 /usr/java/
[root@cdh01 ~]# mkdir /usr/share/java/
[root@cdh01 ~]# cd /root/cloudera/mysql-jdbc  && tar zxf mysql-connector-java-5.1.47.tar.gz && cd mysql-connector-java-5.1.47
[root@cdh01 ~]# cp mysql-connector-java-5.1.47-bin.jar /usr/share/java/mysql-connector-java.jar
[root@cdh01 ~]# echo 'export JAVA_HOME=/usr/java/jdk1.8.0_111' >> /etc/profile
[root@cdh01 ~]# echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
[root@cdh01 ~]# echo 'export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'  >> /etc/profile
[root@cdh01 ~]# source /etc/profile
[root@cdh01 ~]# java -version

#mysql 安装

#卸载自带的mariadb
[root@cdh01 ~]#yum -y remove mariadb-libs
[root@cdh01 ~]#rm -rf  /var/lib/mysql
[root@cdh01 ~]#tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
[root@cdh01 ~]#yum install -y libaio \
&& 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
# 配置my.cnf
[root@cdh01 ~]#echo character-set-server=utf8 >> /etc/my.cnf
如果mysql root 密码忘记了
[root@cdh01 ~]#echo skip-grant-tables >> /etc/my.cnf
[root@cdh01 ~]#systemctl restart mysqld 
mysql> update user set authentication_string=password('123456') where user='root';
#[root@cdh01 ~]#systemctl enable mysqld && systemctl start mysqld 
[root@cdh01 ~]#systemctl enable mysqld && systemctl start mysqld && grep password /var/log/mysqld.log | sed 's/.*\(............\)$/\1/'

[root@cdh01 ~]#mysql -uroot -p
mysql> alter user "root"@"localhost" identified by "1234qwerDFG...";

#建库

[root@cdh01 ~]#vim /root/d.sql
set password for root@localhost = password('abcd123456QAZ');
grant all privileges on *.* to 'root'@'%' identified by 'abcd123456QAZ';
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 'abcd123456QAZ';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'abcd123456QAZ';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'abcd123456QAZ';
SHOW DATABASES;
mysql>source /root/d.sql
# 若提示Your password does not satisfy the current policy requirements
set global validate_password_policy=0;
set global validate_password_length=1;

4.安装

#制作本地yum源

[root@cdh01 ~]# yum install httpd
[root@cdh01 ~]# systemctl start httpd
## CM6.3.1 仓库
#[root@cdh01 ~]# wget https://archive.cloudera.com/cm6/6.3.1/repo-as-tarball/cm6.3.1-redhat7.tar.gz
[root@cdh01 ~]# wget https://tool-box.oss-cn-hangzhou.aliyuncs.com/cm6.3.1-redhat7.tar.gz
[root@cdh01 ~]# mkdir -pv /var/www/html/cm6.3.1
[root@cdh01 ~]# tar -zxf cm6.3.1-redhat7.tar.gz -C /var/www/html/
[root@cdh01 ~]# yum install createrepo -y
[root@cdh01 ~]# cd /var/www/html/cm6.3.1
[root@cdh01 ~]#wget https://archive.cloudera.com/cm6/6.3.1/allkeys.asc
[root@cdh01 ~]# createrepo .
[root@cdh01 ~]# vi /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager, Version cm6.3.1
baseurl = http://192.168.28.29/cm6.3.1
gpgcheck = 1

##URL: http://cdh01.ylwl.com/cdh6.3.2
##URL: http://cdh01.ylwl.com/cm6.3.1
[root@cdh01 ~]# yum clean all
[root@cdh01 ~]# yum makecache
[root@cdh01 ~]# scp /etc/yum.repos.d/cloudera-manager.repo cdh02:/etc/yum.repo.d/
[root@cdh01 ~]# scp /etc/yum.repos.d/cloudera-manager.repo cdh03:/etc/yum.repo.d/

# 安装Cloudera Manager

# 需要有java环境才能安装下面的服务
[root@cdh01 ~]# yum install -y cloudera-manager-daemons  cloudera-manager-server
[root@cdh01 ~]#rpm --import http://192.168.28.29/cm6.3.1/RPM-GPG-KEY-cloudera # 导入key (每台都要操作)
[root@cdh02 ~]# yum install -y cloudera-manager-daemons  #(每个节点都要安装)
[root@cdh03 ~]# yum install -y cloudera-manager-daemons #(每个节点都要安装)

# 配置本地Parcel 存储库

[root@cdh01 ~]# cp -a /root/cloudera/parcel/* /opt/cloudera/parcel-repo
[root@cdh01 ~]# cd /opt/cloudera/parcel-repo/
[root@cdh01 ~]# 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
[root@cdh01 ~]# chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/*

# 配置远程Parcel 存储库(后面web界面安装会用到)

## CDH 6.3.2 仓库
[root@cdh01 ~]# mkdir -pv /var/www/html/cdh6.3.2 
[root@cdh01 ~]# cp -a /root/cloudera/parcel/* /var/www/html/cdh6.3.2
[root@cdh01 ~]#cd /var/www/html/cdh6.3.2 
[root@cdh01 ~]# 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
## URL: http://192.168.28.29/cdh6.3.2

#初始化数据库

# 执行scm_prepare_database.sh脚本
[root@cdh01 ~]# /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm abcd123456QAZ

# 启动CM

[root@cdh01 ~]# systemctl start cloudera-scm-server
[root@cdh01 ~]# tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log #观察启动是否成功
## 出现INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server则启动成功

访问http://192.168.28.29:7180

账号密码为admin/admin

5. 初始化CM

6.FAQ

#若首次安装过程中出错,建议删除重来

# 所有节点都要操作
rpm -e cloudera-manager-agent 
rpm -e cloudera-manager-server
rpm -e cloudera-manager-daemons
umount  cm_processes
umount  cm_processes
rm -rf /etc/cloudera-scm-* /var/lib/cloudera-scm-* /var/log/cloudera-scm-* /run/cloudera-scm-*
rm -rf /opt/cloudera
# 重建数据库scm
drop database scm;
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 下面步骤需要等主节点的 scm服务安装完成
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 1234qwerDFG...
# 再次启动服务
[root@cdh01 ~]# systemctl start cloudera-scm-server
[root@cdh01 ~]# tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log #观察启动是否成功
## 出现INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server则启动成功
# 删除hdfs的数据目录(所有节点都要操作)
[root@cdh01 ~]# rm -rf /fjyl/dfs/*
  • 安装cloudera-manager-daemons 报错
    Total size: 1.1 G
    Installed size: 1.3 G
    Downloading packages:
    warning: /var/cache/yum/x86_64/7/cloudera-manager/packages/cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID b0b19c9f: NOKEY
    Public key for cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm is not installed
    # 导入下面的key即可
    [root@cdh04 ~]#rpm --import http://192.168.28.29/cm6.3.1/RPM-GPG-KEY-cloudera # 导入key
    [root@cdh04 ~]#yum install -y cloudera-manager-daemons
    
  • 未在已配置的存储库中找到任何 parcel。尝试在更多选项下添加一个自定义存储库。否则,您可能只能继续使用包。

注意: Parcle默认存储目录 /opt/cloudera/parcels 本地存放目录: 默认/opt/cloudera/parcel-repo

cd /opt/cloudera/parcel-repo
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.sha1
chown -R cloudera-scm.cloudera-scm /opt/cloudera/parcel-repo
# 重启server
systemctl restart cloudera-scm-server
  • 在集群新增主机

这里显示很慢只有几百k的速度,实际上速度很快,CDH源是通过本地内网传输的

  • 安装hdfs 时 datanode 起不来 java.io.FileNotFoundException: File file:/fjyl/data/hadoop/dfs/disk07/dfs/dn does not exist

原因是没有有权限,虽然dfs/dn 是hdfs hadoop 的权限,但是/fjyl/data/hadoop/dfs/disk07 确实root权限

chown -R hdfs.hadoop /fjyl/data # 删掉hdfs 重新来就可以了
  • 安装完yarn 之后,过一段时间变成红色 经过查看也是因为权限问题,安装完后是root 权限,yarn 自己就没有权限写了

    chown -R yarn.hadoop  /fjyl/data/hadoop/dfs/disk0*/yarn
    chown -R hdfs.hadoop  /fjyl/data/hadoop/dfs/disk0*/dfs
    
  • scm数据库初始化不了

[root@cdh01 ~]# /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm abcd123456QAZ JAVA_HOME=/usr/java/jdk1.8.0_111 Verifying that we can write to /etc/cloudera-scm-server Creating SCM configuration file in /etc/cloudera-scm-server Executing: /usr/java/jdk1.8.0_111/bin/java -cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/opt/cloudera/cm/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db. [ main] DbCommandExecutor INFO No MySQL server running on host 'localhost'. [ main] DbCommandExecutor ERROR Error when connecting to database. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

原因是/etc/hosts 文件少了 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4