开源大数据集群部署(二)集群基础环境实施准备

作者:櫰木

环境准备

本次使用到的二进制软件包目录为:系统初始化前提是操作系统已完成安装、各个主机之间网络互通,系统常用命令已安装,本默认这些前提条件已具备,不在阐述。

1 主机环境初始化

安装centos系统完成后需要对主机进行初始化配置和验证工作,在所有主机上(hd1.dtstack.com-hd3)均要进行操作,并按照对应hosts修改主机名:
(主机名必须为xxx.xxx.com 匹配freeipa安装需求)
(1) 主机配置映射(操作权限root)

$ cat>>/etc/hosts <<EOF
172.16.104.226 hd1.dtstack.com
172.16.106.252 hd2.dtstack.com
172.16.107.127 hd3.dtstack.com
172.16.106.165 hd.dtstack.com
EOF

(2)关闭防火墙&selinux(操作权限root)

$ systemctl stop firewalld
$ systemctl disable firewalld
$ setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

(3) 创建集群系统用户(操作权限root)

系统用户 属组 用途
hadoop hadoop hadoop集群用户
mysql hadoop mysql数据库用户
hdfs hadoop hadoop集群用户
trino hadoop presto集群用户
prometheus prometheus 监控平台用户
grafana grafana 监控平台用户
zookeeper zookeeper zk集群用户
hive hadoop hive组件用户
yarn hadoop hadoop集群用户

创建hadoop集群所需用的的用户和用户组
创建示例如下:

[[email protected] ~]$ remote_op.sh "groupadd hadoo p"
[[email protected] ~]$ remote_op.sh "useradd hive -G hadoop"
[[email protected] ~]$ remote_op.sh "echo hive | passwd --stdin hive"

(4)安装java环境(操作权限root)
本次中java软件包安装目录在/root/bigdata

$ cd /opt/bigdata
$ tar -zvxf zulu11.60.19-ca-jdk11.0.17-linux_x64.tar.gz -C /opt
tar -zxvf jdk-8u281-linux-x64.tar.gz
ln -s  /opt/jdk1.8.0_281  /opt/java

2 配置ssh互信

ssh互信配置(操作权限hadoop)
在集群系统 hd1.dtstack.com-hd3.dtstack.com共3台设备上执行如下命令:

$ cd $HOME  #在hadoop当前目录下创建ssh互信
$ ssh-keygen -t rsa   #一路回车,不需要输入任何信息

将hd1.dtstack.com公钥添加到认证文件中,在hd1.dtstack.com主机root用户当前家目录下执行如下命令:
生产各自的keytab文件

ssh-keygen -t rsa

用ssh-copy-id 把公钥复制到远程主机上,命令也要(以下命令ip需要填写所有节点ip并在每个节点均执行)

ssh-copy-id -i  .ssh/id_rsa.pub [email protected]

以上命令在三个阶段均要执行

ssh互信验证
hd1.dtstack.com-hd3.dtstack.com主机上互相执行ssh登录命令验证,如下:

[[email protected] ~]$ ssh hd2.dtstack.com

验证截图如下:


ssh命令执行过去,无报错表示ssh互信配置成功。
root和hdfs以及yarn权限ssh互信
同理操作,配置主机root权限和hdfs以及yarn权限全主机互信。

3 统一环境变量配置

环境变量分两个文件:/etc/profile和各用户下.bashrc(bash),建议/etc/profile根据规划好的目录结构,统一设置环境变量。本次设置将hadoop,zookeeper,hive,java环境变量整体设置完成

