为了“快速”的概念验证,我想通过连接两个虚拟机来建立一个迷你hadoop0.18集群,我在yahoo上发现这两个虚拟机是以伪分布式模式配置的。
在hadoop-vm-1上,我启动了一个完整的集群,其中主节点、从数据节点和tasktracker位于该计算机上。然后我将第二个vm作为hadoop-vm-2,并希望它承载第二个datanode和tasktracker,它将连接到hadoop-vm-1并添加到这个集群。
不幸的是,我无法启动第二个datanode,因为它想连接到本地ipc服务器。这是我希望它连接到hadoop-vm-1的地方。日志内容如下:
2013-02-07 19:55:29954 info org.apache.hadoop.ipc.client:重试连接到服务器:/192.168.17.135:9000。已尝试9次。
2013-02-07 19:55:29958错误org.apache.hadoop.dfs.datanode:java.io.ioexception:本地异常调用失败
..
原因:java.net.connectexception:连接被拒绝
应该使用来自hadoop-vm-1的192.168.17.134而不是ip192.168.17.135(即hadoop-vm-2)。
我想我已经正确地配置了slave的hadoop-site.xxml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-vm-1/</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-vm-1:9001</value>
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
</configuration>
当然,我配置了hosts文件:
127.0.0.1 localhost
127.0.1.1 hadoop-vm-2.localdomain hadoop-vm-2
192.168.17.134 hadoop-vm-1
有什么想法吗?提前感谢:-)
2条答案
按热度按时间wkyowqbh1#
/etc/hosts文件的内容应该如下所示
查看此博客及其评论以了解更多详细信息。另外,在伪分布式模式下,所有守护进程都将在自己的jvm和单个节点上运行。对于1+节点,它是完全分布式模式。更多关于不同模式的信息。
另外,有多种方法可以设置hadoop集群。
1) 从apache下载所有相关的框架并手动设置它们。这里(1,2)是一些不错的教程。这种方法需要一些努力,但也学到了很多东西。
2) 使用cloudera manager自动化hadoop和其他相关框架(如hive、hbase、zookeeper等)的安装过程。还有一些其他公司提供自动安装,如hortonworks的hdp。大多数东西都是自动化的,隐藏在ui后面。
ar7v8xwq2#
我找到了解决问题的方法:我的直觉确实是对的,我的配置确实被忽视了。
来自yahoo的预配置vm有一些模糊的、额外的配置目录。这将覆盖“conf”目录中的所有配置—即使您手动启动集群并且不使用提供的教程启动脚本。
所以我删除了这个目录,并放置了一个与conf目录同名的符号链接。现在它可以正常工作了。呸:-)