1 检查生产环境
1.1 检查硬件信息
硬件信息一般装系统的同学会提供,且集群的机器也会按照我们的要求进行配置,检验几个核心的系统和硬件参数:
内存:free -g
磁盘空间和目录划分:df -h
系统核数:grep "processor" | sort | uniq | wc -l
1.2 确认系统信息
保证操作系统是要求的centos系列,最低建议要求7.4,位数建议64位
查看命令:cat /etc/redhat-release
1.3 确认服务器内部网络是否互通
如果无法ping通内部服务,则检查 /etc/sysconfig/network-scripts/ifcfg-ens33 文件,确认 ONBOOT 的值如果为no需要修改为yes(Centos7.5虚拟机安装初始默认为no),否则网络无法连通。手动检查各个主机上的网络设置,如果有问题则修改配置
# ONBOOT=no 改成 ONBOOT=yes(ifcfg-ens33该名称各主机可能不一样)修改完后重启 vim /etc/sysconfig/network-scripts/ifcfg-ens33 reboot
1.4 配置yum源
已配置好的话此步跳过,以下适用于服务器已经配置了其他源,yum不可用的情况
cd /etc/yum.repos.d/ rename .repo .repo.bak *.repo wget http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache
2 修改系统配置
2.1 修改主机名(可选)
修改的主机名,和稍后需要配置hosts文件保持一致
查看主机名(Centos7) less /etc/hostname 修改主机名,以下每条命令在对应的主机上执行 hostnamectl set-hostname master01 hostnamectl set-hostname hadoop01 hostnamectl set-hostname hadoop02 hostnamectl set-hostname hadoop03
2.2 更新hosts文件
所有节点执行(重要)
所有集群hosts配置要相同
查看hosts: less /etc/hosts
echo "192.168.0.131 master01" >> /etc/hosts
echo "192.168.0.45 hadoop01" >> /etc/hosts
echo "192.168.0.155 hadoop02" >> /etc/hosts
echo "192.168.0.170 hadoop03" >> /etc/hosts
2.3 关闭防火墙,禁止开机自启
所有节点执行
局域网内部安全情况下最好关闭防火墙,因为CM管理组件和CDH组件有大量的端口进行通讯,需要配置很多防火墙策略。
需要开放的端口可参考 官网说明,如果不能确保开放所有所需端口,则需要关闭防火墙
-
- systemctl stop firewalld 关闭防火墙 - systemctl disable firewalld 禁止防火墙开机自启 - vim /etc/selinux/config —> SELINUX=disabled (修改)
2.4 各主机之间的免密登录(可以不用配置)
- manager节点执行ssh-keygen -t rsa 一路回车到结束,在/root/.ssh/下面会生成一个公钥文件id_rsa.pub
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 将公钥追加到authorized_keys
- chmod 600 ~/.ssh/authorized_keys 修改权限
- 将~/.ssh从当前节点分发到其他各个节点。如:scp -r ~/.ssh/ root@node1:~/.ssh/
- ssh 各个节点互相登陆
2.5 禁用selinux(优化项,所有节点)
所有节点
查看是否开启:vim /etc/selinux/config 修改:SELINUX=disable
sed -i ‘s/SELINUX=enforce/SELINUX=disabled/g’ /etc/selinux/config
2.6 禁用ipv6(优化项,所有节点)
Centos7.5默认开启IPv6,CM组件明确说明不支持系统的IPv6功能,IPv6开启状态下可能会出现不可预料的错误,需要提前关闭。
查看IPv6启用状态可以通过以下几种方式:
- ifconfig:查看是否有IPv6的地址(inet6)
- lsmod:查看是否有ipv6关键字
- disable_ipv6:查看/proc/sys/net/ipv6/conf/all/disable_ipv6文件内容,0为开启,1为关闭
# 查看IPv6当前状态,有值则为打开,空则为关闭 ansible all -a "lsmod | grep ipv6"
IPv6打开的情况下如何关闭:
# 第六行添加 vim /etc/default/grub GRUB_CMDLINE_LUNUX="ipv6.disable=1 ...." # 重启 ansible all -a "reboot" # 验证 ansible all -a "lsmod | grep ipv6"
2.7 安装NTP
以下操作是所有节点进行
设置好后的验证操作:
ntpdc -c loopinfo #查看与时间同步服务器的时间偏差
ntpq -p #查看当前同步的时间服务器
ntpstat #查看状态
1、添加dns,如果有可以不用做该操作
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
2、修改为中国标准时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、安装ntp
yum install ntp -y
4、手动同步时间(ntpd服务关闭的情况下),避免时间差距过大导致同步失败
ntpdate -u 0.cn.pool.ntp.org
5、有外网的情况下可直接配置外部ntp服务器
echo "server ntp1.aliyun.com" >> /etc/ntp.conf
6、启动ntp
systemctl start ntpd
7、设置开机自动启动
systemctl enable ntpd
3 优化系统配置
3.1 关闭tuned (所有节点)
tuned服务会动态调整系统参数,在自定义优化后,重启会覆盖掉已优化的参数
1、启动,检查tuned状态 systemctl start tuned systemctl status tuned 2、显示No current active profile时执行下命令 tuned-adm off tuned-adm list 3、关闭tuned,禁止开机启动 systemctl stop tuned systemctl disable tuned
3.2 关闭透明页 (所有节点)
检查验证透明页是否开启,never是未启用
cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag
如果启用启用时,执行以下操作
1 关闭 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag 2 设置开机关闭 echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local chmod +x /etc/rc.d/rc.local 3 在GRUB_CMDLINE_LINUX项目后面添加一个参数:transparent_hugepage=never vim /etc/default/grub 4 重新生成gurb.cfg文件 grub2-mkconfig -o /boot/grub2/grub.cfg
3.3 修改swappiness参数 (所有节点)
为了避免服务器使用swap功能而影响服务器性能,一般都会把vm.swappiness修改为0(cloudera建议10以下)
这里设为1,代表:vm.swappiness=1 #使用到达99%,才开始用Swap虚拟内存
验证命令,查看原始值:
cat /proc/sys/vm/swappiness
1、设置值 sysctl -w vm.swappiness=1 echo "vm.swappiness=1" >> /etc/sysctl.conf
3.4 设置会话超时时间(所有节点)
echo "TMOUT=900">>/etc/profile
3.5 安装常用工具 (所有节点)
yum install -y expect bc net-tools iotop zip unzip telnet wget iperf3 fio ntfs-3g lzo iftop vim
3.6 系统内核优化
echo -e "\nnet.ipv4.tcp_tw_reuse = 1
\nnet.ipv4.tcp_tw_recycle = 1
\nnet.ipv4.tcp_keepalive_time = 1200
\nnet.ipv4.ip_local_port_range = 10000 65000
\nnet.ipv4.tcp_max_syn_backlog = 8192
\nnet.ipv4.tcp_max_tw_buckets = 5000
\nfs.file-max = 655350
\nnet.ipv4.route.gc_timeout = 100
\nnet.ipv4.tcp_syn_retries = 1
\nnet.ipv4.tcp_synack_retries = 1
\nnet.core.netdev_max_backlog = 16384
\nnet.ipv4.tcp_max_orphans = 16384
\nnet.ipv4.tcp_fin_timeout = 2
\net.core.somaxconn=32768
\kernel.threads-max=196605
\kernel.pid_max=196605
\vm.max_map_count=393210" >> /etc/sysctl.conf
3.7 最大打开文件数优化
最大打开文件数
ulimit -a
sed -i '$ a\* soft nofile 196605' /etc/security/limits.conf
sed -i '$ a\* hard nofile 196605' /etc/security/limits.conf
echo "* soft nproc 196605" >> /etc/security/limits.conf
echo "* hard nproc 196605" >> /etc/security/limits.conf
4 系统性能测试
登录linux服务器,安装常用工具
yum install -y expect bc net-tools iotop zip unzip telnet wget iperf3 fio ntfs-3g lzo iftop vim
网络测试
使用iperf测试主机之间的网络传输效率。
# 在一个主机上启动iperf 服务端
iperf3 -s -p 12345 -i 1
# 另外一个主机启动iperf 客户端连接服务端
iperf3 -c cdh85-19 -p 12345 -i 1 -t 10 -w 100K
磁盘IO测试
使用fio工具对io进行各个场景的读写性能测试。
随机读
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file -allow_mounted_write=1
顺序读
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file -allow_mounted_write=1
随机写
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file -allow_mounted_write=1
顺序写
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file -allow_mounted_write=1
混合随机读写
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=30 -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file -ioscheduler=noop -allow_mounted_write=1
todo:
- 内存性能测试
- 操作系统性能测试
5 安装基础服务
5.1 安装jdk (所有节点)
rpm -qa | grep java # 查询已安装的java
yum remove java* # 卸载
rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
vi /etc/profile #末尾添加
------------------添加的内容-------------------------------
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
----------------------添加的内容-----------------------------
source /etc/profile
java -version #验证安装是否成功
5.2 添加mysql驱动包 (所有节点)
驱动包是提前下载好,上传到服务器的
mkdir -p /usr/share/java
mv /root/temp/mysql-connector-java.jar /usr/share/java/
5.3 安装 mysql (控制节点)
mysql密码忘记后重置操作
# 重置 /usr/bin/mysql_secure_installation
查看、卸载已有的mariadb数据库
rpm -qa|grep -i mariadb rpm -e mariadb-libs-5.5.65-1.el7.x86_64 --nodeps
- 解压mysql安装包并进行安装:
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm
- MYSQL配置:
初始化配置mysql mysqld --initialize --user=mysql # 初始化mysql使mysql目录的拥有者为mysql用户 2、查看mysql密码 grep "temporary password" /var/log/mysqld.log 3、启动mysql systemctl start mysqld systemctl status mysqld systemctl enable mysqld 4、连接mysql,修改密码 mysql -uroot –p mysql》 ALTER USER USER() IDENTIFIED BY '123456';
登录进去后,ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.需要修改访问密码:
ALTER USER USER() IDENTIFIED BY ‘rootpwd’;
如果是5.7之前版本,可以使用如下方式: SET PASSWORD = PASSWORD(‘rootpwd’);
如果不能登陆,设置免密登录并重启mysql服务:
vi /etc/my.cnf
#在[mysqld]的段中加上一句:skip-grant-tables ,
然后重启mysql: systemctl restart mysqld
- 创建库(后续安装服务等使用)
create database metastore default charset utf8 collate utf8_general_ci; create database amon default charset utf8 collate utf8_general_ci; create database rman default charset utf8 collate utf8_general_ci; create database hue default charset utf8 collate utf8_general_ci; create database oozie default charset utf8 collate utf8_general_ci; CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; create database hive default charset utf8 collate utf8_general_ci; GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive'; GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm'; grant all on metastore.* to 'metastore'@'%' identified by 'metastore'; grant all on amon.* to 'amon'@'%' identified by 'amon'; grant all on rman.* to 'rman'@'%' identified by 'rman'; grant all on hue.* to 'hue'@'%' identified by 'hue'; grant all on oozie.* to 'oozie'@'%' identified by 'oozie';
5.4 安装httpd服务 (控制节点)
yum install httpd
systemctl start httpd
systemctl enable httpd.service
5.5 配置Cloudera Manager包yum源 (控制节点)
1、创建cdh包路径,把 CDH 6.2 的三个文件放到该目录下
- CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha - CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel - manifest.json
mkdir -p /var/www/html/cloudera-repos/cdh6.2
2、创建cm包路径,将Cloudera Manager安装需要的5个rpm包,asc文件以及jdk文件下载到本地,放在同一目录,执行createrepo命令生成rpm元数据
allkeys.asc cloudera-manager-agent-6.2.0-968826.el7.x86_64.rpm cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm cloudera-manager-server-6.2.0-968826.el7.x86_64.rpm cloudera-manager-server-db-2-6.2.0-968826.el7.x86_64.rpm enterprise-debuginfo-6.2.0-968826.el7.x86_64.rpm oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
mkdir -p /var/www/html/cloudera-repos/cm6.2 cd /var/www/html/cloudera-repos/cm6.2 yum install createrepo createrepo . 以上命令执行后, 最终 cm6.2目录下多了一个repodata目录
5.6 配置yum仓库(控制节点)
下载仓库文件和key文件
cd /var/www/html/cloudera-repos/cm6.2 wget https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera 2、打开仓库配置,下载仓库文件 cd /etc/yum.repos.d wget https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/cloudera-manager.repo 3、修改仓库文件 vim cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager 6.2.0
baseurl=http://master01/cloudera-repos/cm6.2/
gpgkey=http://master01/cloudera-repos/cm6.2/RPM-GPG-KEY-cloudera
gpgcheck=1
enabled=1
autorefresh=0
type=rpm-md$ yum clean all $ yum makecache $ yum repolist
5.7 安装cm(管理节点)
1、安装管理节点
sudo yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
2、移动cdh的安装包到/opt/cloudera/parcel-repo
mv /root/CDH-6.2.0/parcel-repo/* /opt/cloudera/parcel-repo 生成签名文件 sha1sum CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel | awk '{ print $1 }' > CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha
5.8 初始化cm(管理节点)
初始化数据库
cat /etc/cloudera-scm-server/db.properties /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
5.9 启动cm (控制节点)
service cloudera-scm-server start systemctl enable cloudera-scm-server
访问 http://master01:7180/cmf/login开始操作
5.10 启动数据节点agent
把管理节点的仓库文件发送到各数据节点
1、管理节点发送配置文件到各子节点 scp /etc/yum.repos.d/cloudera-manager.repo root@hadoop01:/etc/yum.repos.d/ scp /etc/yum.repos.d/cloudera-manager.repo root@hadoop02:/etc/yum.repos.d/ scp /etc/yum.repos.d/cloudera-manager.repo root@hadoop03:/etc/yum.repos.d/ 2、各子节点重建yum yum clean all yum makecache yum repolist sudo yum install cloudera-manager-daemons cloudera-manager-agent 3、所有节点执行以下 systemctl start cloudera-scm-agent systemctl enable cloudera-scm-agent
6 hive配置修改
修改后可使用hiveDDL语句
1.将datanucleus.autoCreateSchema 改为true
2.将hive.metastore.schema.verification 改为 flash
2 cdh 搭建
前言
系统版本:某大数据研发建议系统版本为CentOS7.2
查看操作系统系统版本命令
cat /etc/issue 或cat /etc/redhat-release
本次搭建环境基础资源
CentOS Linux release 7.8.2003 (Core)
已有资源
192.168.0.131
192.168.0.170
192.168.0.45
192.168.0.155
服务器选型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Enpv2g7f-1602566890310)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1594792414765.png)]
服务分配
服务名称 | 子服务 | hadoop102 | hadoop103 | hadoop104 | hadoop104 |
---|---|---|---|---|---|
NameNode | √ | ||||
HDFS | DataNode | √ | √ | √ | |
SecondaryNameNode | √ | √ | |||
Yarn | NodeManager | √ | √ | √ | √ |
Resourcemanager | √ | ||||
Zookeeper | Zookeeper Server | √ | √ | √ | √ |
Hive | Hive | √ | |||
MySQL | MySQL | √ | |||
Sqoop | Sqoop | √ | |||
hbase | hbase | √ | √ | √ | |
cudu | cudu | √ | √ | √ | |
服务数总计 | 6 | 6 | 6 | 6 |
2.1 确认服务器内部网络是否互通
如果无法ping通内部服务,则检查 /etc/sysconfig/network-scripts/ifcfg-ens33 文件,确认 ONBOOT 的值如果为no需要修改为yes(Centos7.5虚拟机安装初始默认为no),否则网络无法连通。手动检查各个主机上的网络设置,如果有问题则修改配置:
# ONBOOT=no 改成 ONBOOT=yes # ifcfg-ens33该名称各主机可能不一样 vim /etc/sysconfig/network-scripts/ifcfg-ens33 reboot
2.1 修改服务器名称(可选)
查看主机名(Centos7)
less /etc/hostname
修改主机名
hostnamectl set-hostname master1.tgserver.xiyang.com
2 下载依赖包
3、服务器域名配置
vim /etc/hosts
例如:
44.5.10.195 nn1.gdjgj nn1
44.5.10.196 nn2.gdjgj nn2
44.5.10.197 dn1.gdjgj dn1
44.5.10.198 dn2.gdjgj dn2
44.5.10.199 dn3.gdjgj dn3
44.5.10.195 archive.cloudera.com (IP为yum源所在的机器IP地址)
4、关闭防火墙、禁止防火墙开机自启(每个节点)
-
- systemctl stop firewalld 关闭防火墙 - systemctl disable firewalld 禁止防火墙开机自启 - vim /etc/selinux/config —> SELINUX=disabled (修改)