| 作者 | 日期 | 有啥特别 |
|---|---|---|
| 元公子 | 2019-12-24(周二) | 一个穿短袖没有雪的平安夜 |
你知道的越少,你不知道的就越少
没有朋友的点赞,就没法升级打怪
一、前言
大数据环境可能会使用到一些常用脚本,这里将统一进行讲述。部署机采用Centos7操作系统。
二、Linux新用户
# 创建名称为hadoop的用户组
[root@hadoop-master ~]# groupadd hadoop
# 创建名称为hadoop的用户,并指派到hadoop名称的用户组。第一个hadoop是用户组名称,第二个是用户名称
# 备注 -d 参数 指向用户目录
[root@hadoop-master ~]# useradd -g hadoop hadoop
# 修改hadoop用户的密码
[root@hadoop-master ~]# passwd hadoop
# 给该用户添加 sudo 权限,使其所有命令都不需要密码,即可使用sudo权限。
# 在“root ALL=(ALL) ALL”此行下面追加一行,由于是只读文件,要使用:wq!强制保存。
[root@hadoop-master ~]# vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD:ALL
执行保存: Esc :wq!
sudo命令简单说明:
# hadoop用户访问高权限目录时,提示权限不够
[hadoop@hadoop-master ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
# 加入sudo后,原先会提示输入hadoop的用户密码。设置了sudo用户权限后,可免除输入该用户密码。
[hadoop@hadoop-master ~]$ sudo ls /root
naconda-ks.cfg cleardocker.sh download
删除用户
# 删除用户,但相关文件还存在,例如home目录等
[root@hadoop-master ~]# userdel 用户名
# 删除用户,以及相关文件
[root@hadoop-master ~]# userdel -r 用户名
# 查询与用户相关的文件,后续按情况使用rm命令删除
[root@hadoop-master ~]# find / -name "*用户名*"
三、域名映射
本机的域名
# 查看本机的域名名称
[root@hadoop-master /]# hostname
hadoop-master
# 编辑域名名称,需重启生效(reboot)
[root@hadoop-master /]# hostnamectl set-hostname 域名名称
域名与机器IP之间的映射关系
# 查看hosts文件
[root@hadoop-master /]# cat /etc/hosts
# 前面2行127.0.0.1、::1不用调整,在下面递增加行内容
127.0.0.1 localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 写法:ip地址+空格或者tab+自定义域名名称
192.168.0.1 hadoop-master
192.168.0.2 test1
192.168.0.3 test2
# 编辑此文件可增删改,保存后立即生效。
[root@hadoop-master /]# vi /etc/hosts
# 验证是否生效,ping域名是否正常,并显示所对应的ip信息
[root@hadoop-master /]# ping test1
四、Linux提示符显示全路径
/etc/profile 添加环境变量
[root@hadoop-master /soft]# vi /etc/profile
# 文件最底部加入。\$ '可以改为\$'(去掉空格)
export PS1='[\u@\h `pwd`]\$ '
执行保存: Esc :wq
# source当前会话生效,全局需重启
[root@hadoop-master /soft]# source /etc/profile
# 显示效果
[root@hadoop-master /home/hadoop]# 结果1
[root@hadoop-master /home/hadoop]#结果2(后续命令的空格区别)
五、多台机器间ssh免密码登录
此脚本来源于Hadoop官方的“Setup passphraseless ssh”章节,文章链接地址。
先看下未设置免密码登录的样子。
# ssh登录本机服务器,默认以当前用户登录(hadoop用户示例),要求输入当前用户的密码。
[hadoop@hadoop-master /]$ ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:z264yqjSGmNB/6c+Bk6vYtNZ82zl7FIaLemL1aZNFdY.
ECDSA key fingerprint is MD5:eb:0a:e3:93:db:55:96:42:55:85:55:2d:5a:80:d2:93.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
hadoop@localhost's password:
[hadoop@hadoop-master /]$ exit
设置当前账户的免密码登录。
# 查看当前用户.ssh目录下有哪些文件
# 提示:如不存在.ssh目录,则输入ssh localhost,录入密码登录后,再输入exit退出。
# .ssh目录的权限必须是700**
[hadoop@hadoop-master ~]$ ll ~/.ssh/
总用量 4
-rw-r--r-- 1 hadoop hadoop 171 12月 23 14:08 known_hosts
[hadoop@hadoop-master ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 生成两个文件id_rsa(私钥),id_rsa.pub(公钥,可发给其它机器)
[hadoop@hadoop-master ~]$ ll ~/.ssh/
-rw------- 1 hadoop hadoop 1675 12月 23 14:59 id_rsa
-rw-r--r-- 1 hadoop hadoop 408 12月 23 14:59 id_rsa.pub
-rw-r--r-- 1 hadoop hadoop 171 12月 23 14:08 known_hosts
# 生成免密码登录的认证文件,并设置相应权限
[hadoop@hadoop-master ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# authorized_keys文件权限必须是600**
[hadoop@hadoop-master ~]$ chmod 0600 ~/.ssh/authorized_keys
# 测试,正常则为不用密码登录(畅通无阻)
[hadoop@hadoop-master ~]$ ssh localhost
# 退出
[hadoop@hadoop-master ~]$ exit
高能提示1现在使用root用户试试
[hadoop@hadoop-master ~]$ sudo su - root
[root@hadoop-master ~]# ssh localhost
root@localhost's password:
# 结论你懂的。不是所有用户都会免密登录。所以要使用哪个用户,就切换到那个用户再重新来一遍吧。
高能提示2一起来看看authorized_keys文件的内容
[hadoop@hadoop-master ~]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3JprUBnvkoLbbOexoMrVUEyAJcnCV31qinmpG+YE85mtk6WJEVThwN9Zi+KBIZCoXglpVWlr6jbbmRoMxGbsh6ytMXIsDNs5Tia9rMwNTG/Rbz1uDLgZ/V11uITAWxDSxksyJqqNV6wF/4jS5uDVXVzH4xmQhL0O9JhMJfOjDkzSpkIpOTbQbNSKHpKhFB9EqAxIBvu9ctvY2ozq2SaHFVXlY0xljKHuRi2UUqBfywNmRc4dhWwwzcz3vPQ/kJkJZjrRdQppMP9f6Fs4F7CPImktPRIPVqDGIamIVklREOu/UIIvr3wNuEJXOPvGKCi14bXPcxy/Bz73vt2ncsvft hadoop@hadoop-master
# 结论:你懂的。设置免密前,建议提前先把用户名和hostname统一和规划下。(hadoop@hadoop-master表示以哪个用户名来登录本机)
实现免密登录的简单思路:A机器拥有B机器的authorized_keys文件,那B机器就可以免密登录A机器。
所以,如果我们想多台机器之间,可以互相免密登录的话,我们最终要做到这两点:
- 每台机器需远程登录用户的目录下(~/.ssh/)都要有相同内容的
authorized_keys文件 authorized_keys文件内容为每台机器需远程登录用户的目录下~/.ssh/id_rsa.pub文件内容的汇总。
以下使用A、B、C三台机器讲述。
首先,每台机器的hosts文件存在以下映射信息。其中一台机器如下:
[hadoop@A /]# cat /etc/hosts
192.168.0.1 A
192.168.0.2 B
192.168.0.3 C
然后,每台机器已通过本章节的内容,生成各自的id_rsa.pub文件。下面把B和C机器的id_rsa.pub文件内容汇总A的authorized_keys中。
# 把B的id_rsa.pub内容追加到A机器的hadoop用户的.ssh/authorized_keys。
# 提示:
# 1.如果A中不存在authorized_keys,会自动创建一个。存在则在authorized_keys文件尾部追加。
# 2.如果打算考入A机器的其它用户,可修改A为root@A,root为目标用户。
# 3.如果命令不存在,则需安装命令包:yum -y install openssh-clients
[hadoop@B ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub A
hadoop@A's password: (需输入A机器hadoop用户的密码)
[hadoop@C ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub A
hadoop@A's password: (需输入A机器hadoop用户的密码)
# 追加A的id_rsa.pub信息。如果已操作过此步骤,可忽略。
[hadoop@A ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 查看A中authorized_keys的内容,确认已包含三台机器的公钥信息
[hadoop@A /home/hadoop/.ssh]# cat authorized_keys
ssh-rsa
Lt/Bg0HxiEL5SDhT hadoop@A
ssh-rsa
7sR3R+pfHFg461Ra0v+uud03 hadoop@B
ssh-rsa
7sR3R+pfHFg461Ra0v+uud03 hadoop@C
# 拷贝authorized_keys到B和C机器
[hadoop@A ~]$ scp -p ~/.ssh/authorized_keys B:/home/hadoop/.ssh/authorized_keys
[hadoop@A ~]$ scp -p ~/.ssh/authorized_keys C:/home/hadoop/.ssh/authorized_keys
# 进行测试,正常则无需输入登录密码
[hadoop@A ~]$ ssh B
六、服务器开机字符界面
# 查看当前的启动模式
[root@hadoop-master /]# systemctl get-default
# 设置字符界面(省资源,操作系统漏洞少),重启生效
[root@hadoop-master /]# systemctl set-default multi-user.target
# 设置图形界面,重启生效
[root@hadoop-master /]# systemctl set-default graphical.target
七、多台机器拷贝相同文件
脚本来自徐培成老师
[root@hadoop-master /]# vi /usr/local/bin/xrsync.sh
#!/bin/bash
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
p=$1
dir=`sudo dirname $p`
filename=`sudo basename $p`
cd -P $dir
fullpath=`pwd -P .`
user=`whoami`
# 使用rsync增量同步,hadoop-master2为目标机器域名
rsync -lr $p $user@hadoop-master2:$fullpath
# 循环拷贝相似名称的机器,hadoop-dn1,hadoop-dn2,hadoop-dn3
i=1
for (( i=1 ; i<=3 ; i=$i + 1 )) ; do
echo ================ dn$i ==================
rsync -lr $p $user@hadoop-dn$i:$fullpath
done
执行保存: Esc :wq
[root@hadoop-master /]# chmod +x /usr/local/bin/xrsync.sh
# 拷贝/root/demo.txt到其他机器同目录下,使用前建议设置免密登录到目标机器(单向传输的话,其他机器都已存在源机器的authorized_keys文件)
[root@hadoop-master /]# xrsync.sh /root/demo.txt
# 拷贝/root/demo目录到其他机器同目录下
[root@hadoop-master /]# xrsync.sh /root/demo
八、多台机器同时执行相同命令
脚本来自徐培成老师
[root@hadoop-master /]# vi /usr/local/bin/xcall.sh
#!/bin/bash
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
params=$@
echo ================ master2 ==================
ssh hadoop-master2 "$params"
i=1
for (( i=1 ; i<=3 ; i=$i + 1 )) ; do
echo ================ dn$i ==================
ssh hadoop-dn$i "$params"
done
执行保存: Esc :wq
[root@hadoop-master /]# chmod +x /usr/local/bin/xcall.sh
[root@hadoop-master /]# xcall.sh jps
九、Kafka集群命令
注释的地方也可以开启使用,用途是只使用内置的节点服务器域名,不接收传入的参数。今后大家可以通过此脚本的思路,扩展成其它用途的脚本。
启动的脚本:
[root@hadoop-master /]# vi /usr/local/bin/kafka-cluster-start.sh
#!/bin/bash
# broker机器域名列表
#brokers=("broker1 broker2 broker3")
KAFKA_HOME="/soft/kafka"
echo "Begin to start kafka cluster..."
for arg in $@
#for broker in ${brokers[@]}
do
#echo " start kafka on ${broker}"
echo " start kafka on $arg"
#ssh hadoop@$arg -C "source /etc/profile; sh ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon /home/hadoop/kafka/config/server.properties"
#ssh hadoop@${broker} -C "source /etc/profile; sh ${KAFKA_HOME}/bin/kafka-server-start.sh -daemon /home/hadoop/kafka/config/server.properties"
ssh $arg -C "service kafka start"
if [ $? -eq 0 ]; then
#echo " [${broker}] start successfully "
echo " [${arg}] start successfully "
fi
done
echo "Kafka cluster starts successfully !"
执行保存: Esc :wq
[root@hadoop-master /]# chmod +x /usr/local/bin/kafka-cluster-start.sh
# 传入待启动的节点信息(支持多个)
[root@hadoop-master /]# kafka-cluster-start.sh broker1 broker2
停止的脚本:
[root@hadoop-master /]# vi /usr/local/bin/kafka-cluster-stop.sh
#!/bin/bash
#brokers=("broker1 broker2 broker3")
KAFKA_HOME="/soft/kafka"
echo "Begin to stop kafka cluster..."
for arg in $@
#for broker in ${brokers[@]}
do
#echo " stop kafka on ${broker}"
echo " stop kafka on $arg"
#ssh hadoop@${broker} -C "source /etc/profile; sh ${KAFKA_HOME}/bin/kafka-server-stop.sh "
# ssh root@${broker} -C "service kafka stop"
ssh root@$arg -C "service kafka stop"
if [ $? -eq 0 ]; then
#echo " [${broker}] stop successfully "
echo " [${arg}] stop successfully "
fi
done
echo "Kafka cluster stop successfully !"
执行保存: Esc :wq
[root@hadoop-master /]# chmod +x /usr/local/bin/kafka-cluster-stop.sh
# 传入待停止的节点信息(支持多个)
[root@hadoop-master /]# kafka-cluster-stop.sh broker1 broker2
十、防火墙
# 查看状态
[root@hadoop-master /]# systemctl status firewalld
# 关闭
[root@hadoop-master /]# systemctl stop firewalld
# 启动
[root@hadoop-master /]# systemctl start firewalld
# 重启
[root@hadoop-master /]# systemctl restart firewalld
# 禁用开机启动服务
[root@hadoop-master /]# systemctl disable firewalld
# 启用开机启动服务
[root@hadoop-master /]# systemctl enable firewalld
# 永久开放端口
[root@hadoop-master /]# firewall-cmd --zone=public --add-port=80/tcp --permanent
# 不改变状态的条件下重新加载防火墙
[root@hadoop-master /]# firewall-cmd --reload
# 查询端口号80 是否开启
[root@hadoop-master /]# firewall-cmd --query-port=80/tcp
# 查询哪些端口是开启
[root@hadoop-master /]# firewall-cmd --list-port
# 闲麻烦,可以关闭掉美国国家安全局开发的功能(安全增强型Linux内核模块)
[root@hadoop-master /]# vi /etc/selinux/config
设置SELINUX=disable
# 查看selinux状态
[root@hadoop-master /]# getenforce
Centos6防火墙命令
# 查看防火墙状态:
[root@hadoop-master /]# service iptables status
# 开启防火墙(即时生效,重启后失效):
[root@hadoop-master /]# service iptables start
# 关闭防火墙(即时生效,重启后失效):
[root@hadoop-master /]# service iptables stop
# 重启防火墙:
[root@hadoop-master /]# service iptables restart
# 开启防火墙(重启后永久生效):
[root@hadoop-master /]# chkconfig iptables on
# 关闭防火墙(重启后永久生效):
[root@hadoop-master /]# chkconfig iptables off
# 查看打开的端口:
[root@hadoop-master /]# /etc/init.d/iptables status
# 开启端口:
[root@hadoop-master /]# iptables -A INPUT -p tcp --dport 6000 -j ACCEPT
# 打开49152~65534之间的端口
[root@hadoop-master /]# iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
# 直接编辑规则文件
[root@hadoop-master /]# vi /etc/sysconfig/iptables
# 保存规则并重启防火墙:
[root@hadoop-master /]# /etc/init.d/iptables save
# 同service iptables restart
[root@hadoop-master /]# /etc/init.d/iptables restart