我正在探索在本地系统上运行 hadoop 应用程序的选项。
与许多应用程序一样,前几个版本应该能够在单个节点上运行,只要我们可以使用所有可用的 CPU 内核(是的,这与这个问题有关)。当前的限制是在我们的生产系统上我们有 Java 1.5,因此我们必须将 Hadoop 0.18.3 作为最新版本(参见这个问题)。所以很遗憾我们还不能使用这个新功能。
第一种选择是简单地以伪分布式模式运行 hadoop。本质上:创建一个完整的 hadoop 集群,其上的所有内容都在一个节点上运行。
这种形式的“缺点”是它还使用了成熟的 HDFS。这意味着为了处理输入数据,必须首先将其“上传”到本地存储的 DFS 上。因此,这需要输入和输出数据的额外传输时间,并使用额外的磁盘空间。当我们停留在单节点配置上时,我想避免这两种情况。
所以我在想:是否可以覆盖“fs.hdfs.impl”设置并将其从“org.apache.hadoop.dfs.DistributedFileSystem”更改为(例如)“org.apache.hadoop.fs.LocalFileSystem” ?
如果这可行,“本地”hadoop 集群(只能由一个节点组成)可以使用现有文件而无需任何额外的存储要求,并且它可以更快地启动,因为不需要上传文件。我希望仍然有一个工作和任务跟踪器,也许还有一个名称节点来控制整个事情。
有没有人试过这个?它可以工作还是这个想法离预期用途太远了?
或者有没有更好的方法来获得同样的效果:Pseudo-Distributed operation without HDFS?
感谢您的见解。
编辑2:
这是我使用 bajafresh4life 提供的答案为 hadoop 0.18.3 conf/hadoop-site.xml 创建的配置。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>file:///</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:33301</value>
</property>
<property>
<name>mapred.job.tracker.http.address</name>
<value>localhost:33302</value>
<description>
The job tracker http server address and port the server will listen on.
If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>mapred.task.tracker.http.address</name>
<value>localhost:33303</value>
<description>
The task tracker http server address and port.
If the port is 0 then the server will start on a free port.
</description>
</property>
</configuration>