1. 安装环境
硬件:三台PC,配置 Intel i5 4 Core CPU, 16G memory, 2T 硬盘
软件: 两台PC为ubuntu 14.04, 一台为ubuntu 16.04 ; hadoop-2.8.0, hive-1.2.2, mysql 5.5.55, jdk-8u131-linux-x64.tgz (1.8.0_131)
机器分配: 一台ubutn 14.04的主机作maste, 其他作slave
登陆帐号:方便期间,三台机器上都创建用户名/密码为 hadoop/hadoop 的帐号
2. 各种问题及解决办法
2.1. 从master通过ssh登陆slave后,.bashrc中增加的环境变量没起作用, 直接在slave上 echo .bashrc中export的变量是正常的
问题原因: 创建hadoop帐号时,默认的shell 是/bin/sh 而不是/bin/bash ,导致ssh 登陆后根本不会执行.bashrc中的设置。
echo $SHELL 可查看当前的shell 或 vim /etc/passwd 查看用户hadoop的最后一个字段。
不同登陆方式执行的配置脚本不同,主要涉及login shell 和non-login shell 的区别,简单说区别如下,
“login shell” 代表用户登入, 比如使用 “su -“ 命令,或者用 ssh 连接到某一个服务器上, 都会使用该用户默认 shell 启动 login shell 模式.
该模式下的 shell 会去自动执行 /etc/profile 和 ~/.profile 文件, 但不会执行任何的 bashrc 文件, 所以一般在 /etc/profile 或者 ~/.profile 里我们会手动去 source bashrc 文件, 或把.bashrc中的内容放在.profile中;
而 no-login shell 的情况是我们在终端下直接输入 bash 或者 bash -c “CMD” 来启动的 shell.该模式下是不会自动去运行任何的profile文件.
解决办法:原因知道了,解决就容易了。
a. 修改 hadoop 用户的shell为/bin/bash; /// 创建时设置 如,useradd -m -g hadoop hadoop -s /bin/bash ,或 sudo vim /etc/passwd 中修改,或 chsh
b. .bashrc中的声明语句放在.profile中或在.profile增加.bashrc的调用, 后者更方便,同时满足两种登陆方式。
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
补充: 两种登陆方式的更多区别,见 https://wido.me/sunteya/understand-bashrc-and-profile/
2.2 帐号hadoop 没有执行sudo 的权限
解决办法: 修改//etc/sudoers 的400权限为640后或 sudo chmod u+w /etc/sudoers后,sudo vim /etc/sudoers 增加 hadoop ALL=(ALL:ALL) ALL
或使用系统提供的工具修改,避免发生意外: sudo visudo /etc/sudoers 后增加上面hadoop 一行
注意: 安全期间,这个文件的权限是400即任何人是只读的,修改前不能随便该为775等大权限的,否则连sudo 都不能执行,一定要谨慎。
2.3 sudo 失效
修改/etc/sudoers文件权限过大后like 775 ,再执行sudo命令会报如下错误,sudo 失效。
sudo echo $PATH
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: una