Hadoop

Hadoop 基本概念 (3)

基本介紹

教學目標

初步了解 Hadoop 生態經濟和商業版本的基本概念。

重點概念

首先 Apache Hadoop 核心技術除了 HDFS、YARN 和 MapReduce 之外,還有其它相關的專案,像是 Pig、Hive、Sqoop、ZooKeeper、Mahout,這些專案在 Hadoop 專案中互相溝通協調形成 Hadoop 生態經濟。

接著在 Hadoop 生態經濟中不同專案皆負責不同的任務,請參考下表。

專案 說明
Pig 主要提供針對資料分析逐步執行程式的平台。
Hive 主要能夠讓我們在 Hadoop 中查詢和管理大量資料集。
HBase 主要屬於以欄位為主的資料庫管理系統。
Sqoop 主要使用於從關聯式資料庫中透過 JDBC 連線匯入資料至 Hadoop 平台。
ZooKeeper 主要是與 HDFS 進行互動的工具。
Mahout 主要是針對 Hadoop 平台執行推薦引擎的資料探勘函式庫。

再來雖然 Apache Hadoop 是開源碼的技術,但還是有商業廠商提供商業版本,最常見的廠商主要有 Cloudera、Hortonworks、…,但是在業界則主要是以 Cloudera 商業版的 Hadoop 平台為主。

最後若我們需要建立一個以資料為驅動的業務情境,則我們將會需要一個強大的管理工具統一且安全的管理業務資料,所以建議導入 Cloudera 商業版的 Hadoop 平台,也就是 Cloudera Hadoop Distribution,簡稱 CDH。此外我們能夠透過 CDH 中的 Cloudera Manager 部署和管理 Cloudera 的 Hadoop 環境,以及透過 HUE 的應用程式介面與 Hadoop 系統進行互動。

相關資源

Hadoop 基本概念 (2)

基本介紹

教學目標

初步了解 HDFS、MapReduce、Pig 和 Hive 的基本概念。

重點概念

首先 Hadoop 分散式檔案系統,簡稱 HDFS,其很像在使用 Linux 作業系統,就像是我們在 Linux 作業系統中儲存檔案一樣,我們能夠將文件儲存在 HDFS 分散式檔案系統中。HDFS 主要是以 Linux 風格的路徑和權限為基礎,HDFS 命令通常是以 hadoop fs 為開頭,像是 hadoop fs -ls 指令就是獲取目錄內容列表。此外 HDFS 指令雖然類似 LINUX 命並,但卻不是建立在作業系統中,並且檔案在寫入之後只能夠進行新增。

接著 Hadoop 叢集平台中主要有 NameNode 和 DataNode ,本機系統中的檔案主要會被先傳送至 Hadoop 叢集平台中的 NameNode 機器,下一步才會分散檔案至 DataNode 機器中,請注意使用者和應用程式主要是和 Hadoop NameNode 進行互動,以利以單一檔案的方式存取和處理分散式檔案。

再來 MapReduce 框架主要是由 Java 所撰寫建立至 Hadoop 中,它主要是自動分散處理資料檔案。在 MapReduce 框架中主要協調在電腦叢集中平行執行 Map、Shuffle/Sort 和 Reduce 等多項任務,像是我們輸入不同地區的收益資料,就能夠透過 MapReduce 框架進行總計和平均的摘要計算。

最後 Pig 和 Hive 則是提供更淺顯易懂的高層次程式語言平行處理 Hadoop 資料檔案。所謂 Pig 主要是提供針對資料分析逐步執行程式的平台。至於所謂 Hive 則主要是資料倉儲框架,透過 Hive 能夠讓我們在 Hadoop 中查詢和管理大量資料集,同時提供結構化資料的機制,以及透過 HiveQL 類似 SQL 語言查詢資料。此外不論是 Pig 或 Hive 皆會轉換為 MapReduce 的程式之後再存取 Hadoop 平台。

相關資源

Hadoop 基本概念 (1)

基本介紹

教學目標

初步了解 Hadoop 的基本概念。

重點概念

首先 Hadoop 主要是 Apache 開放源始碼軟體專案之一,其主要是應用於分散式儲存和處理大型資料集的軟體專案。因此若我們要獲取任何給定的資料檔案,並且發佈至大量機器上時,這些機器皆會一起採取行動,此時將會像是單一且一致的系統。此外我們能夠在不同的機器上分散式處理資料,更重要的是對於 Hadoop 平台的使用者來說,他們不須要了解資料在多台機器上複雜的處理機制。

接著組織只要在不同的機器上安裝 Hadoop 軟體,此時組織就能夠透過相對便宜的硬體與軟體的搭配進行分散式處理。其中在 Hadoop 中主要有三個核心的模組,皆是透過 Java 程式語言所開發。

模組名稱 說明
HDFS 主要是一個分散大量檔案至 Hadoop 叢集電腦的檔案系統。
Hadoop YARN 主要是一個工作排程和叢集資源管理的框架。
Hadoop MapReduce 主要是一個以 YARN 系統為基礎平行處理大量資料集。

再來 HDFS 或稱 Hadoop 分散式檔案系統主要是處理叢集中所有不同機器上的資料分散式儲存至 Hadoop MapReduce 系統中,而 Hadoop MapReduce 系統主要是一個處理分散式檔案的分散式處理系統,因此我們可以同時在所有的機器上處理資料的不同部分,並且進行協調。但是若我們需要查詢資料集,則需要在所有不同的機器上完成部分工作之後,再次生成一致的結果,導致 Hadoop MapReduce 系統處理將會非常複雜性。

