hadoop压缩包移动到/usr/local/目录下失败

这应该是/usr/local属于管理员,用户没有权限,网上有坑人的办法:

1
sudo chmod -R 777 /usr/local

甚至有人:

1
sudo chmod -R 777 /usr

这完全是坑人的做法,-R表示递归执行,即/usr目录下的所有文件夹、文件都改成了777的权限。那么你以后就再也不能用sudo、su命令了。

最好的做法是创建一个文件夹作为中转站:

1
sudo mkdir /usr/local/hadoop

这个新建的hadoop文件夹就是中转站。

然后改变该文件夹的拥有者:

1
sudo chown hadoop103 /usr/local/hadoop

即可正常传过来了。

然后再移动位置…

开启集群服务时报权限不足的错

产生这个问题的原因可能是ssh登录自己仍然需要密码。请检查一下:

1
ssh localhost

如果需要输入密码,则:

1
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

即给自己一把公钥。如果您还没有公钥,请:

1
ssh-keygen -t rsa

生成公钥,然后在执行上一步给自己公钥。

当然也有可能是自己的公钥没有给某台服务器,自行检查,然后递交

1
ssh-copy-id 目标IP

集群中有一个或两个节点的服务没有启动

多半是workers文件有问题,请前去修改。

如果三个都没启动,这是集群启动脚本出现问题了(或者是集群配置)。

也有可能是没有配置$HADOOP_HOME就使用脚本了,脚本里有这个内容,需要先配置hadoop的环境变量。

启动服务时,Yarn的NodeManager服务没有启动

其他的服务全都正常启动了,唯独Yarn的NodeManager一个没有启动。这种情况可能有两种原因:

  1. 配置文件写得有问题,稳妥起见请检查所有配置文件(配置的那4个),也有可能是两个节点的服务器的文件内容不一致,请利用分发脚本统一。
  2. 权限问题,请参看上述第一点,克隆公钥给自己

关闭Yarn有WARNING

1
2
hadoop105: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
hadoop103: WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9

这个是服务器安全高产生的,其实不用管。如果输入:jpsall看到NodeManager服务已经关闭了,就不用管了,如果没有关闭则单独关闭一次Yarn即可:$HADOOP_HOME/sbin/stop-yarn.sh

没有用的话就开启hdfs在关闭yarn(因为一般是要求是先关闭yarn再关闭hdfs)

访问Web网站相关问题

Hadoop集群正常启动(jpsall该启动的服务全都启动了),但是还是无法浏览器访问。

例如:无法访问hadoop103:9870。

防火墙

检查虚拟机防火墙是否关闭:

1
systemctl status firewalld

正常情况,如果是跟着我走的流程的话应该是连这个防火墙服务都没有的。

如果确实是防火墙没关,则:

1
2
systemctl stop firewalld
systemctl disable firewalld.service

其实主机能够 ping 通虚拟机,就说明了虚拟机的防火墙是关闭状态。

hosts映射

您有可能没有编写hosts映射(Windows或Mac中),查看:

如果将hadoop103改为192.168.64.103 。即改为IP,访问:192.168.64.103:9870,成功访问,则就是hosts配置错误。

在主机中输入:vim /etc/hosts查看是否正确映射。如果是Windows,则在C:\Windows\System32\drivers\etc下。

如果不正确则修改,或者没有配置则添加。

正确格式为:

1
2
3
4
IP hadoop10x

例如:
192.168.64.103 hadoop103

主机检查完了,再挨个检查三台虚拟机是否也正确配置了hosts。

检查hdfs配置文件是否配好

正确内容(注意看value内的内容是否正确,是否和你的hosts映射一样):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop103:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop105:9868</value>
</property>
</configuration>

不确定的情况

这个我其实也没拿捏到位:

我发现/etc/hosts发现第二行是:127.0.1.1 hadoop103,如图:

配置端口号

然后我ping localhost是ping的127.0.0.1。然后ping hadoop103 ping的是127.0.1.1 。然后我把第二行这个删掉了,再启动集群就可以正常访问了。

我有这个想法是看到一片文章将hadoop103:9870改成0.0.0.0:9870就成功了,根据0.0.0.0的特性,我大概就猜到了配置文件最后启动的hadoop103应该是不我配置的静态IP,而是127.0.0.1 。

我目前是把三台虚拟机的第二行都删除了。

我也不太清楚删除这个第二行会不会有什么影响,因为它是默认就有的内容,我总感觉好像不能轻易删除。如果有友友知道删除会出现什么问题,麻烦提醒下我。如果可以用其他办法解决也提醒下我。