我正在探索在本地系统上运行hadoop应用程序的选项.
与许多应用程序一样,前几个版本应该能够在单个节点上运行,只要我们可以使用所有可用的CPU内核(是的,这与此问题相关).目前的限制是,在我们的生产系统中,我们有Java 1.5,因此我们将Hadoop 0.18.3作为最新版本(请参阅此问题).所以不幸的是我们还不能使用这个新功能.
第一个选项是在伪分布式模式下运行hadoop.基本上:创建一个完整的hadoop集群,其中的所有内容都在1个节点上运行.
这种形式的"缺点"是它还使用了完整的HDFS.这意味着为了处理输入数据,必须首先将其"上传"到本地存储的DFS ...上.因此,这会占用输入和输出数据的额外传输时间,并使用额外的磁盘空间.在我们保持单节点配置时,我想避免这两种情况.
所以我在想:是否可以覆盖"fs.hdfs.impl"设置并将其从"org.apache.hadoop.dfs.DistributedFileSystem"更改为(例如)"org.apache.hadoop.fs.LocalFileSystem" ?
如果这工作,"本地"hadoop集群(它只能由一个节点组成)可以使用现有文件而无需任何额外的存储要求,并且它可以更快地启动,因为不需要上传文件.我希望仍然有一个工作和任务跟踪器,也许还有一个名称节点来控制整个事情.
有人曾尝试过这个吗?它可以工作还是这个想法远远超出预期用途?
或者是否有更好的方法来获得相同的效果:没有HDFS的伪分布式操作?
感谢您的见解.
编辑2:
这是我使用bajafresh4life提供的答案为hadoop 0.18.3 conf/hadoop-site.xml创建的配置.
fs.default.name file:/// mapred.job.tracker localhost:33301 mapred.job.tracker.http.address localhost:33302 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. mapred.task.tracker.http.address localhost:33303 The task tracker http server address and port. If the port is 0 then the server will start on a free port.
bajafresh4li.. 6
是的,这是可能的,虽然我使用的是0.19.2.我对0.18.3并不太熟悉,但我很确定它不应该有所作为.
只需确保将fs.default.name
其设置为默认值(即file:///
),并将mapred.job.tracker
其设置为指向托管jobtracker的位置.然后使用bin/start-mapred.sh启动守护进程.您无需启动namenode或datanode.此时,您应该能够使用运行map/reduce作业bin/hadoop jar ...
我们使用此配置使用通过NFS挂载的Netapp设备在一小组计算机上运行Hadoop.
是的,这是可能的,虽然我使用的是0.19.2.我对0.18.3并不太熟悉,但我很确定它不应该有所作为.
只需确保将fs.default.name
其设置为默认值(即file:///
),并将mapred.job.tracker
其设置为指向托管jobtracker的位置.然后使用bin/start-mapred.sh启动守护进程.您无需启动namenode或datanode.此时,您应该能够使用运行map/reduce作业bin/hadoop jar ...
我们使用此配置使用通过NFS挂载的Netapp设备在一小组计算机上运行Hadoop.