赞
踩
该文档主要记录大数据平台的搭建CDH版的部署过程,以供后续部署环境提供技术参考。
目前主流的hadoop平台部署方法主要有以下三种:
1、CDH比apache在兼容性、安全性、稳定性上有增强;
2、CDH比apache更新速度快;
3、CDH支持kerberos安全认证;
4、CDH文档清晰;
5、CDH支持yum/apt包;
6、CDH可以联网安装、升级比较方便(网上建议下载安装,联网安装有坑);
7、CDH自动下载依赖软件包;
8、CDH自动匹配hadoop生态系统中的包,不需要自己寻找hbase、hive等软件包,也不用考虑兼容性问题,CDH自动匹配相应版本;
9、CDH自动创建相关的目录,并自动创建hdfs、mapred用户;
手工部署: 需要配置太多参数,配置繁琐,建议初学者部署方式
工具部署: 比如Ambari和clouder Manger当前两大最主流的集群管理工具,前者是Hortonworks公司,后者是Cloudera公司)使用工具来,可以说是一键操作,难点都在工具Ambari或Cloudera Manger本身部署上。
两种部署方式的优缺点如下表1所示:
表1-1:手工方式和工具部署方式比较
内容 | 手工方式 | 工具方式 |
---|---|---|
难易度 | 难,几乎不可能成功 | 简单 易行 |
兼容性 | 自己解决兼容性的问题 | 自动安装兼容组件 |
组件支持数 | 支持全部组件 | 支持常用组件 |
优点 | 对组件和集群管理深刻 | 简单 容易 可行 |
缺点 | 太复杂,不可能成功 | 屏蔽太多的细节,妨碍对组件的理解 |
CDH和DHP比较如下表1-2所示
表1-2:CDH和DHP部署方式比较,如表2所示:
工具名 | 所属机构 | 开源性 | 社区 | 易用及稳定性 | 占有率 |
---|---|---|---|---|---|
Cloudera Manger | Cloudera | 商用 | 不支持 | 易用,稳定 | 高 |
Ambari | Hortonwork | 开源 | 支持 | 较易用,较稳定 | 较高 |
本节主要描述部署CDH系统环境配置及前期准备工作
Cloudera在前天12月19日,对外宣布正式发布Cloudera Enterprise 6.1包含大数据生态版本如下:
1.组件版本:Kafka 2.0, Spark 2.4, HBase 2.1.1, Accumulo 1.9.2, SOLR 7.4
2.CDH免费版限制100个节点内
3.HDFS的纠删码完全支持,包括Hive,Navigator(auditing),BDR,MR,Spark
4.对象存储支持:On-prem (Ceph), Cloud (ADLS gen 2)
5.Impala的多个distinct语句支持
6.Sqoop的HiveServer2与导入Parquet文件支持
7.OpenJDK支持
CDH 部署基本要求
软件版本选择
类目 | 命令 | 版本 | 下载地址 |
---|---|---|---|
操作系统 | cat /etc/redhat-release | CentOS Linux release 7.9.2009 (Core) | 使用阿里云镜像下载 |
Mysql数据库 | select version() | mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar | yum源安装 |
JDK | java -version | jdk-8u162-linux-x64.rpm | Oracle 官网下载 |
Cloudera Manager | Cloudera Manager 6.0.1 | 官方仓库 | |
CDH | CDH目前支持100台免费支持 | CDH 6.2.1 | 使用parcels安装 |
核心 | cat /proc/cpuinfo | grep “cpu cores” |uniq | ||
内存大小 | cat /proc/meminfo |
首先准备三台虚拟机,虚拟机ip地址可以ping通。
ip | 域名 | 核心 | 存储 | 内存大小 | 角色 |
---|---|---|---|---|---|
192.168.8.110 | cdh1 | 8 | 30G | 8G | cm-server/agent /jdk/mysql |
192.168.8.111 | cdh2 | 4 | 10G | 4G | agent /jdk |
192.168.8.112 | cdh3 | 4 | 10G | 4G | agent /jdk |
cat > /etc/sysconfig/network-scripts/ifcfg-ens33<<EOF
TYPE="Ethernet"
BOOTPROTO="static"
PROXY_METHOD="none"
DEFROUTE="yes"
BROWSER_ONLY="no"
ONBOOT="yes"
PEERDNS="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
UUID="2a657b0d-e842-411e-9933-d99717dcc361"
DEVICE="ens33"
NAME="ens33"
DNS1="114.114.114.114"
DNS2="8.8.8.8"
IPADDR="192.168.8.110"
GATEWAY="192.168.8.2"
NETMASK="255.255.255.0"
EOF
sed -i 's/110/111/' /etc/sysconfig/network-scripts/ifcfg-ens33 &> /dev/null
systemctl restart network
yum update -y
yum search ifconfig
yum install net-tools
yum -y install vim
保证之间可以通过openssh协议传输脚本进行管理
#分别修改主机名
hostnamectl set-hostname cdh1
hostnamectl set-hostname cdh2
hostnamectl set-hostname cdh3
[root@localhost ~]# hostnamectl set-hostname cdh3
[root@localhost ~]# su
[root@cdh3 ~]# hostname
cdh3
#在三台主机上都执行
[root@localhost ~]# cat >> /etc/hosts << EOF
192.168.8.110 cdh1.example.com cdh1
192.168.8.111 cdh2.example.com cdh2
192.168.8.112 cdh3.example.com cdh3
EOF
#将主机印射发送给其他节点
[root@localhost ~]# for i in cdh{2..3}; do scp /etc/hosts root@$i:/etc/hosts ; done
hosts 100% 321 184.7KB/s 00:00
hosts 100% 321 172.3KB/s 00:00
在master节点在线安装ansible
cdh1 192.168.8.110 Centos7.9 主控机
cdh2 192.168.8.111 Centos7.9 受控机
cdh3 192.168.8.112 Centos7.9 受控机
yum -y install epel-release #从epel源安装高版本 ansible
yum list | grep ansible #查看可用ansible包版本
yum -y install ansible #安装ansible
ansible --version #查看Ansible版本
离线安装
cd /opt/cdh/ansible/
rpm -ivh libyaml-0.1.4-11.el7_0.x86_64.rpm
rpm -ivh python2-cryptography-1.7.2-2.el7.x86_64.rpm
rpm -ivh python2-httplib2-0.18.1-3.el7.noarch.rpm
rpm -ivh python2-jmespath-0.9.4-2.el7.noarch.rpm
rpm -ivh python2-pyasn1-0.1.9-7.el7.noarch.rpm
rpm -ivh python-babel-0.9.6-8.el7.noarch.rpm
rpm -ivh python-backports-1.0-8.el7.x86_64.rpm
rpm -ivh python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm
rpm -ivh python-cffi-1.6.0-5.el7.x86_64.rpm
rpm -ivh python-enum34-1.0.4-1.el7.noarch.rpm
rpm -ivh python-idna-2.4-1.el7.noarch.rpm
rpm -ivh python-paramiko-2.1.1-9.el7.noarch.rpm
rpm -ivh python-ipaddress-1.0.16-2.el7.noarch.rpm
rpm -ivh python-jinja2-2.7.2-4.el7.noarch.rpm
rpm -ivh python-markupsafe-0.11-10.el7.x86_64.rpm
rpm -ivh python-ply-3.4-11.el7.noarch.rpm
rpm -ivh python-pycparser-2.14-1.el7.noarch.rpm
rpm -ivh python-setuptools-0.9.8-7.el7.noarch.rpm
rpm -ivh PyYAML-3.10-11.el7.x86_64.rpm
rpm -ivh sshpass-1.06-2.el7.x86_64.rpm
rpm -ivh ansible-2.9.10-1.el7.noarch.rpm
ansible --versions
#master节点做root用户无密钥认证
[root@cdh1 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[root@cdh1 ~]# for i in {0,1,2}; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.8.11$i ; done
或者
[root@cdh1 ~]# scp id_rsa.pub root@192.168.8.111:/root/.ssh/authorized_keys
将所有的公钥导入authorized_keys 分发到 所有的 机器的.ssh/ 下面
然后测试
#/etc/ansible/ 下有两个文件ansible.cfg、hosts,一个文件夹roles
[root@cdh1 ~]# ls /etc/ansible/
ansible.cfg hosts roles
//添加 被管控主机ip
[root@cdh1 ~]# cat >> /etc/ansible/hosts << EOF
[cdhnode]
192.168.8.[110:112]
EOF
[root@cdh1 ~]# ansible all --list #查看所有主机列表
hosts (3):
192.168.8.110
192.168.8.111
192.168.8.112
[root@cdh1 ~]# ansible "cdhnode" -m ping #尝试访问"node"组下所有ip
192.168.8.111 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.8.112 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.8.110 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@cdh1 ~]#
[root@cdh1 ~]# ansible cdhnode -m shell -a 'yum install ntpdate -y'
[root@cdh1 ~]# ansible cdhnode -m shell -a 'ntpdate cn.ntp.org.cn'
[root@cdh1 ~]# ansible cdhnode -m shell -a 'date -s "2020 09:27:00" && hwclock --systohc'
[root@cdh1 ~]# ansible cdhnode -m shell -a 'date "+%Y-%m-%d %H:%M:%S"'
[root@cdh1 ~]# ansible cdhnode -m shell -a 'cat /etc/hosts'
#如果不一致将主机印射发送给其他节点
[root@cdh1 ~]# for i in cdh{2..3}; do scp /etc/hosts root@$i:/etc/hosts ; done
hosts 100% 272 162.4KB/s 00:00
hosts 100% 272 165.3KB/s 00:00
# 操作NTP常用指令
启动指令:service ntpd start
重启指令:service ntpd restart
停止指令:service ntpd stop
开机自启动指令:systemctl enable ntpd.service
查看服务状态指令:systemctl status ntpd.service
#查看ntp服务
(1)查看当前节点同步的时间服务器。
查看指令:ntpq -p
(2)查看节点与时间同步服务器的偏差时间
查看指令:ntpdc -c loopinfo
(3)查看ntp状态
查看指令:ntpstat
# 修改时区为本地时区
修改指令:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
yum install ntp
如果已经配置ntp服务器则不用配置
下面主要是配置内网的NPTD服务器(192.168.1.135), NTPD服务配置核心/etc/ntp.conf文件,配置好了就OK。需要修改的地方都备注了,一共4处,其他的是默认。
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
# 01修改开始---->允许内网其他机器同步时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 01修改结束---->允许内网其他机器同步时间
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 02修改开始----->中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn
server 210.72.145.44 perfer # 中国国家受时中心
server 202.112.10.36 # 1.cn.pool.ntp.org
server 59.124.196.83 # 0.asia.pool.ntp.org
# 02修改结束----->中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
# allow update time by the upper server
# 03修改开始---->允许上层时间服务器主动修改本机时间
restrict 210.72.145.44 nomodify notrap noquery
restrict 202.112.10.36 nomodify notrap noquery
restrict 59.124.196.83 nomodify notrap noquery
# 03修改结束---->允许上层时间服务器主动修改本机时间
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
# 04修改开始----->外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
# 04修改结束----->外部时间服务器不可用时,以本地时间作为时间服务
# Enable public key cryptography.
#crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
ntpdate -u 202.112.10.36
chkconfig ntpd on
service ntpd start
在nptd客户端上配置/etc/ntp.conf文件,信息如下,需要修改的地方有3处,备注了,其它默认:
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
# 01修改开始----->配置时间服务器为本地的时间服务器
server 192.168.1.135
# 01修改结束----->配置时间服务器为本地的时间服务器
# 02修改开始----->
restrict 192.168.1.135 nomodify notrap noquery
# 02修改结束----->
# 03修改开始------>
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
# 03修改结束------->
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
手动执行nptdate命令,第一次与ntpd服务端手动同步时间:
ntpdate -u 192.168.0.135
如果执行后提示:no server suitable for synchronization found
那么就执行以下命令,然后重新执行上面同步时间命令:
ntpdate -d 192.168.0.135
客户端启动ntpd服务;
设置ntpd服务为开机自启;
将一个客户端中的/etc/ntp.conf文件复制到集群其它节点的客户端上,分别手动同步时间,启动ntpd服务即可;
ansible cdhnode -m shell -a 'systemctl is-enabled firewalld.service'
所有节点都要配置:
yum install -y firewall* iptable*
(1) 关闭firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state
# firewall-cmd --query-port=3306/tcp #查看3306端口是否开放
# firewall-cmd --permanent --add-port=3306/tcp #开放3306端口
# firewall-cmd --list-all #查看目前防火墙
(2) 关闭iptables
iptables -F
systemctl stop iptables.service
systemctl disable iptables.service
(3) 禁用 selinux
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0
getenforce 0
sestatus
重启机器
reboot
#上传rpm包到/tmp目录下
ansible cdhnode -m copy -a 'src=/root/jdk-8u241-linux-x64.rpm dest=/root/ backup=no'
#所有节点都进行安装
ansible cdhnode -m shell -a 'rpm -ivh /root/jdk-8u241-linux-x64.rpm'
ansible cdhnode -m shell -a 'java -version'
-------------------------------------------------
rpm -qa | grep java
rpm -e –nodeps java-x.x.x-gcj-compat-x.x.x.x-xxjpp.xxx #卸载
# yum search java | grep -i --color JDK yum install -y java-1.8.0-openjdk.x86_64
rpm -ivh jdk-8u241-linux-x64.rpm
wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
mkdir /usr/local/java/
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/java/
rpm –qa | grep java
rpm –e –nodes java-version #卸载系统自带的jdk
#所有节点都安装
cat >> /etc/profile << EOF
# set java environment
JAVA_HOME=/usr/java/jdk1.8.0_181
JRE_HOME=/usr/java/jdk1.8.0_181/jre
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
export LC_ALL="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
EOF
source /etc/profile #生效
ln -s /usr/local/java/bin/java /usr/bin/java
# 卸载系统安装的 mysql 或 mariadb 依赖
rpm -qa | grep mysql
rpm -qa | grep mariadb
rpm -e --nodeps xxx
# 1、下载官方安装包
mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
官方链接:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
# 2、在/usr/local目录下创建mysql文件夹
mkdir /usr/local/mysql
3、上传mysql安装包,这里可以采用FTP进行上传。
#解压 tar 文件
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
[root@cdh1 ~]# ls
anaconda-ks.cfg
mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
mysql-community-client-5.7.26-1.el7.x86_64.rpm
mysql-community-common-5.7.26-1.el7.x86_64.rpm
mysql-community-devel-5.7.26-1.el7.x86_64.rpm
mysql-community-embedded-5.7.26-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.26-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.26-1.el7.x86_64.rpm
mysql-community-libs-5.7.26-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
mysql-community-server-5.7.26-1.el7.x86_64.rpm
mysql-community-test-5.7.26-1.el7.x86_64.rpm
#安装 mysql 组件,顺序如下:
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.19-1.el7.x86_64.rpm
---------------------------------------------------------------
#在安装 mysql-community-server 的时候可能出现没有依赖包的
问题,可安装以下依赖包:
yum -y install libaio
yum -y install net-tools
yum -y install perl
#启动数据库:
service mysqld status
service mysqld start
service mysqld stop
service mysqld restart
systemctl enable mysqld
#查看临时密码
grep password /var/log/mysqld.log
2019-06-12T16:43:10.889769Z 1 [Note] A temporary password is generated for
root@localhost: m*dj,/P_j6v>
#登陆 mysql 并修改密码,一定要加单引号
mysql -uroot -p'm*dj,/P_j6v>'
----------------------------------
set global validate_password_policy=LOW;
set global validate_password_policy =0;
set global validate_password_length = 6;
set password = password("123456");
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
grant all privileges on *.* to root@'%' identified by '123456' with grant option;
flush privileges;
quit;
#上面若设置密码不成功,报错如下:
mysql> set password = PASSWORD('123456');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
执行下面这几步:
这个其实与validate_password_policy的值有关。
执行下面命令 修改 即可
mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_policy =0;
Query OK, 0 rows affected (0.04 sec)
mysql> set global validate_password_length = 6;
Query OK, 0 rows affected (0.00 sec)
mysql> SET PASSWORD = PASSWORD('your new password'); #然后重新 执行命令
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER
mysql> flush privileges;
mysql> quit
#设置远程连接
mysql -u root -p
grant all privileges on *.* to root@'%' identified by '123456' with grant option;
flush privileges;
rpm -qa | grep mysql #查看本地mysql数据库
rpm -e mysql-libs-5.1.61-4.el6.x86_64 --nodeps #卸载本系统mysql
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz #下载mysql
tar -zxvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.11-linux-glibc2.5-x86_64 /usr/local/mysql
userdel -r mysql
groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql
mkdir -p /data/mysql
chown mysql:mysql -R /data/mysql
[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set=utf8mb4
[mysqld]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-slave-start
skip-external-locking
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
query_cache_size= 32M
max_allowed_packet = 16M
myisam_sort_buffer_size=128M
tmp_table_size=32M
table_open_cache = 512
thread_cache_size = 8
wait_timeout = 86400
interactive_timeout = 86400
max_connections = 1000
# Try number of CPU's*2 for thread_concurrency
#thread_concurrency = 32
#isolation level and default engine
default-storage-engine = INNODB
transaction-isolation = READ-COMMITTED
server-id = 1739
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/hostname.pid
#open performance schema
log-warnings
sysdate-is-now
binlog_format = ROW
log_bin_trust_function_creators=1
log-error = /usr/local/mysql/data/hostname.err
log-bin = /usr/local/mysql/arch/mysql-bin
expire_logs_days = 7
innodb_write_io_threads=16
relay-log = /usr/local/mysql/relay_log/relay-log
relay-log-index = /usr/local/mysql/relay_log/relay-log.index
relay_log_info_file= /usr/local/mysql/relay_log/relay-log.info
log_slave_updates=1
gtid_mode=OFF
enforce_gtid_consistency=OFF
# slave
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
#other logs
#general_log =1
#general_log_file = /usr/local/mysql/data/general_log.err
#slow_query_log=1
#slow_query_log_file=/usr/local/mysql/data/slow_log.err
#for replication slave
sync_binlog = 500
#for innodb options
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
innodb_log_group_home_dir = /usr/local/mysql/arch
innodb_log_files_in_group = 4
innodb_log_file_size = 1G
innodb_log_buffer_size = 128M
#根据生产需要,调整pool size
innodb_buffer_pool_size = 2048M
#innodb_additional_mem_pool_size = 50M #deprecated in 5.6
tmpdir = /usr/local/mysql/tmp
innodb_lock_wait_timeout = 1000
#innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 2
innodb_locks_unsafe_for_binlog=1
#innodb io features: add for mysql5.5.8
performance_schema
innodb_read_io_threads=4
innodb-write-io-threads=4
innodb-io-capacity=200
#purge threads change default(0) to 1 for purge
innodb_purge_threads=1
innodb_use_native_aio=on
#case-sensitive file names and separate tablespace
innodb_file_per_table = 1
lower_case_table_names=1
# 因为配置hive连接数据库问题,暂时停掉GTID模式
gtid_mode = off
enforce_gtid_consistency = off
[mysqldump]
quick
max_allowed_packet = 128M
[mysql]
no-auto-rehash
default-character-set=utf8mb4
[mysqlhotcopy]
interactive-timeout
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
#选择所有节点都上传,/root/mysql-connector-java-5.1.47.jar
#创建目录/usr/share/java/
[root@cdh2 mysql]# ansible cdhnode -m shell -a 'mkdir -p /usr/share/java/'
#上传jar包到/tmp目录下
ansible cdhnode -m copy -a 'src=/root/mysql-connector-java-5.1.47.jar dest=/usr/share/java/mysql-connector-java.jar backup=no'
ansible cdhnode -m shell -a 'ls -l /usr/share/java/mysql-connector-java.jar'
集群内各节点服务器上下载如下依赖,如果不下载这些依赖,使用cdh安装的时候会报各种各样的错误。
yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb
A、找到离线软件下载页面:
访问官网:https://www.cloudera.com/
B、下载离线软件包:
点击上个步骤中找到的离线软件下载页面,然后进入到RPMS/x86_64/中,下载其中除了jdk以外的所有rpm文件:
还需要在离线软件下载页面下载rpm的url地址后面的几个路径去掉,即:redhat6/yum/RPMS/x86_64,从而进入到该版本软件的根目录下载allkeys.asc文件:
yum -y install httpd
service httpd start
service httpd status
systemctl enable httpd
chkconfig httpd on #开机自启httpd服务
在CM的主节点上,将下载好的CM相关的rpm文件上传到服务器中对应文件夹中。
cd /var/www/html/
mkdir -p /var/www/html/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
将cm6下面6个文件,上传到/var/www/html/cm6/6.2.1/redhat7/yum/RPMS/x86_64/目录下
[root@cdh1 /var/www/html]# ls /var/www/html/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
cloudera-manager-agent-6.2.1-1426065.el7.x86_64.rpm
cloudera-manager-daemons-6.2.1-1426065.el7.x86_64.rpm
cloudera-manager-server-6.2.1-1426065.el7.x86_64.rpm
cloudera-manager-server-db-2-6.2.1-1426065.el7.x86_64.rpm
enterprise-debuginfo-6.2.1-1426065.el7.x86_64.rpm
oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
#浏览器登录验证
http://192.168.8.110/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
cd /var/www/html/
mkdir -p /var/www/html/cm6/6.2.1/parcels/
#将cdh6下面3个文件,上传到/var/www/html/cm6/6.2.1/parcels/目录下
ls /var/www/html/cm6/6.2.1/parcels/
CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel
CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha1
CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha256
#将allkeys.asc文件上传到/var/www/html/cm6/6.2.1/目录下
[root@cdh1 /var/www/html]# ls /var/www/html/cm6/6.2.1/
allkeys.asc parcels redhat7
[root@cdh1 /var/www/html]#
#访问测试:http://192.168.8.110/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
curl http://cdh1/cm6/6.2.1/allkeys.asc
curl http://cdh1/cm6/6.2.1/parcels/
curl http://cdh1/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
#本地目录与官网目录对应yum正确找到
https://archive.cloudera.com/cm6/6.2.1/allkeys.asc
https://archive.cloudera.com/cdh6/6.2.1/parcels/
https://archive.cloudera.com/cm6/6.2.1/redhat7/yum/RPMS/x86_64/
#生成RPM元数据repodata不是下载的是生成的(失败)
yum install -y createrepo
cd /var/www/html/cm6/6.2.1/redhat7/yum
createrepo .
-----------------------------------------------------------------
[root@cdh1 /var/www/html/cm6/6.2.1/redhat7/yum]# createrepo .
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 1 pkgs
Spawning worker 2 with 1 pkgs
Spawning worker 3 with 1 pkgs
Spawning worker 4 with 1 pkgs
Spawning worker 5 with 1 pkgs
Spawning worker 6 with 0 pkgs
Spawning worker 7 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
#每台机器上都配置repo源
cat >> /etc/yum.repos.d/cloudera-manager.repo << EOF
[cloudera-manager]
name=Cloudera Manager
baseurl=http://cdh1/cm6/6.2.1/redhat7/yum/
gpgcheck=0
enabled=1
EOF
yum clean all && yum makecache #清yum缓存;生成缓存;
yum list | grep cloudera
按照找CM离线软件包下载页面的步骤找到CDH离线软件包下载页面:
上传CDH的Parcel文件
将下载的CDH Parcel文件上传到CM主节点的/opt/cloudera/parcel-repo文件夹中。
修改.sha1格式的文件为.sha,因为.sha1为哈希文件,如果不重命名为.sha后面从本地读取CDH软件包会失败,因为找不到.sha哈希文件。
# 所有的master主节点操作
yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-serve
# 所有的datanode节点
yum install -y cloudera-manager-daemons cloudera-manager-agent
#所有节点修改agent的配置,指向server的节点cdh1
sed -i "s/server_host=localhost/server_host=cdh1/g" /etc/cloudera-scm-agent/config.ini
----------------------------------------------------------
ansible cdhnode -m shell -a 'sed -i "s/server_host=localhost/server_host=cdh1/g" /etc/cloudera-scm-agent/config.ini'
在CM集群所有节点上操作:
将mysql-connector-java-5.1.47-bin.jar(推荐使用5.1的较高版本的驱动jar包)文件上传至CM Server节点上的/usr/share/java/目录下并重命名为mysql-connector-java.jar(如果/usr/share/java/目录不存在,需要手动创建)。
设置元数据库为mysql--前提是安装ClouderaManager Server服务
/opt/cloudera/cm/schema/scm_prepare_database.sh -h localhost mysql cmf cmf 123456
旧版本:/usr/share/cmf/schema/scm_prepare_database.sh -h 地址 mysql 数据库 用户 密码
提示ERROR JDBC Driver com.mysql.jdbc.Driver not found.
#需要上传mysql驱动包jar到/opt/cloudera/cm/lib目录下。
[root@cdh1 ~]# cp /usr/share/java/mysql-connector-java.jar /opt/cloudera/cm/lib/
[root@cdh1 ~]# ls /opt/cloudera/cm/lib/ | grep mysql
mysql-connector-java.jar
根据所需要安装的服务参照下表创建对应的数据库以及数据库用户,数据库必须使用utf8编码,创建数据库时要记录好用户名及对应密码:
服务名 | 数据库名 | 用户名 |
---|---|---|
Cloudera Manager Server服务对应的数据库和用户 | scm | scm |
Activity Monitor服务对应的数据库和用户 | amon | amon |
Reports Manager服务对应的数据库和用户 | rman | rman |
Hue服务对应的数据库和用户 | hue | hue |
Hive Metastore Server服务对应的数据库和用户 | metastore | hive |
Sentry Server服务对应的数据库和用户 | sentry | sentry |
Cloudera Navigator Audit Server服务对应的数据库和用户 | nav | nav |
Cloudera Navigator Metadata Server服务对应的数据库和用户 | navms | navms |
Oozie服务对应的数据库和用户 | oozie | oozie |
先创建4个数据库及对应用户:scm、amon、rman、metastore;
在mysql数据库中创建CDH需要的各种数据库/参考2.8.4:
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
在mysql中创建CDH连接不同数据库对应的用户:
create user 'scm'@'%' identified by '123456';
create user 'amon'@'%' identified by '123456';
create user 'rman'@'%' identified by '123456';
create user 'hive'@'%' identified by '123456';
在mysql中授权CDH不同连接数据库用户对应的数据库:
GRANT ALL ON scm.* TO 'scm'@'%';
GRANT ALL ON amon.* TO 'amon'@'%';
GRANT ALL ON rman.* TO 'rman'@'%';
GRANT ALL ON metastore.* TO 'hive'@'%';
CM主节点上包含一个配置数据库的脚本。
mysql数据库与CM Server是同一台主机时命令为
[root@cdh1 ~]# /opt/cloudera/cm/schema/scm_prepare_database.sh -h localhost mysql scm scm 123456
[main] DbCommandExecutor INFO Successfully connected to database.
All done, your SCM database is configured correctly!
[root@cdh1 ~]#
#查看主节点server的配置:
[root@cdh1 /opt/prometheus/config]# cat /etc/cloudera-scm-server/db.properties
# Auto-generated by scm_prepare_database.sh on 2023年 04月 26日 星期三 21:18:56 CST
#
# For information describing how to configure the Cloudera Manager Server
# to connect to databases, see the "Cloudera Manager Installation Guide."
#
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=localhost
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.setupType=EXTERNAL
com.cloudera.cmf.db.password=123456
不同台时命令为:
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h 192.168.8.110 --scm-host 192.168.8.245 scm scm
说明:mysql-h为mysql所在服务器的IP;–scrm-host为CM主节点所在的服务器IP;第一个scm为数据库;第二个scm为用户名。
#启动服务
systemctl start cloudera-scm-server
#查看启动日志:
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
#关闭服务
systemctl stop cloudera-scm-server
#查看启动状态:
systemctl status cloudera-scm-server
netstat -an | grep 7180
后等待Cloudera Manager Server启动,需要稍等一会儿,可以通过查看/var/log/cloudera-scm-server/cloudera-scm-server.log去监控服务启动状态。当看到INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.日志打印出来后,说明服务启动成功,可以通过浏览器访问Cloudera Manager WEB界面了。
# 启动cloudera-scm-agent
systemctl start cloudera-scm-agent
# 查看启动日志
tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
systemctl start cloudera-scm-agent
systemctl start cloudera-scm-server
systemctl stop cloudera-scm-agent
systemctl stop cloudera-scm-server
systemctl enable cloudera-scm-agent
systemctl enable cloudera-scm-server
目录 | 作用 | 说明 |
---|---|---|
/run/cloudera-scm-agent | Agent服务运行的目录 | |
/run/cloudera-scm-agent/process | Agent维护程序目录 | |
/run/cloudera-scm-server | Server运行维护目录 | |
/etc/cloudera-scm-agent | Agent 配置目录 | |
/etc/cloudera-scm-server | Server配置目录 | |
/var/lib/cloudera-scm-server | Agent 运行文件目录 | |
/var/lib/cloudera-scm-agent | Server 运行文件目录 | |
/var/log/cloudera-scm-server | Agent日志文件目录 | |
/var/log/cloudera-scm-agent | Server日志文件目录 | |
/opt/cloudera | 安装文件目录 |
注意:必须要在数据库初始化后,将parcels文件放置到/opt/cloudera/parcel-repo目录中
#上传cdh6的parcel等文件到opt/cloudera/parcel-repo 操作参考2.8.9
mv /var/www/html/cm6/6.2.1/parcels/* /opt/cloudera/parcel-repo
#重命名密钥文件名
cd /opt/cloudera/parcel-repo/
mv CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha1 CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha
在浏览器中访问地址:http://CM主节点IP:7180,
默认账号和密码都为admin
设置中文Cloudera Manager》管理》语言》简体中文
设置Parcel 更新频率为1分钟Parcel》配置》Parcel 更新频率》1分钟
集群》添加集群》欢迎使用 Cloudera Manager【继续】》欢迎使用 Cloudera Manager【接受】》欢迎使用 Cloudera Manager【免费】》
群集安装》 欢迎【继续】》Cluster Basics【Cluster 1】》 Specify Hosts【cdh1】》
选择存储库【自定义存储库:http://cdh1/cm6/6.2.1|CDH 版本:CDH-6.2.1-1.cdh6.2.1.p0.1425774】》
JDK 安装选项【安装】》提供 SSH 登录凭据【root|密码】》安装完成
ls /opt/cloudera/parcel-repo
再添加主机》Add Hosts》Add hosts to cluster【Cluster 1】》 Specify Hosts【hadoop02】》
选择存储库【自定义存储库:http://hadoop01/cm6/6.2.1】》JDK 安装选项【安装】》提供 SSH 登录凭据【root|密码】》安装完成》选择主机模板
操作见网址:https://www.freesion.com/article/2773236140/
个人建议修改下,只是修改http端口号,即修改后端口号:
修改端口号完毕后,需要重新启动CM server才会生效的。
通过CM的web管理界面:设置—>Users & Roles进行用户、角色的管理。
操作见网址:
https://www.cnblogs.com/yinzhengjie/p/10887356.html
需要注意的是在下图中,配置的本地存储库就是上述生成createrepo后移动的CM文件夹,在浏览器中可以访问到的CM的相关rpm文件的地址。并且CDH软件版本就配置自己上传到的CDH的Pacel文件的版本,这样就不用重新从官网下载了,因为自己之前已经下载好上传了,这样安装方便。
**安装CDH出现file /opt/cloudera/parcels/.flood/CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel…does not exist可能磁盘空间不足 **
【https://blog.csdn.net/huangzhilin2015/article/details/90441467】
tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
systemctl stop cloudera-scm-agent
rm -rfv /opt/cloudera/parcel*
systemctl start cloudera-scm-agent
tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
systemctl status cloudera-scm-agent
CM初始用户和密码为:admin/admin,登陆
cdh提供三个版本:免费版和收费版,此次选择免费版,点击继续
选择主机列表后,点击继续
选择自定义服务,先安装个zookeeper
9) 第九步:到自定义角色分配 中,
Activity Monitor 我选择的是cdh1节点,zookeeper 我选择的是1-3 节点
数据库是在cdh3 上部署,然后主机名称为cdh3 数据库选择amon 用户名为root 密码 123456 然后点击测试连接
入到这页之后,先查看自己集群节点的容量大小,输入 df -HT 我的cdh1的节点容量如下:
/dev/mapper/centos-root 系统盘的容量最大,占19个G 但使用15个G 所以 在选择上不选择系统盘
可以选择 /run盘 和 /boot 盘 作为存放的路径
A、启动CDH服务端:
在CM主节点上操作:
执行命令:service cloudera-scm-server start;
B、启动CDH客户端:
在CM的agent节点上操作:
执行命令:service cloudera-scm-agent start;
1234567
A、关闭CDH客户端:
在CM的agent节点上操作:
执行命令:service cloudera-scm-agent stop;
B、关闭CDH服务端:
在CM的主节点上操作:
执行命令:service cloudera-scm-server stop;
swappiness是Linux的一个内核参数,控制系统在使用swap虚拟内存时,内存使用的相对权重。
swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap虚拟内存分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间。推荐设置为10,过多的交换空间会引起GC耗时的激增。根据服务器硬件配置会有变化。
自CentOS6版本开始引入了Transparent Huge Pages(THP透明的巨大的页面),从CentOS7版本开始,该特性默认就会启用。
Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变。
因为Transparent HugePages是在运行时动态分配内存的,所以会带来在运行时内存分配延误。
因此,尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP(比如说Cloudera、ORACLE、MariaDB、MongoDB等),否则可能会导致性能出现下降。
# 设置swappiness
(1)查看swappiness
永久设置查看指令:cat /etc/sysctl.conf
(2)永久设置swappiness
临时生效:
sysctl -w vm.swappiness=10
永久生效:
echo "vm.swappiness=10" >> /etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 关闭透明大页面
(1)查看透明大页面
查看指令1:cat /sys/kernel/mm/transparent_hugepage/enabled
查看指令2:cat /sys/kernel/mm/transparent_hugepage/defrag
(2)永久关闭透明大页面
查看指令:cat /etc/rc.d/rc.local
编辑指令:vi /etc/rc.d/rc.local
修改内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;
then echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
(3)配置rc.local脚本为可执行
赋权指令:chmod +x /etc/rc.d/rc.local
(4)配置其它节点永久关闭透明大页
使用scp把rc.local脚本分发到其它节点
分发到hadoop1指令:
scp /etc/rc.d/rc.local root@hadoop1:/etc/rc.d/rc.local
其它节点,按照此格式分发,只需修改目标主机的主机名。
ss -ntlp | grep -E '9000|9001|7190|7191|19001'
所有机器更改CentOS7.9的文件句柄数
(1)查看最大文件句柄数
查看最大文件句柄数指令:ulimit -n
查看最大文件句柄数指令:cat /etc/security/limits.conf
(2)修改最大文件句柄数
修改指令:vim /etc/security/limits.conf
---
* soft nofile 102400
* hard nofile 102400
* soft nproc unlimited
* hard nproc unlimited
* soft memlock unlimited
* hard memlock unlimited
其中,*代表匹配所有。
(3)使用scp把limits.conf脚本分发到其它节点
分发到hadoop1指令:
scp /etc/security/limits.conf root@hadoop1:/etc/security/limits.conf
增加可用的TCP套接字端口数(Increase the number of TCP socket ports available),如果你的流程会在很短的时间内创建并拆除大量socket,这一点尤为重要。
sudo sysctl -w net.ipv4.ip_local_port_range ="10000 65000"
socket连接闲置太长时间会影响并发量,设置socket在保持TIMED_WAIT状态的时间,能够快速创建和销毁新socket。
sudo sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait =“1”
这个可以通过clouder manger 主页关闭集群
[root@master ~]# /usr/share/cmf/uninstall-cloudera-manager.sh
[root@slave1 ~]# service cloudera-scm-agent stop
[root@slave1 ~]# service cloudera-scm-agent stop
一下都是所有要卸载的集群均要执行清除工作:
[root@master ~]# umount /var/run/cloudera-scm-agent/process
[root@slave1 ~]# umount /var/run/cloudera-scm-agent/process
[root@slave2 ~]# umount /var/run/cloudera-scm-agent/process
[root@master ~]# rm -rf /usr/share/cmf /var/lib/cloudera* /var/cache/yum/x86_64/6/cloudera* /var/log/cloudera* /var/run/cloudera* /etc/cloudera*
[root@slave1 ~]# rpm -qa | grep cloudera
[root@slave2 ~]# for f in `rpm -qa | grep cloudera ` ; do rpm -e ${f} ; done (如果有保存,在执行一遍)
rm -rf /var/lib/hadoop-* /var/lib/impala /var/lib/solr /var/lib/zookeeper /var/lib/hue /var/lib/oozie /var/lib/pgsql /var/lib/sqoop2 /data/dfs/ /data/impala/ /data/yarn/ /dfs/ /impala/ /yarn/ /var/run/hadoop-*/ /var/run/hdfs-*/ /usr/bin/hadoop* /usr/bin/zookeeper* /usr/bin/hbase* /usr/bin/hive* /usr/bin/hdfs /usr/bin/mapred /usr/bin/yarn /usr/bin/sqoop* /usr/bin/oozie /etc/hadoop* /etc/zookeeper* /etc/hive* /etc/hue /etc/impala /etc/sqoop* /etc/oozie /etc/hbase* /etc/hcatalog
rm -rfv /var/lib/hadoop-* /var/lib/impala \
/var/lib/solr \
/var/lib/zookeeper \
/var/lib/hue \
/var/lib/oozie \
/var/lib/pgsql \
/var/lib/sqoop2 \
/data/dfs/ \
/data/impala/ \
/data/yarn/ \
/dfs/ \
/impala/ \
/yarn/ \
/var/run/hadoop-*/ \
/var/run/hdfs-*/ \
/usr/bin/hadoop* \
/usr/bin/zookeeper* \
/usr/bin/hbase* \
/usr/bin/hive* \
/usr/bin/hdfs \
/usr/bin/mapred \
/usr/bin/yarn \
/usr/bin/sqoop* \
/usr/bin/oozie \
/etc/hadoop* \
/etc/zookeeper* \
/etc/hive* \
/etc/hue \
/etc/impala \
/etc/sqoop* \
/etc/oozie \
/etc/hbase* \
/etc/hcatalog
//只删除hadoop系列的,不要删除其他软件的,否则其他软件的版本控制会被破坏
[root@master alternatives]# rm -rf ` find /var/lib/alternatives/* ! -name "mta" ! -name "print" ! -name "zlibrary-ui" -mtime -3`
[root@master alternatives]# rm -rf /etc/alternatives/*
for u in hdfs mapred cloudera-scm hbase hue zookeeper oozie hive impala flume; do sudo kill $(ps -u $u -o pid=); done
rm -rf /opt/cloudera
到此卸载完毕。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。