我正在探索在本地系統上運行hadoop應用程序的選項。是否可以在沒有HDFS的僞分佈式操作中運行Hadoop?
與許多應用程序一樣,只要我們可以使用所有可用的CPU核心(是的,這與this question有關),前幾個版本應該能夠在單個節點上運行。目前的限制是,在我們的生產系統中,我們擁有Java 1.5,因此我們必須將Hadoop 0.18.3作爲最新版本(請參閱this question)。很遺憾,我們目前還不能使用this new feature。
第一個選項是簡單地以僞分佈模式運行hadoop。本質上:創建一個完整的hadoop集羣,其中的所有內容都在一個節點上運行。
這種形式的「缺點」是它也使用了一個完整的HDFS。這意味着爲了處理輸入數據,必須首先將其「上載」到本地存儲的DFS上。因此,這需要額外的輸入和輸出數據傳輸時間,並使用額外的磁盤空間。我們希望避免這兩種情況,同時保持單一節點配置。
所以我在想:是否可以重寫「fs.hdfs.impl」設置並將其從「org.apache.hadoop.dfs.DistributedFileSystem」更改爲(例如)「org.apache.hadoop」。 fs.LocalFileSystem「?
如果這樣工作,「本地」hadoop羣集(只能由一個節點組成)可以使用現有文件,而無需任何額外的存儲要求,並且可以更快地啓動,因爲不需要上傳文件。我希望仍然有一個工作和任務跟蹤器,也許還有一個namenode來控制整個事情。
有沒有人試過這個? 它可以工作,或者這個想法遠遠沒有預期的用途?
或者是否有更好的方式獲得相同的效果:沒有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>
是的,謝謝。這很好。我將在完成一些進一步測試後發佈我的配置。 – 2010-08-23 19:53:35