我最近一直在尝试构建和配置(8-Pi)Raspberry Pi 3 Hadoop群集(作为夏季的个人项目)。请多多包涵(不幸的是,我是Hadoop的新手)。我正在使用的是 Hadoop版本2.9.2 。我认为重要的是要注意,现在我试图让一个Namenode和一个Datanode彼此完全正常运行,然后继续进行,并在其余七个Pi上复制相同的过程。
问题:“我的名称”节点(别名:主节点)是“仅唯一”节点,在这两个节点下均显示为“实时 Datanode ” dfs-health界面,并通过使用:
dfsadmin-报告
即使Datanode被显示为“活动节点”(在集群Hadoop UI的节点内),并且“ master”也未在slaves文件中列出。我想要的配置是Namenode不应执行任何Datanode操作。另外,我正在尝试配置集群,使上面的命令将我的Datanode(别名:slave-01)显示为“实时Datanode”。
我怀疑我的问题是由于我的Namenode和Datanode都使用相同的主机名(raspberrypi)引起的,但是我不确定我需要进行哪些配置更改才能解决此问题。在查阅了文档之后,不幸的是,我找不到关于是否允许这样做的结论性答案。
如果有人可以帮助我解决此问题,将不胜感激!我在下面提供了任何相关的文件信息(我认为这对于解决问题可能很有用)。谢谢:)
PS:除非另行指定,否则Namenode和Datanode中的所有文件都是相同的。
================================================ ==========================
我已经从Namenode和Datanode上的slaves文件中删除了localhost,并将它们各自的主机名也更改为'master'和'slave-01'。
运行JPS之后:我注意到所有正确的进程都在主节点上运行,但是在Datanode上却出现了错误,日志显示为该错误:
ExitCodeException exitCode = 1:chmod:更改“ / opt / hadoop_tmp / hdfs / datanode”的权限:不允许操作。
如果有人可以帮助我解决此问题,将不胜感激!不幸的是,尽管使用“ chmod 777”更改了权限,问题仍然存在。在此先感谢:)
================================================ ==========================
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
192.168.1.2 master
192.168.1.3 slave-01
master
localhost
slave-01
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000/</value>
</property>
<property>
<name>fs.default.FS</name>
<value>hdfs://master:9000/</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop_tmp/hdfs/datanode</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop_tmp/hdfs/namenode</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.job.tracker</name>
<value>master:5431</value>
</property>
<property>
<name>mapred.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<configuration>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8050</value>
</property>
</configuration>
答案 0 :(得分:1)
您可以让本地路由器自己提供主机名,而不用自己操纵/etc/hosts
,但是要更改每个Pi的名称,请编辑/etc/hostname
并重新启动。
启动之前和之后,请检查运行hostname -f
注意:一旦拥有“ YARN主机”,“ HDFS主机”,“ Hive主机”等,“主机”实际上就毫无意义。最好用字面意思说namenode
,data{1,2,3}
,{{ 1}},依此类推
关于权限问题,您可以以root用户身份运行所有内容,但这在homelab之外是不安全的,因此,您至少要为yarn-rm
运行一些adduser
命令(如其他地方所述,但是可以是其他任何名称),然后hduser
,然后以这些用户身份运行命令,在yarn
属于这些用户及其所属的Unix组拥有的数据和日志目录之后,