Hadoop 入門實踐

來自: http://blog.rainy.im/2016/03/05/hadoop-101/

Hadoop 2.0 架構

Hadoop 包括如下幾個模塊:

  1. Hadoop Common:公共基礎組件;
  2. Hadoop Distributed File System(HDFS):分布式文件系統;
  3. Hadoop YARN:任務和資源管理框架;
  4. Hadoop MapReduce:基于YARN的并行數據處理系統;
  5. 其它基于Hadoop的項目(包括Pig,Hive,Spark等)。

圖片來源: Icons and Stencils for Hadoop

了解基本架構之后先在本地安裝一下最新版本的 Hadoop,我安裝在阿里云服務器:

Ubuntu 14.04.3 LTS

Hadoop 單節點安裝

依賴

  1. Java 1.5.X
  2. ssh

wget http://javadl.oracle.com/webapps/download/AutoDL?BundleId=116021
mv AutoDL\?BundleId=116021 jre-7u7-linux-x64.tar.gz
tar zxvf jre-7u7-linux-x64.tar.gz

sudo mkdir -p /usr/java
sudo cp -r jre1.8.0_73/* /usr/java/

export JAVA_PATH=/usr/java </pre>

下載 Hadoop

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz
tar zxvf hadoop-2.6.4.tar.gz
cd hadoop-2.6.4

export HADOOP_INSTALL=/path/to/hadoop-2.6.4
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin </pre>

三種集群模式

Hadoop 共有三種模式,運行前需要先了解它們的差別:

  1. 單機(本地)模式
  2. 偽分布式模式
  3. 完全分布式模式

單機模式只是運行一次 MapReduce 程序,不生成 daemon,適合調試程序;偽分布式模式 daemon 運行在本地,只是模擬集群;完全分布式的 daemon 運行在多個機器上。

文章開始介紹的 Hadoop 架構中提到兩個主要模塊:HDFS 和 YAEN,運行 Hadoop 前需要分別對其進行配置,在配置之前需要先了解一下它們分別是什么。

HDFS & YARN 配置

HDFS

HDFS 是基于 Google File System(GFS) 的一種實現,由 Java 實現的一種分布式、可擴展、可移植的文件系統。HDFS 由兩部分組成:

  1. NameNode:主機(master machine),用于管理所有集群數據的元數據;
  2. DataNode:HDFS 中真正用于保存數據的部分,通常包含多個DN;

除此之外,在多節點集群模式下,還配備一個 Secondary NameNode,用于生成主機數據操作的緩存鏡像,結構如下圖所示:

*圖片來源:見參考1*

選擇偽分布式模式,我們先配置啟動 HDFS。由于需要用到 ssh ,先對本機設置 ssh 無密碼登錄模式:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  
ssh localhost  

創建新的配置目錄:

mkdir init_config  
cp $HADOOP_INSTALL/etc/hadoop/\*.xml init_config/  

編輯 init\_config/core-site.xml 和 init\_config/hdfs-site.xml :

<!-- core-site.xml -->  
<configuration>  
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>  
<!-- hdfs-site.xml -->  
<configuration>  
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>  

格式化HDFS,然后運行啟動腳本:

hadoop namenode -format
start-dfs.sh --config /absolute/path/to/init_config

遇到錯誤

localhost: Error: JAVA_HOME is not set and could not be found.

可能與我用 zsh 有關,JAVA_HOME 已設置在 ~/.zshrc

解決方案

cp $HADOOP_INSTALL/etc/hadoop/hadoop-env.sh init_config/

編輯 init_config/hadoop-env.sh

export JAVA_HOME=/usr/java </pre>

啟動之后,可以從通過瀏覽器訪問 http://localhost:50070

YARN

YARN 還是基于 Google MapReduce 的實現,具體 MapReduce 的原理有時間可以研究一下這篇論文。 MapReduce 的基本過程如下:

(input) <k1, v1>->map-><k2, v2>->combine-><k2, v2>->reduce-><k3, v3> (output)

map/reduce 的過程對數據進行分塊并行處理,而 Hadoop 提供的 YARN 框架由 JobTracker 和 TaskTracker 兩部分組成,輸入和輸出都是來自/存入 HDFS,YARN 只是負責調度和監控,其架構如下圖所示:

*圖片來源:見參考1*

要啟動 YARN 同樣需要配置 init\_config/yarn-site.xml :

<!-- yarn-site.xml -->  
<configuration>  
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>localhost:8032</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
</configuration>  

之后運行:

start-yarn.sh --config /absolute/path/to/init_config

若出現 cat: /path/to/init_config/slaves: No such file or directory

則需要從 $HADOOP_INSTALL/etc/hadoop/ 中 copy 過來。</pre>

啟動成功之后同樣可以通過 http://localhost:8088 訪問 Web 管理界面:

總結

到此為止已經完成了 Hadoop 單機節點下的偽分布式模式的啟動,接下來需要分別學習:

  • HDFS 的一些指令操作以及 Web 管理界面
  • MapReduce 原理
  • 基于 Python 的 MapReduce 數據操作以及 YARN 的 Web 管理界面

Hadoop 負責數據的存儲于基本處理,HDFS 與 MapReduce 分別實現 數據存儲處理過程 的分布式并行加工。有了數據基礎之后,才可以進一步應用到機器學習模型中,或者是實現更加高效的查詢或計算,這就需要后續更多基于 Hadoop 之上的應用,例如 Pig/Hive/Spark。

參考

  1. A Beginners Guide to Hadoop
  2. Book《Hadoop: The Definitive Guide》
  3. Wikipedia: Apache Hadoop
  4. Hadoop 新 MapReduce 框架 Yarn 詳解
  5. </ol> </div>

 本文由用戶 JaquelineEc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!