Hadoop0.22.0及其RAID部署

來源:互聯網
上載者:User

        使用0.20.X系列版本的Hadoop快有一年時間了,主要集中在HDFS上。期間自己參與了部署Hadoop叢集(1 Server + 20 PC),也參與了分析HDFS的源碼。

        這幾天,由於項目需要,轉移到了0.22.0版本了,需要重新部署Hadoop叢集。這次部署要牽扯到mapreduce項目下contribute中的raid。目的是:部署0.22.0版本Hadoop的叢集,配置並試用其raid的功能。由於之前對0.22.0版本不熟悉,所以在部署叢集前,準備先在Ubuntu上部署偽分布式的,熟悉相關檔案的位置和使用。

        0.22.0版本偽分布式的部署和其他版本的沒有什麼本質的不同,主要是有一些細節需要處理,並需要熟悉整個項目相關檔案的組織圖。下面主要記錄一下在偽分布式安裝和編譯Raid時的一些問題和解決方案。

        1.從hadoop-0.22.0.tar.gz解壓後的目錄可知,該版本相比於0.20.X系列目錄結構有較大變化。這給一直使用0.20.X版本系列的人帶來了一點兒麻煩,需要大致翻看一下各個目錄都有什麼。

        2.配置注意事項:
       在hadoop-env.sh中啟用JAVA_HOME的配置和你需要的配置項;
       配置好masters、slaves列表檔案,其中masters中只需要指定SecondaryNamenode所在的結點的hostname或IP地址即可;
       對於設定檔可以按照core-site.xml、hdfs-site.xml、mapred-site.xml的順序依次填寫配置項;
       如果要使用raid,還需要在hdfs-site.xml和raid源碼目錄下的raid.xml中進行配置,可參看HDFS RAID的Wiki。

        3.Hadoop叢集的管理和使用指令碼,要賦予可執行許可權。另外,與hdfs、mapreduce相關的shell指令檔已經被分開放在相應的目錄下。為了使用方便可以將相應檔案拷貝到$HADOOP_HOME/bin下,也可以在環境變數PATH中添加這些檔案所在的目錄。

        4.重新編譯Raid項目,顯示Ivy無法解析:

[ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::[ivy:resolve]         ::          UNRESOLVEDDEPENDENCIES         ::[ivy:resolve]         ::::::::::::::::::::::::::::::::::::::::::::::[ivy:resolve]         ::org.apache.hadoop#hadoop-common;0.22.0-SNAPSHOT: not found[ivy:resolve]         ::org.apache.hadoop#hadoop-common-test;0.22.0-SNAPSHOT: not found[ivy:resolve]         ::org.apache.hadoop#hadoop-hdfs;0.22.0-SNAPSHOT: not found[ivy:resolve]         :::::::::::::::::::::::::::::::::::::::::::::: 

                解決方案是:進入$HADOOP_HOME/mapreduce/ivy尋找libraries.properties檔案,找到hadoop-common.version和hadoop-hdfs.version這兩項,改成

hadoop-common.version=0.22.0hadoop-hdfs.version=0.22.0 

        5.Raid配置相關的問題
       關於Raid的配置和使用並沒有清晰完整的指南,最完整的的應該算是HDFS RAID Wiki裡的介紹。但是,這個Wiki裡有錯誤,只看這個Wiki進行配置的話,肯定會導致RaidNode無法啟動。最明顯的一個問題是由這個配置項導致的:   

<property>  <name>fs.hdfs.impl</name>  <value>org.apache.hadoop.dfs.DistributedRaidFileSystem</value>  <description>The FileSystem for hdfs: uris.</description></property>         

       
其中的value部分應該是org.apache.hadoop.hdfs.DistributedRaidFileSystem,否則肯定會在記錄檔中看到報類找不到的錯誤。

        當然,只是改了這裡日誌裡還是會不停的報錯,剩下的部分就只能根據錯誤看源碼慢慢分析、改正、驗證了。比如:
        Q:記錄檔報BlockFixer中有一處類型轉換異常,就是嘗試將DistributedRaidFileSystem對象轉換為DistributedFileSystem對象。

       
A: 在BlockFixer.java中將getDFS(Path)方法改為:

 /**   * Returns a DistributedFileSystem hosting the path supplied.   */  protected DistributedFileSystem getDFS(Path p) throws IOException {        LOG.info("[-Control Flow-]:" + p.getFileSystem(getConf()));        return (DistributedFileSystem) ((DistributedRaidFileSystem)p.getFileSystem(getConf())).getFileSystem();  }

        然後,在raid目錄下執行Ant jar命令,將在mapreduce/build/的對應目錄下產生新的jar檔案,替換原有jar檔案。   

        目前,在偽分布式環境下,已經試用了Raid的XOR編碼方案對指定目錄下的檔案進行編碼。


        我的部落格:http://zhoutai.duapp.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.