[[email protected] ~]# cat >>/etc/profile.d/bigdata.sh<<EOF
#!/bin/bash
export HADOOP_HOME=/opt/hadoop
export HBASE_HOME=/opt/hbase
export SPARK_HOME=/opt/spark
export SPARK_CONF_DIR=/opt/spark/conf
export HBASE_CONF_DIR=/opt/hbase/conf
export HBASE_LIB=/opt/hbase/lib
export TEZ_HOME=/opt/tez
export TEZ_CONF_DIR=/opt/tez/conf
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/*:$TEZ_HOME/lib/*
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=/opt/hive/conf
export PATH=$PATH:$HIVE_HOME/bin
export ZK_HOME=/opt/zookeeper
#export YARN_CONF_DIR=/opt/hadoop/etc/hadoop
export JAVA_HOME="/opt/java"
export PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$ZK_HOME/bin:/opt/mysql/bin:$PATH
export HADOOP_CLASSPATH=`hadoop classpath`

EOF

4 系统调优

hd1.dtstack.com-hd3.dtstack.com所有机器上都要执行,且以root权限执行
调整swap、内存分配、网络连接参数

$ cat>>/etc/sysctl.conf <<EOF
#避免使用swap
vm.swappiness = 1
#修改内存分配策略
vm.overcommit_memory=2
vm.overcommit_ratio=90
#网络连接上限
net.core.somaxcomm=32768
EOF

增大同时打开文件描述符

$ cat>>/etc/security/limits.conf <<EOF
hadoop  soft   nofile   32768
hadoop hard nofile 65536
hadoop soft   nproc   32768
hadoop hard nproc 65536
EOF

关闭THP

$ cat>>/etc/rc.local <<EOF
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
EOF

5 NTP服务配置

安装
在hd1.dtstack.com-hd3.dtstack.com各个主机上root权限下执行:

$ yum install -y ntp

配置时间同步服务端
在hd1.dtstack.com主机root权限下执行

ntp配置

$ cat /etc/ntp.conf|grep -v '#'|grep -v ^$
driftfile /var/lib/ntp/drift     #存放记录时间误差
restrict default nomodify notrap nopeer noquery   #默认拒绝所有来源访问
restrict 127.0.0.1  #开放本机的任何访问
restrict ::1
restrict 172.16.104.0 mask 255.255.255.0 nomodify notrap  #允许104网段机器参与ntp同步
includefile /etc/ntp/crypto/pw    
keys /etc/ntp/keys
server  172.16.104.226    #时间同步服务器
server  127.127.1.0       #当上面时间不可用时,以本地时间作为时间服务
fudge   127.0.0.1 stratum 10
disable monitor

说明:

  • server 172.16.104.226表示内网时间同步服务器,其余机器都从这台同步时间
  • server 172.16.104.226可以替换成其他时间服务中心IP(看生产环境配置)

ntp服务启动和验证
启动

service ntpd start

验证

service ntpd status


Active状态为running表示服务启动成功

配置时间同步客户端
在hd2.dtstack.com主机root权限下执行

配置时间同步服务源

[[email protected] ~]# cp /etc/ntp.conf /etc/ntp.conf.bak
[[email protected] ~]# cat >/etc/ntp.conf<<EOF
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict ::1
server 172.16.104.226
restrict 172.16.104.226 nomodify notrap noquery
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
EOF

手动同步时间(建议第一次手动同步)

$ ntpdate -u 172.16.104.226


拉起同步服务

service ntpd start

检查方法同上
同步到其他节点(hd3.dtstack.com、hd2.dtstack.com)

[[email protected] ~]# scp /etc/ntp.conf [email protected]:/etc/

启动其余主机(hd3.dtstack.com)上ntpd服务

[[email protected] ~]# ssh hd3.dtstack.com 'service ntpd start'
[[email protected] ~]# ssh hd2.dtstack.com'service ntpd start'

检查其余机器(hd3.dtstack.com)上ntpd服务启动状态

[[email protected] ~]# ssh hd3.dtstack.com 'service ntpd status'
[[email protected] ~]#ssh hd2.dtstack.com'service ntpd start''

检查连接情况

[[email protected] ~]# ntpq -p

6 自动化同步脚本

配置文件同步脚本【1】remote_scp.sh

[[email protected] software]# cat /root/bin/remote_scp.sh
#!/bin/bash
for i in hd{2..3}
do
 #echo $i
 if [  -d $1  ]
then
 echo -e '\033[33m 当前主机为'$i',传输文件为'$1'\033[0m'
 scp -rp $1 $i:$2
else
 #echo "当前节点为$,传输文件为$1"
 echo -e '\033[33m 当前主机为'$i',传输文件为'$1'\033[0m'
 scp $1 $i:$2
fi
done
status=`echo $?`
if [ $status -eq 0 ]
then
 echo -e "$1文件传输完成"
else
 echo -e "请检查传入参数"
fi

使用案例:
格式:remote_scp.sh 源目录 目标目录


说明:将test.log 分发到hd1.dtstack.com-hd3.dtstack.com/root目录下
配置文件同步脚本【2】remote_op.sh

[[email protected] ~]# cat /root/bin/remote_op.sh
#!/bin/bash
for i in hd2.dtstack.com hd3.dtstack.com
do
  echo  -e '\033[33m 当前主机为'$i'\033[0m'
  ssh $i $1
done

使用案例:
格式:remote_op.sh “执行命令内容”

7 软件包仓库

建议在安装hadoop集群前,提前将所需安装的二进制软件包,统一存放软件包仓库中。
本次使用的软件包都在主机hd1.dtstack.com上/root/bigdata下

8 keytab生成脚本

在所有节点均需执行此操作
/root/bigdata
vi getkeytabs.sh

set -x
 
CMKEYTAB="/data/kerberos/apache-user.keytab"
CMUSER="apache-user"
REALM="DTSTACK.COM"
IPASERVER="hd.dtstack.com"
 
hosts=`hostname`
DEST="$1"
FULLPRINC="$2"/${hosts}@${REALM}
USER=$2
# Passwd based kinit
#echo PASSWORD | kinit $CMUSER@$REALM
 
# Or per keytab (keytab needs to be generated before)
kinit -k -t $CMKEYTAB $CMUSER@$REALM
 
PRINC=$( echo $FULLPRINC | sed "s/\@$( echo $REALM )//" )
 
echo $PRINC

echo Retrieving keytab for $FULLPRINC for $DEST
 
echo Checking for existing service principle
if ipa service-find $FULLPRINC; then
echo Service principle found
else
echo Service principle not created, creating
ipa service-add $FULLPRINC --pac-type=NONE
fi
 
echo Ensuring service allows
ipa service-allow-create-keytab --users=$CMUSER $FULLPRINC
ipa service-allow-retrieve-keytab --users=$CMUSER $FULLPRINC
 
if ipa service-show $FULLPRINC | grep 'Keytab' | grep 'False'; then
echo Creating keytab for $FULLPRINC for $DEST
ipa-getkeytab -s $IPASERVER -p $PRINC -k $DEST -e rc4-hmac,aes256-cts,aes128-cts
else
echo Retrieving keytab for $FULLPRINC for $DEST
ipa-getkeytab -r -s $IPASERVER -p $PRINC -k $DEST
fi

chmod 644 $DEST
chown $USER:$USER $DEST
 
kdestroy
 
exit 0;

备注

上文中$ 表示系统命令解释器开始符号,且表示所有机器都要执行,如出现[[email protected] ~]$表示,只在hd1.dtstack.com主机hadoop用户下执行

热门相关:锦绣医妃之庶女凰途   霸宠天下:腹黑帝君妖娆后   扑倒老公大人:龙总,我爱你!   扑倒老公大人:龙总,我爱你!   恶明