赞
踩
作者:櫰木
本次使用到的二进制软件包目录为:系统初始化前提是操作系统已完成安装、各个主机之间网络互通,系统常用命令已安装,本默认这些前提条件已具备,不在阐述。
安装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集群所需用的的用户和用户组
创建示例如下:
[root@hd1.dtstack.com ~]$ remote_op.sh "groupadd hadoo p"
[root@hd1.dtstack.com ~]$ remote_op.sh "useradd hive -G hadoop"
[root@hd1.dtstack.com ~]$ 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
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 root@xxx.xxx.xxx
以上命令在三个阶段均要执行
ssh互信验证
hd1.dtstack.com-hd3.dtstack.com主机上互相执行ssh登录命令验证,如下:
[hadoop@hd1.dtstack.com ~]$ ssh hd2.dtstack.com
验证截图如下:
ssh命令执行过去,无报错表示ssh互信配置成功。
root和hdfs以及yarn权限ssh互信
同理操作,配置主机root权限和hdfs以及yarn权限全主机互信。
环境变量分两个文件:/etc/profile和各用户下.bashrc(bash),建议/etc/profile根据规划好的目录结构,统一设置环境变量。本次设置将hadoop,zookeeper,hive,java环境变量整体设置完成
[root@hd1.dtstack.com ~]# 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
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
安装
在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
说明:
ntp服务启动和验证
启动
service ntpd start
验证
service ntpd status
Active状态为running表示服务启动成功
配置时间同步客户端
在hd2.dtstack.com主机root权限下执行
配置时间同步服务源
[root@hd2.dtstack.com ~]# cp /etc/ntp.conf /etc/ntp.conf.bak
[root@hd2.dtstack.com ~]# 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)
[root@hd2.dtstack.com ~]# scp /etc/ntp.conf root@hd2.dtstack.com:/etc/
启动其余主机(hd3.dtstack.com)上ntpd服务
[root@hd2.dtstack.com ~]# ssh hd3.dtstack.com 'service ntpd start'
[root@hd2.dtstack.com ~]# ssh hd2.dtstack.com'service ntpd start'
检查其余机器(hd3.dtstack.com)上ntpd服务启动状态
[root@hd2.dtstack.com ~]# ssh hd3.dtstack.com 'service ntpd status'
[root@hd2.dtstack.com ~]#ssh hd2.dtstack.com'service ntpd start''
检查连接情况
[root@hd2.dtstack.com ~]# ntpq -p
配置文件同步脚本【1】remote_scp.sh
[root@hd1.dtstack.com 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
[root@hd1.dtstack.com ~]# 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 “执行命令内容”
建议在安装hadoop集群前,提前将所需安装的二进制软件包,统一存放软件包仓库中。
本次使用的软件包都在主机hd1.dtstack.com上/root/bigdata下
在所有节点均需执行此操作
/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;
上文中$ 表示系统命令解释器开始符号,且表示所有机器都要执行,如出现[hadoop@hd1.dtstack.com ~]$表示,只在hd1.dtstack.com主机hadoop用户下执行
更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。