30分鐘快速建立Azure 上的巨量資料操作分析環境 (CentOS, Spark, MySQL, Hive)

Hadoop Ecosystem 的發展十分快速, 從上一篇 "Azure上架設與使用Apache Spark 服務" 到目前不過一個半月, Hadoop 部屬環境的打包跟測試工具 BigTop 已經GA , 而在Azure 上現在也推出支援Spark 1.3.1 的預覽版, 同時也支援運用 Jupyter (IPython) 或 Zeppelin 來做資料操作及圖表呈現。所以現在在Aure 上使用Spark 服務更加方便, 只要幾個點擊就可以建置完Spark 環境, 不需要像之前那樣需透過像指令碼動作 ( Script Action)這樣的方式自行安裝。

對於Apach Spark for Azure HDInsight 有興趣的可以到這邊參考相關資料。

在新的HDInsight 叢集中多了Spark 的叢集類型。

這個版本是基於Windows Server 2012 D2 DataCenter 作業系統。

在Hadoop 生態系中有三大版本發行商,分別是 Hortonworks、Cloudera 以及MapR。有關Hadoop 生態系及三大版本發行商的介紹, 可以參考 資策會 蘇國鈞組長在 2014 Java Developer Day 上的介紹

(謝謝蘇國鈞先生同意引用, 原文在 這些年,我們一起追的 Hadoop)

除了Hortonworks、Cloudera 這兩家主要的 Hadoop 版本發行商已在可以在Azure上選用外, 第三家主要的Hadoop 版本發行商 MapR 也在今年六月宣布會在Azure 市集上推出。習慣用這些版本的使用者現在都可以在Azure市集上很快建立由這些發行商提供的Hadoop 服務。

 

上一篇是在Azure HDInsight上做Spark 的安裝與使用, 本篇主要介紹如何在Azure 上透過Hortonworks 發行的Hadoop 版本, 快速建立一個基於CentOS 上的Spark/Hive/MySQL 操作環境, 作為巨量資料與機器學習的分析與操作使用。

[開發環境準備]
 • Microsoft Azure 帳號 (如果尚未有帳號, 可以到這邊來申請免費試用帳號)
 • 支援SSH 的Telnet 環境, 在Windows 上我們用 Putty, 它是一套免費的 SSH / Telnet 程式,我們會需要用它來連入Hadoop 環境進行操作
 • Azure Storage 管理工具 : 本篇使用的是 ClumsyLeft 出的工具CloudXplorer, 試用版可以在這邊下載。
 
首先第一步建立Azure HDInsight (Hadoop) 環境,登入Azure 管理網站 https://portal.azure.com


 
 選取 "新增服務",在 "資料+分析" 類別下可以找到 "Hortonworks Sandbox with HDP 2.2" 的Hadoop 環境, 並選擇以"傳統" 模式 建立。

 接下來需要輸入"主機名稱"," 使用者名稱", "密碼", 並選擇要用什麼等級的VM。從畫面上也可以看到不同等級VM 每個月的成本。

以基本的A3等級來說,Azure 的試用帳號 (有6700塊Azure 額度)可以使用一個半月左右。不過如果有大量資料要實際進行巨量資料分析,建議可以使用D4等級以上VM。

接下來可以設定VM 要開在哪一個Azure的資料中心。

接下來選擇建立後, 在管理介面上就可以看到 Hortonworks Sandbox 正在建立中。

建立完成後可以點擊該VM, 可以看到該VM的IP Address 及VM 。
在設定中點選端點 ,可以看到各個Hadoop 服務所使用的Port, 包含Hue 使用的port 8000, Ambari 使用的8080 port, 都可以在這邊看到。

另外我們也透過 CloudXplorer 去Azure Storage 看所建立的VM。在所有資源找到建立的儲存體,點開後找到存取金鑰。

在 CloudXplorer 建立新的Account, Account 類別選擇  Azure Blobs Account,並輸入儲存體存取金鑰。

連線上Azure Blobs Storage 之後打開VHDS 容器 (Container), 就可以看到剛剛建立VM 所用到的 VHD 檔。

接下來打開PuTTY, 設定透過Port 22 連到剛剛建立好的Haddop 環境。

開啟連線後,用先前設定的帳號及密碼登入。

由於在這個版本的Hortonworks 並沒有內建Spark 服務, 因此我們需要手動進行Spark 的安裝。
接下來我們需要手動安裝 Spark。

安裝時需要用root 權限。首先先重設root 密碼。

 為了安全性,重設root 密碼時需要再提供一次目前使用者的密碼。

設定完後改成使用 root 身分。

先透過wget 取得有Spark 1.3.1 版本的 RPM repo。

接下來用yum 安裝Spark 1.3.1 版Package。

 

