Hadoop:java.net.UnknownHostException:hadoop-slave-2
Hadoop: java.net.UnknownHostException: hadoop-slave-2
我创建了一个有 1 个主节点和 2 个从节点的 hadoop 集群。我在 *-site.xml 文件中 运行 以最低规格设置它。
核心-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.0.0.51:9000</value>
</property>
</configuration>
hfds-site.xml
<configuration>
<property>
<name>dfs.datanode.name.dir</name>
<value>~/DNfiles</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
纱-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>10.0.0.51:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>10.0.0.51:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>10.0.0.51:8050</value>
</property>
</configuration>
问题是我能够格式化 namenode,将文件放入 hfs 等等,但是当我 运行 一个简单的例子时,我得到以下错误。
Container launch failed for container_1455133326738_0002_02_000007 : java.lang.IllegalArgumentException: java.net.UnknownHostException: hadoop-slave-2 at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:377)
at org.apache.hadoop.security.SecurityUtil.setTokenService(SecurityUtil.java:356)
at org.apache.hadoop.yarn.util.ConverterUtils.convertFromYarn(ConverterUtils.java:238)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy$ContainerManagementProtocolProxyData.newProxy(ContainerManagementProtocolProxy.java:266)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy$ContainerManagementProtocolProxyData.<init>(ContainerManagementProtocolProxy.java:244)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy.getProxy(ContainerManagementProtocolProxy.java:129)
at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl.getCMProxy(ContainerLauncherImpl.java:409)
at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$Container.launch(ContainerLauncherImpl.java:138)
at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$EventProcessor.run(ContainerLauncherImpl.java:375)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: hadoop-slave-2
虽然程序继续通过与其他从站一起工作来完成,即 1 个从站可以访问,但其他不能访问,尽管它们具有相同的配置。
因为我能够格式化,所以我假设主节点中的 /etc/hosts 文件没问题。这是它的片段。
ubuntu@hadoop-master-1:~/hadoop-2.7.1/bin$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.51 hadoop-master-1
10.0.0.36 hadoop-slave
10.0.0.38 hadoop-slave-2
10.0.0.39 hadoop-slave-1
10.0.0.40 hadoop-slave-3
10.0.0.41 hadoop-slave-4
slave 的主机文件
ubuntu@hadoop-slave-1:~/hadoop-2.7.1/bin$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.39 hadoop-slave-1
10.0.0.51 hadoop-master-1
有谁知道可能是什么问题?任何帮助或可能的指示将不胜感激。
问题出在slaves的/etc/hosts文件上。放置文件和格式化 namenode 时没有错误的原因是 master 与所有 slaves 通信并且它具有所有这些 slaves 的 ip 地址。但是一旦你 运行 集群上的应用程序,应用程序主机就会在其中一个从机上创建。 AM 然后通过 slave 与其他 slave 进行通信。由于从站的主机文件没有它们的地址(根据发布的从站主机文件判断),它给出了一个未知主机错误。
根据经验,确保集群中的所有节点都具有指向集群中每个其他节点的 IP 地址。解决这个问题,错误就会消失。
UnknownHostException 错误,而 运行 Hadoop 应用程序
在 hadoop 2.7.7 上测试。在 Ubuntu 主机上创建了 4 ubuntu 个虚拟机。
1 个虚拟机作为名称节点
3 个虚拟机作为数据节点。
当 /etc/hosts table 使用所有节点的 IP 地址更新时,UnknownHostexception 被删除。
示例:
192.168.2.7 名称节点
192.168.2.11 数据节点 1
192.168.2.12 数据节点2
192.168.2.13 数据节点 3
我创建了一个有 1 个主节点和 2 个从节点的 hadoop 集群。我在 *-site.xml 文件中 运行 以最低规格设置它。
核心-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.0.0.51:9000</value>
</property>
</configuration>
hfds-site.xml
<configuration>
<property>
<name>dfs.datanode.name.dir</name>
<value>~/DNfiles</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
纱-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>10.0.0.51:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>10.0.0.51:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>10.0.0.51:8050</value>
</property>
</configuration>
问题是我能够格式化 namenode,将文件放入 hfs 等等,但是当我 运行 一个简单的例子时,我得到以下错误。
Container launch failed for container_1455133326738_0002_02_000007 : java.lang.IllegalArgumentException: java.net.UnknownHostException: hadoop-slave-2 at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:377)
at org.apache.hadoop.security.SecurityUtil.setTokenService(SecurityUtil.java:356)
at org.apache.hadoop.yarn.util.ConverterUtils.convertFromYarn(ConverterUtils.java:238)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy$ContainerManagementProtocolProxyData.newProxy(ContainerManagementProtocolProxy.java:266)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy$ContainerManagementProtocolProxyData.<init>(ContainerManagementProtocolProxy.java:244)
at org.apache.hadoop.yarn.client.api.impl.ContainerManagementProtocolProxy.getProxy(ContainerManagementProtocolProxy.java:129)
at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl.getCMProxy(ContainerLauncherImpl.java:409)
at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$Container.launch(ContainerLauncherImpl.java:138)
at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$EventProcessor.run(ContainerLauncherImpl.java:375)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: hadoop-slave-2
虽然程序继续通过与其他从站一起工作来完成,即 1 个从站可以访问,但其他不能访问,尽管它们具有相同的配置。 因为我能够格式化,所以我假设主节点中的 /etc/hosts 文件没问题。这是它的片段。
ubuntu@hadoop-master-1:~/hadoop-2.7.1/bin$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.51 hadoop-master-1
10.0.0.36 hadoop-slave
10.0.0.38 hadoop-slave-2
10.0.0.39 hadoop-slave-1
10.0.0.40 hadoop-slave-3
10.0.0.41 hadoop-slave-4
slave 的主机文件
ubuntu@hadoop-slave-1:~/hadoop-2.7.1/bin$ cat /etc/hosts
127.0.0.1 localhost
10.0.0.39 hadoop-slave-1
10.0.0.51 hadoop-master-1
有谁知道可能是什么问题?任何帮助或可能的指示将不胜感激。
问题出在slaves的/etc/hosts文件上。放置文件和格式化 namenode 时没有错误的原因是 master 与所有 slaves 通信并且它具有所有这些 slaves 的 ip 地址。但是一旦你 运行 集群上的应用程序,应用程序主机就会在其中一个从机上创建。 AM 然后通过 slave 与其他 slave 进行通信。由于从站的主机文件没有它们的地址(根据发布的从站主机文件判断),它给出了一个未知主机错误。
根据经验,确保集群中的所有节点都具有指向集群中每个其他节点的 IP 地址。解决这个问题,错误就会消失。
UnknownHostException 错误,而 运行 Hadoop 应用程序
在 hadoop 2.7.7 上测试。在 Ubuntu 主机上创建了 4 ubuntu 个虚拟机。 1 个虚拟机作为名称节点 3 个虚拟机作为数据节点。
当 /etc/hosts table 使用所有节点的 IP 地址更新时,UnknownHostexception 被删除。
示例: 192.168.2.7 名称节点 192.168.2.11 数据节点 1 192.168.2.12 数据节点2 192.168.2.13 数据节点 3