Hadoop

網路上 Hadoop 的相關教學很多,但通常都是 1.x.x 的版本,即便是 2.x.x 的版本,教學也缺少簡單、明確的指引,沒有看到一個全面性的圖文教學,所以決定自己實際操作一遍,並記錄下來,讓日後有需要的人參考。

什麼是 Hadoop?

  • Hadoop 是以 java 寫成,可以提供大量資料的分散式運算環境。
  • Hadoop 是由 Google 雲端架構得到啟發,而開始的開放原始碼計劃。Hadoop現於Apache Software Fundation旗下。
  • 因此, Hadoop 跟 Google 內部使用的雲端運算架構相似。
Google Hadoop
運算系統 MapReduce MapReduce
檔案系統 GFS HDFS
儲存系統 BigTable HBase

什麼是 MapReduce?

  • 根據 MapReduce 模式開發程式,便可以自動在 Hadoop 上達到平行化,處理巨量的數據資料。

什麼是 HDFS ( Hadoop Distributed File System ) ?

  • 將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的儲存環境
  • HDFS 儲存的資料分散在不同 node 上,所以應用程式必須透過網路進入多個 node 讀取資料
  • 是Master/Slave架構,由兩種角色組成:NameNode、DataNodes。NameNode提供HDFS運作、管理的功能,僅在Master端運作;DataNode為儲存資料用,在Slave端運作。

一個 node 可以同時擔任 Master 與 Slave 的角色。也就是說,只要用一個 node 就可以跑 Hadoop 了嗎?是的,而這種單機執行的 Hadoop 的環境,通常稱其為 Single-node Clusters;相對來說,多機執行的 Hadoop 的環境,通常稱其為 Multi-node Clusters。

不管是 Single-node Clusters 還是 Multi-node Clusters,所有的node都要先進行以下操作:

  1. 移除 (or 關閉) 防火牆
  2. 安装Java環境、SSH Server
  3. 設定hadoop使用者 - hduser
  4. 設定hduser 無密碼登錄
  5. 安装Hadoop環境

移除 (or 關閉) 防火牆

> $ sudo apt-get remove iptables
> $ sudo apt-get remove selinux

安装Java環境、SSH Server

> $ sudo apt-get update  # 更新 apt
> $ sudo apt-get install vim  # 安裝編輯器 vim,我個人習慣用 vim
> $ sudo apt-get install openjdk-7-jdk  # 安裝 java
> $ java –version  # 測試 java 是否成功安裝
> $ sudo apt-get install openssh-server  # 安裝 ssh server
> $ ssh localhost  # 測試 ssh server 是否成功安裝
> $ exit  # 退出 ssh localhost

設定hadoop使用者 - hduser

> $ sudo addgroup hadoop  # 新增群組 hadoop
> $ sudo usermod -a -G hadoop hduser  # 把現有的使用者 hduser 加入群組 hadoop
> $ sudo usermod -a -G sudo hduser  # 把現有的使用者 hduser 加入群組 sudo,方便後續操作

設定hduser 無密碼登錄

登出目前用戶,登入 hduser 用戶,接著做以下的操作

$ ssh localhost  # 讓 hduser 的家目錄底下,產生「.ssh」資料夾
> $ exit  # 退出 ssh localhost
> $ cd ~/.ssh
> $ ssh-keygen -t rsa -P ""  # 產生密鑰對
> $ cat id_rsa.pub >> authorized_keys  # 加入授權