1. 程式人生 > >在不到1G記憶體機器上快速搭建一個hadoop環境

在不到1G記憶體機器上快速搭建一個hadoop環境

摘要:我們在很多情況下只需要一個配置極簡但具備所有功能的hadoop來做一些探索或者調查性等工作,雖然這時候的hadoop不具有生產環境下的強大配置和工業級的可靠性和穩定性但是它的可工作和可執行性已經足夠。本文目的是在一個只有1核,cpu頻率不到 1.8G,記憶體1G的機器上快速搭建一個hadoop偽分散式叢集。

關鍵詞:極簡,hadoop

導言:我想用最新版的hadoop(寫本文時是2.5.1),在一個極其簡陋的Linux機器(CPU 1+G, core 1, memory 1G)上跑hdfs, MapReduce和YARN,可以嗎?答案是肯定的。只要我們把Hadoop配成偽分散式,各個daemon程序(對YARN而言是namenode[nn],secondary namenode[snn], datanode[dn],resource manager[rm], node manager[nm])需要的記憶體配置成滿足我們需要的極低值,就可以達成目的。雖然不是真正的分散式,但是它與真實的hadoop本質相象性可達到99.99%。比如,我想知道在一個命令列Java應用程式執行Jar或者Java class (不用hadoop本身的hadoop jar XXX.jar ....)來把自己寫的wordcount  MapReduce程式提交到叢集並跑起來需要哪些jar和配置檔案或屬性。 再比如,我們有時在開發時只需要一個可執行hadoop環境驗證程式碼正確性,然後再提交給QA去做正式的測試,那麼這種快速極簡的hadoop就非常有用。

環境:

機器與作業系統:1臺 Linux機器,記憶體1G,

Java :Oracle JDK1.6.0_45 ,安裝位置: /usr/java/jdk1.6.0_45

Hadoop: 版本 2.5.1,示例安裝位置:  ~/hadoop/hadoop-2.5.1

本示例使用root安裝,請根據你的環境做相應修改

攻略與步驟:

1.安裝Java,比如jdk1.6.0_45

2.下載Apache Hadoop2.5.1並解壓 (比如解壓到 ~/hadoop/hadoop-2.5.1)

3.建passwordless的ssh

 3.1 # ssh-keygen  (一路回車即可)

 3.2 # cat id_rsa.pub >> authorized_keys

 3.3 # chmod  700 ~/.ssh

 3.4 # chmod  600  ~/.ssh/authorized_keys

4.修改Hadoop配置檔案(在目錄~/hadoop/hadoop-2.5.1/etc/hadoop)

4.1 core-site.xml:
<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://centos6.localdomain:9000</value>
</property> 

<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/root/hadoop/hadoop-2.5.1/temp</value> 
</property> 


4.2 hdfs-site.xml:

<property>
     <name>dfs.replication</name>
     <value>2</value>
</property>

4.3 mapred-site.xml:

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

4.4 yarn-site.xml:

 <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
 </property>

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>centos6.localdomain</value>
</property>

4.5 hadoop-env.sh

把 export JAVA_HOME那一行改成你的java安裝目錄,比如:

 export JAVA_HOME=/usr/java/jdk1.6.0_45

到export HADOOP_HEAPSIZE= 和 export HADOOP_NAMENODE_INIT_HEAPSIZE= 改成128,比如

export HADOOP_HEAPSIZE=128
export HADOOP_NAMENODE_INIT_HEAPSIZE="128"

4.6 yarn-env.sh

把  export JAVA_HOME改成和4.5一樣。

把 JAVA_HEAP_MAX改成-Xmx128m,比如:JAVA_HEAP_MAX=-Xmx128m

5.執行namnode format

在~/hadoop/2.5.1/bin 下執行 #./hadoop namenode -format

6.啟動hadoop

在~/hadoop/2.5.1/sbin 下執行 #./start-all.sh

可以看到 如圖所示,所有hadoop後臺程序已經起來

7. 檢視下記憶體,是否達到我們的期望:

記憶體只佔用了569 M,不錯~~

 8.執行下hadoop自帶的wordcount程式看看:

先弄個小檔案,上傳到hdfs比如/user/root/wordcount/input/,#hadoop fs -put ~/hadoop/2.5.1/sbin/start-all.sh  /user/root/wordcount/input

執行wordcount:

執行成功,更不錯~~

9. 在web介面檢視hdfs和RM

在RM上看到wordcount執行成功。。。目的達成! :)

說明:

1.  Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 一般不影響執行除非你用到nativeIO,比如解壓縮。

2. 如果沒有linux機器只有windows ,可以考慮安裝一個Oracle VirtualBox在windows上,在virtualBox上建個虛擬機器,也可以跑得很歡。其網路配置可參考本人另一部落格: