是否可以在没有HDFS的情况下以伪分布式操作运行Hadoop?

时间:2010-08-23 08:59:18

标签: hadoop mapreduce local-storage hdfs

我正在探索在本地系统上运行hadoop应用程序的选项。

与许多应用程序一样,前几个版本应该能够在单个节点上运行,只要我们可以使用所有可用的CPU核心(是的,这与this question相关)。目前的限制是,在我们的生产系统中,我们使用Java 1.5,因此我们将Hadoop 0.18.3作为最新版本(参见this question)。很遗憾,我们暂时无法使用this new feature

第一个选项是在伪分布式模式下运行hadoop。基本上:创建一个完整的hadoop集群,其中的所有内容都在1个节点上运行。

这种形式的“缺点”是它还使用了完整的HDFS。这意味着为了处理输入数据,必须首先将其“上传”到本地存储的DFS ...上。因此,这会占用输入和输出数据的额外传输时间,并使用额外的磁盘空间。在我们保持单节点配置时,我想避免这两种情况。

所以我在想:是否可以覆盖“fs.hdfs.impl”设置并将其从“org.apache.hadoop.dfs.DistributedFileSystem”更改为(例如)“org.apache.hadoop.fs” .LocalFileSystem“?

如果这样可行,“本地”hadoop集群(只能由一个节点组成)可以使用现有文件而无需任何额外的存储要求,并且可以更快地启动,因为不需要上传文件。我希望仍然有一个工作和任务跟踪器,也许还有一个名称节点来控制整个事情。

以前有人试过这个吗? 它可以工作还是这个想法远远超出预期用途?

或者是否有更好的方法可以获得相同的效果:没有HDFS的伪分布式操作?

感谢您的见解。


编辑2:

这是我为hadoop 0.18.3创建的配置 conf / hadoop-site.xml使用bajafresh4life提供的答案。

<?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>

1 个答案:

答案 0 :(得分:6)

是的,这是可能的,虽然我使用的是0.19.2。我不太熟悉0.18.3,但我很确定它不应该有所作为。

只需确保将fs.default.name设置为默认值(file:///),并将mapred.job.tracker设置为指向托管jobtracker的位置。然后使用bin / start-mapred.sh启动守护进程。您无需启动namenode或datanode。此时,您应该能够使用bin/hadoop jar ...

运行地图/减少作业

我们使用此配置使用通过NFS挂载的Netapp设备在一小组计算机上运行Hadoop。