Hadoop2 偽分布式部署

來源:互聯網
上載者:User

標籤:叢集   hadoop   mapreduce   namenode   hdfs   

一.簡介

二.安裝部署

三.運行hadoop例子並測試部署環境

四.注意的地方


一.簡介

 

   Hadoop是一個由Apache基金會所開發的分布式系統基礎架構,Hadoop的架構最核心的設計就是:HDFS和MapReduce。HDFS為海量的資料提供了儲存,HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高輸送量(high throughput)來訪問應用程式的資料,適合那些有著超大資料集(large data set)的應用程式。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)檔案系統中的資料,則MapReduce為海量的資料提供了計算。Hadoop 容易開發和運行處理大規模資料的平台。

 

    HDFS是Java語言開發,因此任何支援Java的機器都可以部署Namenode或Datanode,HDFS採用master/slave架構,一個HDFS叢集是由一個Namenode和一定數目的Datanodes組成。Namenode是一個中心伺服器,負責管理檔案系統的名字空間(namespace)以及用戶端對檔案的訪問。叢集中的Datanode一般是一個節點一個,負責管理它所在節點上的儲存。HDFS暴露了檔案系統的名字空間,使用者能夠以檔案的形式在上面儲存資料。從內部看,一個檔案其實被分成一個或多個資料區塊,這些Block Storage在一組Datanode上。Namenode執行檔案系統的名字空間操作,比如開啟、關閉、重新命名檔案或目錄。它也負責確定資料區塊到具體Datanode節點的映射。Datanode負責處理檔案系統用戶端的讀寫請求。在Namenode的統一調度下進行資料區塊的建立、刪除和複製。所示:

   

 

     Hadoop Map/Reduce是一個使用簡易的軟體架構,基於它寫出來的應用程式能夠運行在由上千個商用機器組成的大型叢集上,並以一種可靠容錯的方式平行處理上T層級的資料集。一個Map/Reduce 作業(job) 通常會把輸入的資料集切分為若干獨立的資料區塊,由 map任務(task)以完全並行的方式處理它們。架構會對map的輸出先進行排序, 然後把結果輸入給reduce任務。通常作業的輸入和輸出都會被儲存在檔案系統中。 整個架構負責任務的調度和監控,以及重新執行已經失敗的任務。

 

  Hadoop是一個能夠讓使用者輕鬆架構和使用的分散式運算平台。使用者可以輕鬆地在Hadoop上開發和運行處理海量資料的應用程式。它主要有以下幾個優點:

   1.高可靠性。Hadoop按位儲存和處理資料的能力值得人們信賴。

   2.高擴充性。Hadoop是在可用的電腦集簇間分配資料並完成計算任務的,這些集簇可以方便地擴充到數以千計的節點中。

   3.高效性。Hadoop能夠在節點之間動態地移動資料,並保證各個節點的動態平衡,因此處理速度非常快。

   4.高容錯性。Hadoop能夠自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配。

   5.低成本。與一體機、商用資料倉儲以及QlikView、Yonghong Z-Suite等資料集市相比,hadoop是開源的,項目的軟體成本因此會大大降低。

 

  Hadoop 偽分布式模式是在單機上類比 Hadoop 分布式,條件有限,所以linux虛擬機器上部署Hadoop 偽分布式模式來類比 Hadoop 分布式。

 

二.安裝部署

  Linux虛擬機器上JDK安裝配置,這裡就不介紹,我之前文章有介紹過了。

 第一步:ssh無密碼驗證配置

  1.查看一下SSH是否有安裝

       


  2.基於空口令建立一個新的SSH密鑰,啟用無密碼登入
     #ssh-keygen -t rsa -P ‘‘ -f~/.ssh/id_rsa
     #cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

   3.測試一下是否要求輸入密碼登陸

      #ssh localhost   :

    

   

    這說明已經安裝成功,第一次登入時會詢問你是否繼續連結,輸入yes即可進入。

  說明:

    因為在Hadoop的安裝過程中,如果不配置無密碼登入,每次啟動Hadoop,需要輸入密碼登陸到DataNode,我們通常會做叢集,所以這樣就不方便我們操作。

  第二步:部署hadoop

     1.下載 http://hadoop.apache.org/

      我們這邊下載的是hadoop-2.6.0.tar.gz

    2.mkdir /usr/local/hadoop

    3.#tar -zxvf hadoop-2.6.0.tar.gz//解壓

    4.#vi  /etc/profile  //配置hadoop

      export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0

      export PATH=$HADOOP_HOME/bin:$PATH 

      export HADOOP_LOG_DIR=${HADOOP_HOME}/logs 

    #source/etc/profile //使配置生效

   5.配置core-site.xml,hdfs-site.xml及mapred-site.xml

    #cd hadoop-2.6.0//進入hadoop解壓的目錄

