海牛大数据教你Hadoop 如何批量操作多台服务器
2018-01-03 14:32
411 查看
原文地址:http://hainiubl.com/topics/80#reply42
1. 每个虚拟机设置静态IP
cd /etc/sysconfig/network-scripts/ifconfig/ip add 查看网卡的硬件名称和基本信息
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/486acc2f06bb47506a6894a88ffaccea.png)
记下这个UUID
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/f2579cf6e9f3dd700572c62613e7d57e.png)
以下内容回帖刷新可见………………#
网卡配置例子TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.137.190"
NETMASK="255.255.255.0"
GATEWAY="192.168.137.1"
DNS="192.168.137.1"
NM_CONTROLLED="no"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
UUID="ec7dbe05-3175-4f67-9a43-24b144ab51b5"
ONBOOT="yes"
VIM使用,按i进入编辑模式,按gg到文件的顶部,shift+g到文件的底部,dd删除光标所以行,u等于word里的ctrl+z,ctrl+r等于word里的ctrl+y
vim /etc/sysconfig/network-scripts/ifcfg-<网卡的硬件名称>
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/fc4c95ee6e3bc281485960a4b9e4d80f.png)
配置完的网卡文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/6c26832fa678e6a16438ca17a7e1cfe5.png)
查看结果
原来的
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/ad95ce4d7b031d888693ca0166ce6996.png)
注意修改完文件之后用systemctl restart network.service重启网络服务,当前的ssh就连接不上了,是因为网络IP被改变成你自己设置的静态IP了
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/edeb7f313b8fb8dead56ed9a83fc2ff4.png)
修改完成再连接,用ip add查看修改完成的结果
![](http://blog.csdn.net/wilhelmina_carmel/article/details/htt<br/>4000<br/>p:/hainiubl.com/uploads/images/201705/07/12/GD2a0i4sIE.png)
如果上不了网执行以下操作。
cat /etc/resolv.conf 查看nameserver是否被设置正确
systemctl stop NetworkManager.service 停止NetworkManager服务
systemctl disable NetworkManager.service 并设置成开机不启动
systemctl restart network.service 之后重启网络服务
vim /etc/resolv.conf 修改文件,如果不存在nameserver就在文件下面添加,如果存在就修改,把nameserver 设置成自己对应的DNS
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/1821308eafb2486347d0b90da468c3ad.png)
2. 修改每个机器的主机名#
修改另外3台的主机名hostnamectl set-hostname s1.hadoop
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/3215401981bdfaec571fcf9e9099ff68.png)
3. 配置HOSTS文件#
修改/etc/hosts文件vim /etc/hosts,把刚才配置的固定IP加到文件里
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/d849358debca1d72aaa50d717d11ee89.png)
把其他3台机器的hosts文件也修改成上面这个样子
4. 批量执行与批量分发脚本使用#
首先切换到hadoop用户ssh到别一台机器上执行命令全,例子:ssh hadoop@s1.hadoop hostname
scp一个文件到别一台机器上,例子:scp /home/hadoop/1 hadoop@s1.hadoop:/home/hadoop/
把hadoop_op1.zip文件用rz命令上传到nn1.hadoop机器上
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/5f5d5864a4d3587c938ad6c688b1cf26.png)
一般先切换到当前使用用户的home目录下
cd/cd ~
unzip hadoop_op1.zip
解压
chmod -R 777 ./hadoop_op1 修改解压之后的文件权限
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/dae0e3476df1383dd50274812e8c63e8.png)
测试批量SSH命令
./ssh_all.sh hostname
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/919dba3e876439103656eecac17a4fd4.png)
测试批量传文件
首先在/home/hadoop/up/目录下创建个测试文件,这里的文件是“1”
./scp_all.sh ./up/1 /tmp/
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/994596e86cfd07dec0796235b3ed6ddd.png)
可以用./ssh_all.sh cat /tmp/1用这个命令去验证
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/7149588bf5fa449120559f734c15eb6f.png)
5. 单机hadoop用户加上免密码切换root用户#
1).sed -i 's/#auth\t\trequired\tpam_wheel.so/auth\t\trequired\tpam_wheel.so/g' '/etc/pam.d/su'修改/etc/pam.d/su文件,将“#auth\t\trequired\tpam_wheel.so”,替换成“auth\t\trequired\tpam_wheel.so”
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/0c7dd5b7467090f613c7abb51aac6561.png)
2).cp /etc/login.defs /etc/login.defs_back 先备份一个
echo "SU_WHEEL_ONLY yes" >> /etc/login.defs 把“SU_WHEEL_ONLY yes”字符串追加到/etc/login.defs文件底部
tail /etc/login.defs 从文件底部查看
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/d795bf8b10b42f85baa59f3d683ab746.png)
3).usermod -a -G wheel hadoop 把hadoop用户加到wheel组里
4).groupmems -g wheel -l 使用这个命令查看wheel组里是否有hadoop用户
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/b2c8e723a1338ec81d9fd0c69994cb5f.png)
5).新建一个hainiu用户验证一下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/94fb6db46b2fe5bb96b7a7c11380ec2b.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/8fe228e63f77cd60050afbba7da71562.png)
输入密码之后提示无SU权限,即使密码正确也不好使
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/b58c96c29f5e00a047fa098bd9f4e67e.png)
6).sed -i 's/#auth\t\tsufficient\tpam_wheel.so/auth\t\tsufficient\tpam_wheel.so/g' '/etc/pam.d/su'
修改/etc/pam.d/su文件将字符串“#auth\t\tsufficient\tpam_wheel.so”替换成“auth\t\tsufficient\tpam_wheel.so”
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/3803919325a457252a1c56aa1c683eb6.png)
7).验证免密码切换到root用户
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/e7772d7145f4278dd1adc2a8e333e6c9.png)
6. 给每个机器的hadoop用户加上免密码切换root用户#
配置好每个机器的root ssh免密钥登录然后在nn1.hadoop机器上切换到root用户
把批量执行脚本用rz上传到root用户的根目录下
用unzip hadoop_op1.zip把文件解压出来
删除没用的只留下以下有用的,并对有用的脚本加上可执行权限chmod -R +x ~/hadoop_op1
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/96baf12fd9e4b4dfd10baa6a86bad2ab.png)
修改脚本 vim ssh_all.sh,将使用用户修改为root用户
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/72cc0766358c9347157996ce40ad8362.png)
修改脚本vim scp_all.sh,将使用用户修改为root用户
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/b9877743b3ea2bd8bd05f42390573e69.png)
注:在Linux中wheel组就类似于一个管理员的组。将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户
剥夺普通用户切换root用户
用ssh_all.sh脚本批量修改 /etc/pam.d/su 文件,找到auth required pam_wheel.so use_uid 这一行,将行首的“#”去掉。
~/hadoop_op1/ssh_all.sh sed -i \'s/#auth\t\trequired\tpam_wheel.so/auth\t\trequired\tpam_wheel.so/g\' \'/etc/pam.d/su\'
使用~/hadoop_op1/ssh_all.sh head /etc/pam.d/su 查看每个机器上是否修改成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/41560de5137c997122f98237737e562a.png)
修改 /etc/login.defs 文件,在最后一行增加“SU_WHEEL_ONLY yes”语句。
~/hadoop_op1/ssh_all.sh "echo \"SU_WHEEL_ONLY yes\" >> /etc/login.defs"
使用~/hadoop_op1/ssh_all.sh tail /etc/login.defs 查看每个机器上是否修改成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/4a7150a7476d5d2253db37a075aa7745.png)
指定某用户能切换到root用户,就将他加到wheel组里
~/hadoop_op1/ssh_all.sh usermod -a -G wheel hadoop
从wheel组移出就不能切换到root用户了
~/hadoop_op1/ssh_all.sh gpasswd -d hadoop wheel
查看wheel组下的用户,也就是能切换到root的用户有那些
使用~/hadoop_op1/ssh_all.sh groupmems -g wheel -l查看每个机器上是否添加成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/d6c213bd9e01500733bdee6a5f414242.png)
解释:如果换成一个不属于wheel组的用户时,执行了su命令后,即使输入了正确的root密码,也无法登录为root用户--普通用户登录为root用户的权限被完全剥夺了
切换到root用户时免密登录
修改 /etc/pam.d/su 文件,找到auth sufficient pam_wheel.so trust use_uid 这一行,将行首的“#”去掉。
~/hadoop_op1/ssh_all.sh sed -i \'s/#auth\t\tsufficient\tpam_wheel.so/auth\t\tsufficient\tpam_wheel.so/g\' \'/etc/pam.d/su\'
使用~/hadoop_op1/ssh_all.sh head /etc/pam.d/su查看每个机器上是否修改成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/52dde1f6df7152b796cf06a0129c1328.png)
7. 在hadoop用户状态下,如何在每个机器上使用root权限去执行命令#
切换到hadoop用户下,并用rz上传exe.sh脚本然后使用~/hadoop_op1/scp_all.sh ~/hadoop_op1/exe.sh /home/hadoop/
把exe.sh复制到每个机器上
然后使用~/hadoop_op1/ssh_all.sh ls /home/hadoop/每个机器上文件是否被分发成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/48b4fbbbea0c7eb3d492da35299b731b.png)
使用vim将ssh_root.sh里的ssh用户更改成hadoop
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/3810f9edec1a183ebe072050378b7025.png)
然后使用ssh_root.sh测试一下每台机器是否能从hadoop用户切换到root权限
~/hadoop_op1/ssh_root.sh groups,每台机器切换到root用户并打印root用户所属组
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/c3a25f0fdd88ecb16886f979b40cf774.png)
8. 修改每个机器的HOSTS文件#
在nn1.hadoop机器上使用hadoop用户将/etc/hosts文件拷贝到/tmp目录下cp /etc/hosts /tmp
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/72fcd4d7011ef6ccc3f7a2ae4924bef5.png)
使用~/hadoop_op1/scp_all.sh /tmp/hosts /tmp/,把nn1.hadoop上配置好的host拷贝到每台机器的/tmp目录下
使用~/hadoop_op1/scp_all.sh ~/hadoop_op1/up/hosts_op.sh /tmp/,把hosts_op.sh脚本拷贝到每台机器的/tmp目录下
使用~/hadoop_op1/ssh_all.sh ls -all /tmp/确认这两个文件是否拷贝成功,并查看hosts_op.sh脚本是否拥有执行权限
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/dcf5b4edca147c6430632908462f6f84.png)
使用 ~/hadoop_op1/ssh_all.sh mv /tmp/hosts /tmp/hosts_log,把每台机器上的tmp目录下的hosts文件重命名为hosts_log
使用 ~/hadoop_op1/ssh_all.sh ls /tmp/ 查看是否重命名成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/fc5230e68e80bb47a020917782533983.png)
使用~/hadoop_op1/ssh_root.sh /tmp/hosts_op.sh,把每个机器上的hosts文件进行配置好的,也就是hosts_log的内容
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/fee91c40a817548f37abcf218a01cb7d.png)
使用~/hadoop_op1/ssh_root.sh cat /etc/hosts,查看每台机器上的hosts文件是否修改成功
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/ca421f4ebd5c0e9407143c8bfac486d6.png)
也可以使用~/hadoop_op1/ssh_all.sh ping -c 1 nn1.hadoop,查看每台机器是否能ping通nn1.hadoop,如果能ping通表示hosts修改成功并生效
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/02/7c9890083df8e2a4b8b0789151257ad3.png)
相关文章推荐
- hibernate如何进行批量的数据操作,防止内存溢出
- 如何实现两台服务器间无密码的传输数据和操作
- 如何实现两台服务器间无密码的传输数据和操作
- Hibernate中如何管理session和批量操作数据
- 采用浏览器端操作减小服务器负担——数据批量录入一次提交
- ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据
- ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据
- raid磁盘阵列OFFLINE后如何操作挽救数据
- MySQL误操作后如何快速恢复数据
- SQL不同服务器数据库之间的数据操作整理(完整版)
- SQL不同服务器数据库之间的数据操作整理
- Java操作Excel(三)将Excel中的数据批量的导入数据库
- UITableView,UICollectionView和CoreData完美结合进行增删改操作,如何导入大量数据,如何利用NSEntityMigrationPol
- 游戏服务器中的数据库异步操作技术和游戏数据的保存机制
- sql server如何将高版本的数据迁移到低版本中。解决数据库 'XX' 的版本为 655,无法打开。此服务器支持 611 版及...
- 在SQLserver里如何在视图里连接到其他服务器数据?-MS-SQLServer
- 零售业如何用Hadoop开启大数据之门?
- (来源于我天一校友网) 如何用linq操作DataTable中的数据
- MySQL操作失误,如何恢复数据
- 如何编程操作Web.config文件中的数据