最後我們會透過 Hadoop YARN 系統進行資源的管理。當我們來自不同用戶的大量請求來進行不同類型的程序時, Hadoop YARN 系統就必須​​啟動程序,並且針對程序進行資源的分配,以利當系統忙於執行其它程序時,安排其它程序進行等待。當你擁有多個使用者和多台機器,就會必須協調所有正在使用的資源時,處理所涉及的所有管理,以利降低複雜性。

相關資源

SAS Viya (18)

教學目標

初步了解如何針對 Cloudera 的 Hadoop 平台將主機名稱變更為完整網域名稱,以利 SAS Viya 順利安裝。

重點概念

首先許多企業導入 Hadoop 解決方案大部份皆會採用 Cloudera 的 Hadoop 平台,但是預設主機名稱為簡短主機名稱。此時若是要安裝 SAS Viya 則需要將主機名稱設為完整網域名稱 (Fully Qualified Domain Name,FQDN),否則在設定 RabbitMQ 時會發生錯誤。

接著我們主要可以透過 /etc/hosts, /etc/sysconfig/network, hostname 等指令進行修改,並且透過 hostname 確認是否顯示為完整網域名稱,變更主機名稱為完整網域名稱不會造成 Hadoop 平台運作不正常,但是在 Cloudera 管理介面中則會產生錯誤訊息,因此我們最好針對 Cloudera 的 Hadoop 平台變更主機名稱。

再來我們要如何針對 Cloudera 的 Hadoop 平台變更主機名稱,主要以下步驟,分別為:

  1. 匯出 Cloudera Manager 的設定檔。
  2. 刪除 YARN 的 High Availability 之 Failover 設定。
  3. 停用 Cloudera Management 、 Cloudera Manager Server 和 Cloudera Manager Agents。
  4. 備份 Cloudera Manager Server 的資料庫。
  5. 修改主機名稱為完整網域名稱。
  6. 修改每台機器上的 config.ini 設定檔中的主機名稱為完整網域名稱。
  7. 啟動 Cloudera Manager Server。
  8. 啟動 Cloudera Manager Agent。
  9. 啟動 ZooKeeper Server。
  10. 重新初始化 ZooKeeper Server 的 High Availability 。
  11. 更新 Hive 的 Metastore Namenode。
  12. 啟動 Hadoop 所有叢集服務。
  13. 啟動 Cloudera Management Services。
  14. 部署 Client 設定。
  15. 設定 YARN 的 High Availability 之 Failover 設定。

最後我們可能會遇到 DNS 網域名稱解析的錯誤,此時請確認 hostname 是否回傳完整網域名稱,接著分別重新啟動 Cloudera Manager Agent 確認伺服器的健康狀態是否正常。

總結當我們確認 hostname 指令回傳為完整完整網域名稱,此時就能夠開始安裝 SAS Viya 平台。

相關資源

解決問題 Hadoop (1)

教學目標

主要解決在 CentOS Linux 單一機器上安裝 Apache Hadoop 的問題。

重點概念

首先 Apache Hadoop 專案主要是開發可靠、延展性和分散式運算,它主要是軟體函式庫的框架允許使用單一程式模型跨叢集伺服器的大數據分散式處理。

接著 Hadoop 專案主要有下述幾個模組,分別為:

  1. Hadoop Common:共通工具主要支援其它 Hadoop 模組
  2. Hadoop Distributed File System (HDFS):分散式檔案系統主要提供應用程式資料高輸出量存取。
  3. Hadoop YARN:工作排程框架主要針對叢集資料進行管理。
  4. Hadoop MapReduce:以 YARN 為基礎的系統針對大數據的平行處理。

再來若我們要開始在單一機器上安裝 Hadoop 主要有五個階段,分別為:

  1. 前置階段
  2. 安裝階段
  3. 設定階段
  4. 啟動階段
  5. 驗證階段

前置階段

確認 Java 版本

1
2
3
4
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

建立 Hadoop 使用者和群組

1
2
$ adduser hadoop
$ passwd hadoop

設定 SSH 無密碼登入

1
2
3
4
5
6
$ su - hadoop
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
$ ssh localhost
$ exit

安裝階段

下載 Hadoop 2.8.2 安裝檔並且解壓縮

1
2
3
$ wget http://apache.stu.edu.tw/hadoop/common/hadoop-2.8.2/hadoop-2.8.2.tar.gz 
$ tar -zxvf hadoop-2.8.2.tar.gz
$ mv hadoop-2.8.2 hadoop

設定階段

設定相關目錄的環境變數

1
2
3
4
5
6
7
8
9
10
11
$ vi ~/.bashrc
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0
$ source ~/.bashrc

設定 core-site.xml 設定檔

1
2
3
4
5
6
7
8
$ cd $HADOOP_HOME/etc/hadoop
$ vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

設定 hdfs-site.xml 設定檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopdata/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopdata/hdfs/datanode</value>
</property>
</configuration>

格式化 NameNode

1
$ hdfs namenode -format

設定 mapred-site.xml 設定檔

1
2
3
4
5
6
7
$ vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

設定 yarn-site.xml 設定檔

1
2
3
4
5
6
7
$ vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

啟動階段

啟動 NameNode 和 DataNode

1
2
$ cd /sbin
$ start-dfs.sh

啟動 ResourceManager 和 NodeManager

1
$ start-yarn.sh

驗證階段

取得 Hadoop NameNode 詳細資訊

1
http://localhost:50070

取得 Hadoop DataNode 詳細資訊

1
http://localhost:50075

取得叢集和所有應用程式資訊

1
http://localhost:8088

在 HDFS 上建立資料夾

1
2
$ cd /bin
$ hdfs dfs -mkdir /test

總結我們可以透過上述五個階段,分別為前置階段、安裝階段、設定階段、啟動階段和驗證階段,就能夠解決在 CentOS Linux 單一機器上安裝 Apache Hadoop 的問題。

相關資源