etc/hadoop/core-site.xml<configuration>    <property>        <name>fs.default.name</name>        <value>hdfs://192.168.74.129:9000</value></property>  <property>          <name>hadoop.tmp.dir</name>          <value>/usr/local/hadoop/hadoop-2.6.0/tmp</value>         </property> </configuration>etc/hadoop/hdfs-site.xml <configuration>      <property>           <name>dfs.name.dir</name>           <value>/usr/local/hadoop/hadoop-2.6.0/hdfs/name</value>       <description>對namenode儲存路徑</description>         </property>         <property>           <name>dfs.data.dir</name>           <value>/usr/local/hadoop/hadoop-2.6.0/hdfs/data</value>       <description>對datanode儲存路徑</description>     </property>       <property>        <name>dfs.replication</name>        <value>1</value>    </property></configuration>etc/hadoop/mapred-site.xml<configuration>    <property>        <name>mapred.job.tracker</name>        <value>hdfs://192.168.74.129:9001</value></property> <property>           <name>mapred.local.dir</name>           <value>/usr/local/hadoop/hadoop-2.6.0/mapred/local</value>          <description>儲存mapred自己使用的路徑</description>       </property>         <property>           <name>mapred.system.dir</name>           <value>/usr/local/hadoop/hadoop-2.6.0/mapred/system</value>           <description>儲存mapred系統層級的路徑,可以共用</description>       </property>   </configuration>
  6.修改hadoop-env.sh的jdk路徑

      #vi  etc/hadoop/hadoop-env.sh

    export JAVA_HOME=/usr/java/jdk1.7.0_67

 7.#hadoop namenode -format //格式化HDFS檔案系統以建立一個空大檔案系統。

    執行成功:

    

 產生core-site.xml,hdfs-site.xml及mapred-site.xml對應的目錄,:

  


第三步:啟動hadoop服務   

 1.#sbin/start-all.sh  //啟動    sbin/stop-all.sh //關閉

     


  2.#jps//驗證一下

    

 

3.在瀏覽器查看hadoop資訊

      http://192.168.74.129:50070

        

 

  http://192.168.74.129:8088  hadoop管理頁面

    


4.可以在 cd /usr/local/hadoop/hadoop-2.6.0/logs 查看日誌

     


  三.運行hadoop例子並測試部署環境

      


 1.我們從官方網的例子來運行一下,看看我們部署的hadoop環境是否正確,統計數代碼如下:

    

import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordCount {  public static class TokenizerMapper       extends Mapper<Object, Text, Text, IntWritable>{    private final static IntWritable one = new IntWritable(1);    private Text word = new Text();    public void map(Object key, Text value, Context context                    ) throws IOException, InterruptedException {      StringTokenizer itr = new StringTokenizer(value.toString());      while (itr.hasMoreTokens()) {        word.set(itr.nextToken());        context.write(word, one);      }    }  }  public static class IntSumReducer       extends Reducer<Text,IntWritable,Text,IntWritable> {    private IntWritable result = new IntWritable();    public void reduce(Text key, Iterable<IntWritable> values,                       Context context                       ) throws IOException, InterruptedException {      int sum = 0;      for (IntWritable val : values) {        sum += val.get();      }      result.set(sum);      context.write(key, result);    }  }  public static void main(String[] args) throws Exception {    Configuration conf = new Configuration();    Job job = Job.getInstance(conf, "word count");    job.setJarByClass(WordCount.class);    job.setMapperClass(TokenizerMapper.class);    job.setCombinerClass(IntSumReducer.class);    job.setReducerClass(IntSumReducer.class);    job.setOutputKeyClass(Text.class);    job.setOutputValueClass(IntWritable.class);    FileInputFormat.addInputPath(job, new Path(args[0]));    FileOutputFormat.setOutputPath(job, new Path(args[1]));    System.exit(job.waitForCompletion(true) ? 0 : 1);  }}

   上傳到hadoop解壓的目錄,:

    


  2.查看有沒有目錄

     #hadoop fs –ls  //剛部署完,我們還沒建立目錄,所以會顯示沒目錄:

     

 3.我們建立一個file0.txt文本,輸入內容,也就是我們要統計的單詞,:

     


 4.建立輸入和輸出目錄

   先在hdfs上建個檔案夾  

   #bin/hdfs dfs -mkdir –p  /user/root/input

   #bin/hdfs dfs -mkdir -p  /user/root/output

 5.把要統計的文本上傳到hdfs的輸入目錄下

  # bin/hdfs dfs -put/usr/local/hadoop/hadoop-2.6.0/test/* /user/root/input      //把tes/file0檔案上傳到hdfs的/user/root/input中

6.查看

 #bin/hdfs dfs -cat /user/root/input/file0

 

7.編譯我們剛才寫的統計Java類WordCount.java 

   #bin/hadoop com.sun.tools.javac.Main WordCount.java

     


8.編譯好的WordCount.class建立一個 jar

    jar cf wc.jar WordCount*.class

  

9.執行統計

  #bin/hadoop jar wc.jar WordCount /user/root/input/user/root/output/count

  


10.查看輸出output

  #bin/hdfs dfs -cat/user/root/output/count/part-r-00000

     



 四.注意的地方

       1.#hadoop namenode -format格式化時,HostName配置不對時,會報這個錯誤,:

         

  

         分析:

            #hsotname 

            

          這時在/etc/hosts檔案中找不到對應的這個hostname

            

     解決方案:

       1)vi /etc/hosts //修改設定的ip

             

    

       2)#vi /etc/sysconfig/network  //修改hostname

             

      3)/etc/rc.d/init.d/network restart //重啟一下

       如果沒修改過來,就重啟一下Linux虛擬機器


   2.#hadoop fs –ls會出現

   Java HotSpot(TM) Server VM warning: Youhave loaded library/usr/local/hadoop/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0 which might havedisabled stack guard. The VM will try to fix the stack guard now.

It‘s highly recommended that you fix thelibrary with ‘execstack -c <libfile>‘, or link it with ‘-z noexecstack‘.

    


    解決:

      #vi /etc/profile  

    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
     export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

   #source /etc/profile

   在執行一下hadoop fs –ls就不會出現這樣的問題,:

    







Hadoop2 偽分布式部署

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.