這部分安裝約需要五分鐘。

 接下來安裝 PySpark。

 

接下來用HDP-Select 指令來指定 Spark Package,這樣整個Spark 環境已經架設完成, 可以開始使用Spark 服務。

先到spark 目錄, 並切換成身分成Spark 服務使用者。然後先試著執行Spark 計算Pi 值得範例。

範例順利執行完, 也得到Pi 值。

 

接下來我們到Hue 的介面上, 可以看到 Spark Pi 的工作順利執行完。

 

 

在上一篇Spark 環境介紹中我們透過Spark 去計算湯姆歷險記中提到湯姆跟哈波的次數, 我們這次改以紅樓夢來計算裏頭提到林黛玉跟賈寶玉的次數。

首先下載紅樓夢電子書文字檔, 放到暫存資料夾中。

然後將檔案放到HDFS中。

 

再啟動Spark Scala介面。

 

接下來用Scala 語言撰寫讀取紅樓夢文字檔,並分別計算提到"寶玉" 及"黛玉"的次數。

// 讀取紅樓夢文字檔
val file = sc。textFile("/tmp/redhouse。txt")
print (file。count())

// 挑出內含"黛玉" 的句子
val DiUCount = file。filter(line => line。contains("黛玉"))

//挑出內含"寶玉" 的句子
val BauUCount = file。filter(line => line。contains("寶玉"))

// 計算黛玉 出現的句子數
DiUCount 。count()

// 計算寶玉出現的句子數
BauUCount 。count()

 

我們也可以在Hue的Job Browser 中看到完成的工作。

另外在資料分析情境中通常會用到SQL 資料庫, 在這邊我們也建立一個MySQL 資料庫。
為了練習方便先選擇在VM 中安裝mySQL。

Sudo yum install MySQL

安裝完後我們可以下載mySQL 的範例資料庫 sakila。

 

將sakila 範例資料庫匯入mySQL 。
 mysql < sakila-schema。sql
mysql < sakila-data。sql

 

查詢一下sakila資料庫中的actor 資料表,確認資料成功匯入。 

除了在本機VM上直接建立MySQL 外,Azure 上也可以使用由ClearDB 提供的MySQL 資料庫服務。

在Azure Portal 的建立->資料+儲存體中 選擇建立由ClearDB 提供的MySQL 資料庫。

 

MySQL 服務等級選免費的水星等級(可以視需要選擇其他須付費等級, 但需注意付費等級會從信用卡中扣款, 不能從試用帳號、 Azure Pass、MSDN 、BizSpark等計畫提供的免費Azure額度中扣)。

 

 輸入所要用的資料庫名稱 (免費的水星等級只能有一個資料庫)。

選擇建立資料庫。

 

Azure系統通知也會通知資料庫建立成功。

如果要查看使用狀態, 點選管理資料庫功能 就會開啟Clear DB的監控及管理介面。

點選設定-> 屬性就可以看到可以資料庫的連線帳號密碼。

我們可以嘗試連入資料庫. 

 

目前ClearDB在Azure 上提供的免費水星等級資料庫提供99.95%的SLA, 但只能有單一資料庫,其他付費等級就沒有這個限制。

到此我們透過Hortonworks的Hadoop VM ,再自行加上Spark及MySQL ,已經在Azure 建立一個基於CentOS, 有Spark、 MySQL、 Hue、 Hive、 Sqoop、 Beeswax、 Pig 、 HDFS等相當完整的巨量資料操作及分析環境。

如果是對於Hadoop 有興趣的入門者, Hortonworks 也提供包含"Apache Spark on HDP"、  "Hello World"、 "Real World Examples" 等相當完整的Tutorial,  也可以在這個環境Tutorial 的練習。
https://hortonworks.com/products/hortonworks-sandbox/#tutorial_gallery

 

本篇介紹如何在30分鐘內在Azure上透過Open Source 軟體快速建立一個可進行巨量資料處理的環境。Azure 上目前已經支援Hadoop 生態系中三家主要Hadoop 套裝環境發行商,提供相當便利的Hadoop 資料分析環境方式。而Azure 本身也提供命名為HDInsight的Hadoop 服務,同時也提供Storm、Hbase、Spark等叢集服務類型。使用者可以根據自己的需求,在Azure 上找到適合的部屬方式,快速的建立巨量資料操作與分析環境。

 

 [參考資料]

 Getting Started with Hortonworks Sandbox on Azure

 Hadoop哪家强?Hortonworks、Cloudera、MapR案例集锦

Apache Spark 1.3.1 : Technical Preview with HDP 2.2

 在 HDInsight 上佈建 Apache Spark 並使用 Spark SQL 執行互動式查詢

Sakila Sample Database