Hadoop分布式集群环境搭建记录

  • Post author:
  • Post category:其他




9000端口未开放,报错“call from xxxx to xxxx:9000 failed on connection…connection refused”

做实验时发现启动hadoop可以正常启动,在各个节点上jps都能看到相应的进程名字,但是在使用hdfs dfs -ls 之类的hadoop命令时报错“call from xxxx to xxxx:9000 failed on connection…connection refused”

于是使用netstat -tlpn命令查看端口开放情况,发现端口9000虽然存在,但地址是0.0.0.0,这个地址是连本机也ping不通的,所以才会报这样的错。

遇到端口未开放的问题,一般都是以下这几步曲:

1、关闭防火墙

sudo ufw disable

2、查看core-xml文件中的配置

<property>
	<name>fs.defaultFS</name>
    <value>hdfs://Master:9000</value>
</property>

其中Master这里要写你对应的主机名,

不可以写localhost

,这里如果写localhost的话启动起来绑定的地址就是127.0.0.1,这样的话只有你本机能够访问9000端口,集群中的其他机器是无法访问的。

3、进入/etc/hosts文件,将127.0.1.1以及::1那两行注释掉。

如果不讲::1那行注释掉,那么地址就会绑定到0.0.0.0,这样是访问不到的。

完成之后我们可以通过netstat -tlpn命令查看端口开放情况

在这里插入图片描述

或者通过netstat -anpl|grep 9000直接查看9000端口,可以看到地址是本机的ip地址就没问题了。

在这里插入图片描述

4、格式化namenode

hadoop namenode -format

5、重启hadoop



hadoop启动正常,端口开放正常,但是从节点无法连接主节点

这个问题是我开开心心解决完上一个问题后第二天打开虚拟机遇到的,当时找了半天不知原因出在哪,后来手动ping了一次主节点的主机名发现ping不通了,在主节点ifconfig一下才发现主节点ip地址已更换。

问题的根源就是,由于我配置的两台从节点是在另一台windows电脑上的,而主节点是在我的mac上的,为了让它们能相互通信,虚拟机网络自然设置的是桥接模式,虚拟机直接连接到路由器,而由于DHCP(动态主机配置协议)的存在,虚拟机的ip地址会变化,此时hosts文件中的主机名映射的地址也就不对了,自然连接不上。

所以解决的方法就是将ubuntu的ip设置为静态ip

1、ifconfig查看自己的网卡名

在这里插入图片描述

如图我的网卡名就是enp0s5

2、编辑配置文件

sudo vi /etc/network/interfaces

在其中添加如下字段,其中address为你想设置成的静态地址,子网掩码和网关都按照你物理机的来设置就可以,保存退出。

在这里插入图片描述

3、重启网络

sudo /etc/init.d/networking restart

4、配置DNS,修改以下文件,DNS同样设置成跟物理机一样的即可

sudo vi /etc/systemd/resolved.conf



hadoop时间与ubuntu时间不一致,时区不对

一开始执行hdfs dfs -ls -R时就已经看到了时间不对,当时偷懒,觉得也没什么问题,但是后面发现hive的脚本要从hdfs取数据的时候由于时间的问题没办法取,没办法还是得解决这个问题。

Vim hadoop-env.sh
#添加这行
export HADOOP_OPTS="$HADOOP_OPTS -Duser.timezone=GMT+08"

Vim yarn-env.sh
#添加这行
YARN_OPTS="$YARN_OPTS -Duser.timezone=GMT+08"



版权声明:本文为x_k_b原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。