The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
          隨著互聯(lián)網(wǎng)的發(fā)展,大數(shù)據(jù)運(yùn)算需求日益劇增,開源的hadoop出現(xiàn)至今,幾乎已成為了業(yè)界的默認(rèn)標(biāo)準(zhǔn),下面,筆者就開始構(gòu)建一個(gè)簡單的hadoop并行運(yùn)算集群。

          一、    環(huán)境介紹

          模擬環(huán)境使用三臺(tái)rhel5.8 32bit,各自IP和主機(jī)名如下:

          1. IP                            主機(jī)名        
          2. 192.168.88.253                none.mos.com    
          3. 192.168.88.129                lab1.mos.com 
          4. 192.168.88.130                lab2.mos.com 

          其中

          1. none.mos.com負(fù)責(zé)任務(wù)管理和數(shù)據(jù)名稱節(jié)點(diǎn),在生產(chǎn)環(huán)境中,建議將此兩項(xiàng)分開; 
          2.  
          3. lab1.mos.com為第二名稱節(jié)點(diǎn),其并不提供名稱節(jié)點(diǎn)的功能,但默認(rèn)情況下,負(fù)責(zé)周期性的將編輯日志合并至名稱節(jié)點(diǎn),并自己也保存一份,其提供了名稱節(jié)點(diǎn)的冗余,但其數(shù)據(jù)依然落后于名稱節(jié)點(diǎn); 
          4.  
          5. lab3.mos.com為實(shí)際數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)和任務(wù)執(zhí)行節(jié)點(diǎn)。 

          使用的軟件版本及下載地址:

          1. JDK: jdk-7u5-linux-i586.rpm 
          2. 下載地址: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
          3. Hadoop: hadoop-0.20.2-cdh3u5.tar.gz 
          4. 下載地址: http://hadoop.apache.org/releases.html
          5.  


          二、    準(zhǔn)備工作
          2.1 修改每個(gè)主機(jī)的/etc/hosts文件如下:

          1. 192.168.88.253      none.mos.com    none 
          2. 192.168.88.129      lab1.mos.com    lab1 
          3. 192.168.88.130      lab2.mos.com    lab2 

          2.2 在集群的每個(gè)節(jié)點(diǎn)建立用于運(yùn)行hadoop的用戶及設(shè)定密碼

          1. # useradd hduser && echo "redhat" | passwd --stdin hduser 

          2.3 為master節(jié)點(diǎn)的hduser用戶能夠管理并監(jiān)控其他節(jié)點(diǎn),在none節(jié)點(diǎn)做如下操作。

          1. # su – hduser 
          2. $ ssh-keygen -t rsa -P '' 
          3. $ ssh-copy-id -i .ssh/id_rsa.pub hduser@lab1 
          4. $ ssh-copy-id -i .ssh/id_rsa.pub hduser@lab2 

          2.4 確保每個(gè)節(jié)點(diǎn)時(shí)間的一致性,并清空iptables和關(guān)閉selinux,此處操作略


          三、    配置hadoop運(yùn)行所需的java環(huán)境,此操作需在每個(gè)節(jié)點(diǎn)執(zhí)行一遍。

          3.1 安裝jdk

          1. # rpm -ivh ~/root/Download/jdk-7u5-linux-i586.rpm 

          3.2 配置java環(huán)境變量

          1. # vim /etc/profile.d/java.sh 
          2. JAVA_HOME=/usr/java/latest 
          3. PATH=$JAVA_HOME/bin:$PATH 
          4. export JAVA_HOME PATH 

          3.3 使剛才配置的環(huán)境其生效(或重新登陸控制臺(tái)亦可)

          1. # source /etc/profile.d/java.sh 

          3.4 測試java環(huán)境是否OK

          1. # su – hduser 
          2. $ java –version 
          3. java version "1.7.0_05" 
          4. Java(TM) SE Runtime Environment (build 1.7.0_05-b05) 
          5. Java HotSpot(TM) Server VM (build 23.1-b03, mixed mode) 



          四、    安裝Hadoop,此步驟操作略長,但也需在每個(gè)節(jié)點(diǎn)執(zhí)行。
          4.1 解壓至/usr/local目錄,并做軟件鏈接使其易于訪問

          1. # tar xf ~/Download/hadoop-0.20.2-cdh3u5.tar.gz –C /usr/local/ 
          2. # ln -sv /usr/local/hadoop-0.20.2-cdh3u5 /usr/local/hadoop 

          4.2 修改hadoop目錄的屬主屬組,并配置hadoop環(huán)境變量

          1. # chown -R hduser. /usr/local/hadoop-0.20.2-cdh3u5 
          2. # vim /etc/profile.d/hadoop.sh 
          3. HADOOP_HOME=/usr/local/hadoop 
          4. PATH=$HADOOP_HOME/bin:$PATH 
          5. export HADOOP_HOME PATH 

          4.3 使hadoop環(huán)境變量生效并使用hduser測試其是否就緒

          1. # source /etc/profile.d/hadoop.sh 
          2. # su – hduser 
          3. $ hadoop version 
          4. Subversion git://ubuntu-slave02/var/lib/jenkins/workspace/CDH3u5-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u5/source -r 30233064aaf5f2492bc687d61d72956876102109 
          5. Compiled by jenkins on Fri Oct  5 17:21:34 PDT 2012 
          6. From source with checksum de1770d69aa93107a133657faa8ef467 



          五、    配置Hadoop,集群中每個(gè)節(jié)點(diǎn)只能通過配置文件來得知自身的角色,因此,以下配置需在每個(gè)節(jié)點(diǎn)都做同樣修改。

          5.1    定義第二名稱節(jié)點(diǎn)的主機(jī)名或IP地址

          1. # echo ‘lab1.mos.com’ > /usr/local/hadoop/conf/masters 

          5.2    定義數(shù)據(jù)節(jié)點(diǎn)和任務(wù)執(zhí)行節(jié)點(diǎn),筆者這里只有一個(gè),而生成環(huán)境中,數(shù)據(jù)節(jié)點(diǎn)一般最少3個(gè)以上。

          1. # echo ‘lab2.mos.com’ > /usr/local/hadoop/conf/slaves 

          5.3    定義系統(tǒng)級別的參數(shù)如下:

          1. # vim /usr/local/hadoop/conf/core-site.xml 
          2. <?xml version="1.0"?> 
          3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
          4. <!-- Put site-specific property overrides in this file. --> 
          5. <configuration> 
          6.  
          7. <!-- 定義hadoop的分布式文件系統(tǒng)hdfs的名稱節(jié)點(diǎn)。--> 
          8.     <property> 
          9.         <name>fs.default.name</name>   
          10.         <value>hdfs://none.mos.com:8020</value> 
          11.     </property> 
          12.  
          13. <!--定義臨時(shí)文件的位置,需確保此目錄存在,且hadoop的執(zhí)行用戶hduser對其有足夠的權(quán)限. --> 
          14.     <property>     
          15.         <name>hadoop.tmp.dir</name> 
          16.         <value>/hadoop/temp</value> 
          17.     </property> 
          18.  
          19. <!--定義回收站,可不定義,設(shè)置在hdfs中刪除的文件先放在回收站內(nèi),超時(shí)才會(huì)被刪除,時(shí)間單位為分鐘,筆者此處定義為100小時(shí)。--> 
          20.     <property> 
          21.         <name>fs.trash.interval</name>   
          22.         <value>6000</value> 
          23.     </property> 
          24.  
          25. </configuration> 

          5.4    定義任務(wù)管理管理節(jié)點(diǎn)

          1. # vim /usr/local/hadoop/conf/mapred-site.xml 
          2. <?xml version="1.0"?> 
          3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
          4.  
          5. <!-- Put site-specific property overrides in this file. --> 
          6.  
          7. <configuration> 
          8.     <property> 
          9.         <name>mapred.job.tracker</name> 
          10.         <value>none.mos.com:8021</value> 
          11.     </property> 
          12. </configuration> 

          5.5    定義hadoop的分布式文件系統(tǒng)相關(guān)屬性

          1. # vim /usr/local/hadoop/conf/hdfs-site.xml 
          2. <?xml version="1.0"?> 
          3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
          4.  
          5. <!-- Put site-specific property overrides in this file. --> 
          6.  
          7. <configuration> 
          8.  
          9. <!-- 為了保證數(shù)據(jù)的冗余,定義切割后的數(shù)據(jù)塊在幾個(gè)節(jié)點(diǎn)上存儲(chǔ),生產(chǎn)環(huán)境中,建議最少3份以上,筆者這里就一個(gè)數(shù)據(jù)節(jié)點(diǎn),因此,此處為1即可--> 
          10.      <property> 
          11.     <name>dfs.replication</name> 
          12.     <value>1</value> 
          13.      </property> 
          14.  
          15.     <!-- 數(shù)據(jù)名稱節(jié)點(diǎn)用于存儲(chǔ)HDFS文件數(shù)據(jù)塊的本地目錄,存儲(chǔ)多份時(shí),可寫多個(gè)路徑,以逗號(hào)隔開即可--> 
          16.      <property> 
          17.         <name>dfs.data.dir</name> 
          18.         <value>/hadoop/data</value> 
          19.         <final>ture</final> 
          20.      </property> 
          21.      
          22. <!-- 數(shù)據(jù)節(jié)點(diǎn)用于存儲(chǔ)名稱空間和事務(wù)日志的本地文件系統(tǒng)路徑,存儲(chǔ)多份時(shí),可寫多個(gè)路徑,以逗號(hào)隔開即可 --> 
          23.      <property> 
          24.         <name>dfs.name.dir</name> 
          25.         <value>/hadoop/name</value> 
          26.         <final>ture</final> 
          27.      </property> 
          28.     
          29.     <!-- 用于定義HDFS元數(shù)據(jù)冗余的復(fù)制到這個(gè)目錄 --> 
          30.      <property> 
          31.         <name>fs.checkpoint.dir</name> 
          32.         <value>/hadoop/namesecondary</value> 
          33.         <final>ture</final> 
          34.      </property> 
          35.  
          36. </configuration> 

          5.6    創(chuàng)建hadoop配置中定義的目錄,且給予相應(yīng)的權(quán)限

          1. # mkdir -pv /hadoop/temp && chown -R hduser. /hadoop  

           

           

          六、    格式化hadoop的分布式文件系統(tǒng)(HDFS),并檢測hadoop是否就緒。
           

          6.1 以hduser的身份格式,切記一定要將第五步的操作在三個(gè)節(jié)點(diǎn)全部完成

          1. # su - hduser 
          2. $ hadoop namenode –format 
          3. 出現(xiàn)“Storage directory /hadoop/temp/dfs/name has been successfully formatted”此行,才表示格式化成功,否則需檢查是否配置出錯(cuò)。 

          6.2 以hduser的身份啟動(dòng)hadoop

          1. $ start-all.sh 

          6.3 使用jps在每個(gè)節(jié)點(diǎn),檢查是否啟動(dòng)正常.



          七、    使用hadoop提供的字符統(tǒng)計(jì)應(yīng)用程序算法樣例做簡單的計(jì)算實(shí)現(xiàn)

          7.1 在hadoop的分布式文件系統(tǒng)(hdfs)中創(chuàng)建目錄,并上傳要計(jì)算的文件

          1. $ hadoop fs -mkdir mos-test 
          2. $ hadoop fs -put /etc/services mos-test 

          7.2 調(diào)用hadoop提供的字符統(tǒng)計(jì)程序,計(jì)算上傳的services文件的每個(gè)字符個(gè)數(shù),并輸出到hdfs的test-out目錄中,此目錄hadoop會(huì)自行創(chuàng)建。

          1. $ hadoop jar /usr/local/hadoop/hadoop-examples-0.20.2-cdh3u5.jar wordcount mos-test test-out 

          7.3 等命令執(zhí)行完成后,下載執(zhí)行結(jié)果到本地當(dāng)前目錄,并查看相關(guān)內(nèi)容

          1. $ hadoop fs -get ./test-out/part-r-00000 ./ 
          2. $ head part-r-00000 

          7.4 也可不用下載直接查看HDFS的文件或目錄

          1. $ hadoop fs –ls /  #查看hdfs的根位置 
          2. $ hadoop fs –cat  /user/hduser/test-out/part-r-00000   #不下載直接查看計(jì)算結(jié)果 
          3. Ps:  hadoop fs命令的相關(guān)用法,可通過:hadoop fs --help獲得 

           



              到此為止,一個(gè)簡單的分布式hadoop并行運(yùn)算集群已經(jīng)已然完成,哈哈,是不是很簡單,但是需要說明的是,各位其實(shí)也看到了,并且想必各位也充滿了各種 疑惑:這些命名神馬的怎么這么奇怪?hdfs是怎么工作的?數(shù)據(jù)怎么分開存儲(chǔ)的?數(shù)據(jù)怎么在被切開存儲(chǔ)后還能計(jì)算?各個(gè)節(jié)點(diǎn)的高可用怎么實(shí)現(xiàn)?如果需要更 為復(fù)雜的運(yùn)算怎么處理等等?相關(guān)內(nèi)容,筆者也在慢慢的整理和學(xué)習(xí),敬請關(guān)注哈。
           


          補(bǔ)充一點(diǎn)相關(guān)知識(shí):
          當(dāng)hadoop正常啟動(dòng)后,不同的節(jié)點(diǎn),會(huì)開放不同的幾個(gè)端口,可以直接通過web頁面查看其相關(guān)信息的端口,實(shí)際上,開放的端口 遠(yuǎn)不止這些,(詳情可以通過  netstat -tnlp|grep java)查看, 但是只有這些可以通過web直接打開查看。具體如下:
           

          1. 端口                    工作節(jié)點(diǎn)                 本此實(shí)驗(yàn)的web查方式 
          2. 0.0.0.0:50030     任務(wù)管理節(jié)點(diǎn)(JobTracker)                192.168.88.253:5030 
          3. 0.0.0.0:50070     HDFS的數(shù)據(jù)名稱節(jié)點(diǎn)(NameNode)         192.168.88.253:5070 
          4. 0.0.0.0:50090     第二數(shù)據(jù)名稱節(jié)點(diǎn)(SecondaryNameNode)     192.168.88.129:50090 
          5. 0.0.0.0:50060     任務(wù)執(zhí)行節(jié)點(diǎn)(TaskTracker)               192.168.88.130:5060 
          6. 0.0.0.0:50075     數(shù)據(jù)節(jié)點(diǎn)(DataNode)                    192.168.88.130:5075 


          下圖是之前執(zhí)行計(jì)算時(shí)筆者的截圖:

           

          posted on 2012-12-18 16:56 Eric_jiang 閱讀(246) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 株洲县| 宁国市| 东方市| 云林县| 云南省| 朔州市| 兴义市| 颍上县| 鲁甸县| 铜山县| 保山市| 乌鲁木齐市| 太和县| 鸡东县| 淮北市| 松原市| 辽源市| 曲周县| 德江县| 阿拉尔市| 海盐县| 鸡西市| 民丰县| 高台县| 永川市| 克什克腾旗| 海盐县| 洪洞县| 甘谷县| 宝丰县| 疏附县| 奉新县| 雷波县| 古交市| 象山县| 博兴县| 博罗县| 白朗县| 峨眉山市| 昭苏县| 务川|