昨天在机房呆了一天,忙活着部署hadoop分布式节点。在网上查了一些部署的资料,其中有一步是为所有的节点创建同样的用户'hadoop',并且加入到%admin组中。自己在做的时候提示%admin组不存在,其实Ubuntu系统中可以使用usermod username -g root的方式加入到管理组中,不晓得为什么自己的机器上使用%admin就提示找不到这个组。
     Ubuntu默认把安装系统的用户加入到%admin组中,从而可以直接使用sudo来执行root权限的命令,但是自己阴差阳错之下把hadoop移除了%admin,从而无法执行sudo命令,提示不存在sudoers文件中了。所以解决的办法也很简单,只需要使用上面的命令把hadoop重新加入到管理组就可以了。问题虽然解决了,但是还是不甘心,决心去看看/etc/sudoers文件是个神马东东,于是打开文件:

点击(此处)折叠或打开

1. #
2. # This file MUST be edited with the 'visudo' command as root.
3. #
4. # Please consider adding local content in /etc/sudoers.d/ instead of
5. # directly modifying this file.
6. #
7. # See the man page for details on how to write a sudoers file.
8. #
9. Defaults    env_reset
10. Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
11. 
12. # Host alias specification
13. 
14. # User alias specification
15. 
16. # Cmnd alias specification
17. 
18. # User privilege specification 
19. %root    ALL=(ALL:ALL) ALL
20. 
21. # Members of the admin group may gain root privileges
22. %admin ALL=(ALL) ALL
23. %hadoop ALL=(ALL) ALL
24. # Allow members of group sudo to execute any command
25. %sudo    ALL=(ALL) ALL
26. 
27. # See sudoers(5) for more information on  "#include" directives:
28. 
29. #includedir /etc/sudoers.d
       上面黑体加粗的三个命令就是关键的三条策略,第一个User Privilege用来指定用户组root可以转变成任何其他的用户;第二个策略用来指定下列的admin组和hadoop组成员都可以使用sudo命令获取root权限;第三个策略则用来指定sudo命令可以执行的操作。对于一个具体的格式而言: 

      %hadoop ALL=(ALL) ALL 

 -%hadoop:针对hadoop组成员 

 -1st-ALL:适用的主机,尤其对于分布式系统来说,可以指定具体的主机名 

 -2nd-ALL:括号内的ALL表示hadoop组成员可以使用何种身份来执行sudo命令 

 -3rd-ALL:hadoop组成员可以扮演任何角色使用sudo命令执行哪些操作,比如/usr/bin/find, /usr/bin/rm等,ALL表示全部命令范围 

      了解了这些策略,可以直接在相应的项下添加自己的用户组,既可以赋予除了默认安装系统的用户之外的其他用户使用sudo命令的权限,也可以使用指定该用户使用sudo运行的操作种类来细化用户和组的管理,这里为了与用户名区分,%表示用户组名。 


       昨天遇到的另一问题是在为节点配置DNS的时候,通常的位置/etc/resolv.conf在Ubuntu下行不通了,即便配置了DNS,每次重启后都会被清空。其实文件头已经给出了提示:不要手动配置本文件,每次启动均会被重写。重写?没错,主要原因在于Ubuntu每次启动resolvconf服务都会使用/etc/resovlconf/resolv.conf.d/base文件内容重写该文件,因此解决DNS的问题有两种方法: 

 1. 在base文件中填写DNS名称; 

 2. 直接在网卡接口配置文件/etc/network/interfaces中填写DNS,在IP-NetMask-Gateway配置好后直接添加: 

dns-nameservers DNS-IP
 即可



     两个问题虽然都不难,但是在不能上网的机房里还是让自己费了不少功夫。幸好昨天忙活了半天配好了网络,可以在工位上远程操作省下不少功夫了。