本文章是由機器翻譯。

Windows Azure

對 Windows Azure Hadoop

Lynn Langit

 

最近,已大量 Hadoop 議論紛紛,用它來處理極大量的資料集的興趣似乎一天天成長。考慮到這一點,我要向您展示如何設置 Windows Azure Hadoop 群集。本文假定 Hadoop 技術基本熟悉。如果你是新到 Hadoop,請參閱"Hadoop 是什麼呢?"寫這篇文章,對 Windows Azure Hadoop 是私人 Beta 版。若要獲得邀請,請訪問 hadooponazure.com。此 Beta 版是 Apache Hadoop (快照 0.20.203+) 與相容。

Hadoop 是什麼?

Hadoop 是一個開放源碼庫設計的並行批次處理過程大規模資料集。它基於 Hadoop 的分散式檔案系統 (HDFS),並包括實用程式和庫,用於存儲在群集中的資料與工作。這些批次處理過程運行使用不同的技術,例如地圖/減少作業數量,並可能會寫在 JAVA 或其他更高級的語言如豬。也有可用於查詢資料存儲在一個 Hadoop 群集中的語言。通過配置單元 HQL 查詢最常用的語言。有關詳細資訊,請訪問 hadoop.apache.org。

設置完群集

一旦我們邀請您參加在測試版中,您可以設置您 Hadoop 的群集。轉至 hadooponazure.com 和日誌與您授權的 Windows Live id。下一步,填寫對話方塊中使用下列值的入口網站:

  1. 群集 (DNS) 名稱: 在表單中輸入名稱"< 你唯一的字串 >.cloudapp。淨"。
  2. 群集大小: 從 4 到 32,選擇的節點,數及其關聯的存儲分配,從每個群集 16TB 到 2TB。
  3. 管理員使用者名和密碼: 請輸入使用者名和密碼 ; 在頁面上列出的密碼複雜性限制。這設置後,您可以連接通過遠端桌面或通過 Excel。
  4. 對於 SQL Azure 實例的配置資訊: 這是一個用於存儲配置單元 Metastore 的選項。如果選擇它,您將需要提供您的 SQL Azure 伺服器實例,以及目標資料庫和登錄憑據的名稱的 URL。您指定的登錄名必須在目標資料庫上具有下列許可權: ddl_ddladmin、 ddl_datawriter、 ddl_datareader。

您填寫此資訊後,按一下請求群集。您將看到一系列的 Web 入口網站中的狀態更新為您的群集 (稱為 Beta 版中的同位素) 被分配,創建並啟動。為您分配的每個群集,您將看到許多工人節點和一個頭節點也稱為 NameNode。

後一段時間 (以我的經驗 5 到 30 分鐘),入口網站將更新以顯示您的群集是分配並可隨時使用。可以然後只需流覽的地鐵樣式介面 (通過按一下大按鈕) 以查看您可以執行哪些類型的資料處理和管理工作 (請參閱圖 1)。除了使用入口網站將與您的群集進行交互,您可能想要打開可用的埠 (預設情況下關閉) 用於 FTP 或 ODBC 伺服器訪問。我將討論一些有點連接的替代方法。

The Azure Hadoop Portal
圖 1 在 Windows 天青 Hadoop 門戶

在入口網站的您的群集部分中,您可以執行基本的管理工作,例如配置對您的群集訪問、 導入資料和管理該群集通過互動式的主控台。在互動式主控台支援 JavaScript 或配置單元。作為圖 1 所示,您還可以訪問您的任務部分。在這裡您可以運行一個 MapReduce 作業 (通過.jar 檔) 和查看任何正在運行以及它的 MapReduce 作業的狀態最近完成。

門戶按鈕顯示最近完成的三種 MapReduce 工作有關的資訊: C# 流示例、 字數統計的示例和 10 GB Terasort 示例。每個按鈕顯示在地圖的狀態和每個作業的減少部分。有幾個其他選項用於查看的地位正在運行 (或完成) MapReduce 作業直接從入口網站和通過其他方式連接到您的群集,如遠端桌面協定 (RDP)。

連接到您的資料

您可以使你 Hadoop 的多種方法,包括直接上傳到您的群集和訪問存儲在其他位置的資料的 Windows Azure 群集上可用的資料。

儘管 FTP 允許上傳從理論上講任何大小的資料檔案,最佳做法是在一個較低的千百萬位元組大小範圍的檔上傳。如果您想要對資料存儲在 Hadoop 之外運行批次處理作業,您需要首先執行幾個配置步驟。要設置外部連接,主要入口網站上的管理群集按鈕上按一下,然後配置您想要使用,如 Windows Azure Blob 存儲位置,Windows Azure 資料超市,在查詢結果或亞馬遜 Web 服務 (AWS) S3 存儲位置的存儲位置:

  1. 若要配置連接到 AWS S3 鬥,請輸入您的安全金鑰 (公共的和私人的),以便您可以訪問存儲在 S3 Hadoop 群集中的資料。
  2. 若要使用 Windows Azure 資料集市中的資料,填寫使用者名 (WLID) (適用于您想要查詢並導入的資料來源) 的金鑰的值,源 (摘錄) 查詢和 (目標) 配置單元表的名稱。一定要從查詢生成的資料集市中的工具之前您輸入查詢到文字方塊中對您的群集中刪除的參數的預設查詢限制 (100 行)。
  3. 若要訪問 Windows Azure Blob 存儲中的資料,您需要輸入的 Blob 存儲位置和您的金鑰 (私密金鑰) 值存儲帳戶名稱 (URL)。

運行 MapReduce 作業

後設置與驗證您 Hadoop 的群集,使您的資料可用,您可能需要開始啃此資料通過運行一個或多個 MapReduce 作業。問題是,如何最好地開始嗎?如果你是新 Hadoop 的有一些示例,您可以運行來感受這什麼是可能。您可以查看和運行任何這些通過按一下 Web 入口網站上的樣品按鈕。

如果您正在用 Hadoop 技術經驗豐富,並且想要運行您自己 MapReduce 作業,有幾種方法。您選擇的方法將取決於您熟悉 Hadoop 工具 (如 Hadoop 命令提示符) 和您的首選的語言。您可以使用 JAVA、 豬、 JavaScript 或 C# Windows Azure Hadoop 寫一個可執行檔的 MapReduce 作業。

我將使用字數統計示例演示了如何從入口網站使用.jar 檔運行 MapReduce 作業。如您所料,此作業計數為一些輸入的單詞 — — 在本例中,一個大型的文字檔 (整個出版本書的內容) — — 並將結果輸出。按一下樣本,然後字數統計要打開在入口網站上的作業配置頁,如中所示圖 2

Setting Up the WordCount Sample
圖 2 設置字數統計樣本

您將看到兩個可配置的參數,這份工作,一個用於函數 (單詞計數) 和另一個用於來源資料 (文本的檔)。(參數 1) 的來源資料包含不只輸入的檔,也是它的位置的路徑名稱。此源資料檔案的路徑可以是文本,或者它可以是"本地,"這意味著該檔存儲在此 Hadoop Windows Azure 群集上。或者,可以從 AWS S3 中檢索來源資料 (通過 S3n: / / 或 S3: / / 協定),從 Windows Azure Blob 存儲 (pls 演算法通過: / / 協定) 或從 Windows Azure 資料超市 (通過首次進口所需的資料使用查詢),或直接從 HDFS 中檢索存儲。輸入到遠端位置的路徑後,您可以按一下驗證圖示 (三角形),你應該得到好消息,如果可以使用所提供的字串連接。

您配置參數後,按一下執行作業。你會發現很多方法,監測工作是執行和作業的結果,這項工作完成後兩個作業狀態。例如,入口網站的主頁面上您的任務部分顯示一個按鈕與最新的作業的狀態在執行過程中和結束後。添加一個新按鈕的每個作業的作業完成後顯示作業名稱、 地圖和期間執行和的狀態 (確定,失敗等等) 的減少部分的完成百分比。

作業歷史記錄頁,您可以從主頁面的管理您的帳戶部分到達,提供了有關的工作,包括文本 (腳本) 用來運行該作業和地位,日期和時間資訊的更詳細資訊。您可以按一下每個作業,以獲得有關執行作業的更詳細資訊的連結。

如果您決定要運行示例,請務必閱讀該特定示例的詳細的說明。可以從入口網站運行一些樣品 (您的任務 |創建作業) ; 其他需要 RDP 連接到您的群集。

使用 JavaScript 來運行作業

按一下互動式主控台按鈕以打開 JavaScript 主控台。在這裡您可以運行 MapReduce 作業通過執行.jar 檔 (JAVA) 通過在提示符下,運行豬的命令或編寫並在 JavaScript 中直接執行 MapReduce 作業。

您可以直接上載 js 中的來源資料 > 提示使用 fs.put 命令。此命令會打開一個對話方塊,您可以在其中選擇要上載到您的群集檔。您可以通過為 4 GB 的 JavaScript 主控台上傳的檔的大小限制 IIS。

從其他遠端存放 (如 Windows Azure Blob) 或其他雲供應商,您還可以使用的來源資料。在要使用的來源資料從 AWS S3,您的請求中使用格式 s3n: / / < 鬥名稱 > / < 資料夾名稱 >。

使用 JavaScript 主控台,您可以使用驗證連接到你的 AWS S3 水桶 # ls 命令鬥位址,如下所示:

    js > # ls s3n: / HadoopAzureTest/書籍
    發現 2 項
    -rwxrwxrwx 1 0 2012年-03-30 00:20 / 書籍
    -rwxrwxrwx 1 1395667 2012年-03-30 00:22 /Books/davinci.txt

 

當你做時,你應該你鬥如本示例所示的內容 (資料夾和檔) 的清單。

如果您想要在運行您的工作之前查看原始程式碼檔的內容,你可以從使用 #cat 命令主控台:

js > #cat s3n://HadoopAzureTest/Books/davinci.txt

 

在驗證您可以連接到您的來源資料之後,您會想要運行您 MapReduce 作業。 以下是這份 (使用.jar 檔) 的字數統計樣本 MapReduce 工作的 JavaScript 語法:

var map = function (key, value, context) {
  var words = value.split(/[^a-zA-Z]/);
  for (var i = 0; i < words.length; i++) {
    if (words[i] !== "") {
      context.write(words[i].toLowerCase(), 1);
    }
  }
};
var reduce = function (key, values, context) {
  var sum = 0;
  while (values.hasNext()) {
    sum += parseInt(values.next());
  }
  context.write(key, sum);
};

在映射部分中,該腳本將源文本拆分為單個單詞 ; 在減少部分,相同詞分組,然後計算。 最後,被產生的輸出 (摘要) 檔,按計數的頂級單詞 (和這些字的計數)。 若要直接從互動式的 JavaScript 主控台運行此字數統計工作,開始用豬關鍵字,以指示您要運行一個豬作業。 接下來,調用方法,這是您傳遞中的來源資料的位置。 在這種情況下,我會執行遠端存放的資料的操作 — — 在 AWS S3。

現在你的豬工作在調用 mapReduce 方法傳入檔的 JavaScript 代碼,這項工作,包括­ing 所需的參數。 為此作業參數是打破文本的方法 — — 對每個字 — — 的價值與減少聚合的資料類型。 在這種情況下,後者是計數 (sum) 資料類型的長。

您然後指定輸出順序使用 orderBy 方法,並再次傳遞的參數 ; 這裡的每個組的單詞計數將輸出以降冪順序。 在接下來的步驟中,採取方法指定應返回多少個聚合的值 — — 在這個例子中 10 個最常見單詞。 最後,調用方法,傳遞要生成的輸出檔案的名稱。 下面是運行此作業的完整語法:

pig.from("s3n://HadoopAzureTest/Books").mapReduce("WordCount.js","word, count:long").orderBy ("計數 DESC").take(10).to("DaVinciTop10Words.txt")

 

當運行該作業時,您會看到在瀏覽器中的狀態更新 — — 地圖,然後降低工作的第一次完成百分比。 您還可以按一下連結以打開另一個瀏覽器視窗,可以看到有關工作進展情況的更多詳細日誌記錄。 在短短幾分鐘,您應該看到一條消息,指示作業已成功完成。 為了進一步驗證作業輸出,然後可以在 JavaScript 主控台中運行一系列命令。

第一個命令,fs.read,顯示的輸出檔案,顯示前 10 字和每年按降冪順序的總計數。 下一個命令,分析、 顯示相同的資訊和將填充資料變數的清單。 最後一個命令,graph.bar,結果以橫條圖顯示。 下面是這些命令的樣子:

    js > 檔 = fs.read("DaVinciTop10Words.txt")
    js > 資料 = 解析 (file.data,"字,計數: 長")
    js > graph.bar(data)

 

使用 JavaScript 來執行 MapReduce 作業的有趣的方面是與 JAVA 的 JavaScript 代碼的簡潔性。 MapReduce 字數統計樣本 JAVA 作業包含超過 50 行代碼,但 JavaScript 示例包含僅 10 行。 這兩個職位的功能是相似的。

使用 C# 與 Hadoop 流

您可以在 Windows Azure Hadoop 在運行 MapReduce 作業的另一種方式是通過 C# 流。 你會發現一個示例,演示如何執行此操作在入口網站上。 作為與前面的示例中,嘗試此示例中,您需要上載所需的檔 (davinci.txt、 cat.exe 和 wc.exe) 至 (如 HDFS、 伏安或 S3 的存儲位置。 您還需要獲取您 Hadoop HEADNODE 的 IP 位址。 若要獲取使用互動式主控台的值,請運行以下命令:

js > #cat apps/dist/conf/core-site.xml

 

填寫在作業轉輪頁 ; 值 你最後一個命令將類似于:

    Hadoop jar hadoop 的例子-0.20.203.1-SNAPSHOT.jar
    -檔"hdfs:///example/apps/wc.exe,hdfs:///example/apps/cat.exe"
    -輸入"/ example/data/davinci.txt"
    -輸出"/ example/data/StreamingOutput/wc.txt"
    -映射器"cat.exe"
    -減速機"wc.exe"

 

在示例中,映射器和減速機是從 stdin,逐行讀取輸入併發出輸出到標準輸出的可執行檔。這些檔產生一份地圖/減少工作,提交給執行群集。該映射檔,cat.exe,和減速機檔,wc.exe,所示圖 3

The Mapper and Reducer Files
圖 3 的映射器和減速機檔

下面是這份工作是如何工作的。第一次的映射檔啟動作為映射任務初始化過程。如果有多個地圖製作者們,每年將推出作為一個獨立的過程,在初始化。在這種情況下,有只單一映射器 file—cat.exe。Exe 上­起訴應對,該映射器任務輸入轉換為線條和 MapReduce 作業的 stdin 部分飼料這些行。下一步,映射器收集行從 stdout 輸出,並將每行轉換成一個鍵/值對。(它可以更改) 的預設行為是關鍵從行到選項卡上的第一個字元的首碼創建的值從在行的其餘部分創建的。如果行中有沒有選項卡,整行成為鍵和值將為空。

映射器的任務完成後,作為一個獨立的過程,在減速機任務初始化將啟動減速機的每個檔。執行,減速機輸入的鍵/值對轉換為線條,並助長這些行 stdin 進程。下一步,減速機收集行-­從 stdout 定向的輸出處理和轉換鍵/值對,將其作為輸出的減速機收集的每一行。

使用 HiveQL 來查詢配置單元的表

使用互動式 Web 主控台,您可以執行您定義 Hadoop 群集中配置單元查詢針對配置單元表。若要瞭解有關配置單元的詳細資訊,請參閱 hive.apache.org。

要使用的配置單元,您首次創建 (和載入) 配置單元的表。使用我們的字數 MapReduce 示例輸出檔案 (DavinciTop10­Words.txt),您可以執行以下命令來創建,然後驗證您的新配置單元表:

    配置單元 > 載入資料 INPATH
    '' hdfs://lynnlangit.cloudapp.net:9000/user/lynnlangit/DaVinciTop10Words.txt
    改寫成表 wordcounttable ;
    配置單元 > 顯示表 ;
    配置單元 > 描述 wordcounttable:
    配置單元 > 選擇 * 從 wordcounttable ;

 

配置單元的語法是類似于 SQL 語法,和 HiveQL 提供了類似的查詢功能。請記住所有的資料是預設情況下,在 Hadoop 區分大小寫。

連接到您的群集的其他方法

使用 RDP 除了使用您通過入口網站的群集,您也可以建立遠端桌面連線到群集的 NameNode 伺服器。要通過 RDP 連接,按一下在入口網站上的遠端桌面按鈕,然後按一下下載的 RDP 連接檔,出現提示時,輸入您的管理員的使用者名和密碼。如果出現提示,請打開您的用戶端電腦上的防火牆埠。建立連接後,您可以直接與您的群集 NameNode 使用 Windows 資源管理器外殼或其他工具,包括 Hadoop 安裝,那樣你會預設 Hadoop 經驗工作。

我的 NameNode 伺服器使用安裝 Apache Hadoop 釋放 0.20.203.1 快照有兩個處理器和 14 GB 的 RAM,伺服器上運行 Windows Server 2008 R2 企業 SP1。請注意該群集資源包含名稱節點和關聯的工人的節點,所以我的樣本群集的處理器總數是八。

安裝過程包括標準 Hadoop 管理工具,如 Hadoop 命令外殼程式或命令列介面 (CLI) Hadoop MapReduce 作業跟蹤器 (位於 HTTP://[namenode]:50030) 和 Hadoop NameNode HDFS (在 HTTP://[namenode]:50070) 上找到。使用 Hadoop 命令外殼程式可以運行 MapReduce 作業或其他管理工作 (如管理您 DFS 群集狀態) 通過您的 RDP 會話。

此時,您可以通過使用 Windows 用戶端機器的 RDP 連接。目前,RDP 連接使用 cookie 來啟用埠轉發。遠端桌面連線的 Mac 用戶端沒有使用該 cookie,所以它無法連接到虛擬機器的能力。

使用 Sqoop 連接器 Microsoft 在 2011 年底運到 SQL Server Hadoop 幾個連接器,(供 SQL Server 2008 R2 或更高版本或 SQL 伺服器並行資料倉儲)。基於 Sqoop 的 SQL 伺服器連接器被旨在讓您導入或匯出 Hadoop 在 Linux 上的和 SQL 伺服器之間的資料。您可以下載從連接器 bit.ly/JgFmm3。此連接器需要作為 Sqoop 的同一節點上安裝 SQL Server 的 JDBC 驅動程式。下載驅動程式在 bit.ly/LAIU4F

你會發現一個示例,演示如何使用 Sqoop 來導入或匯出 SQL Azure 和入口網站的樣本部分中 HDFS 之間的資料。

使用 FTP 使用 FTP,你必須先打開一個埠,您可以通過按一下在入口網站上的配置埠按鈕,然後拖動滑塊以打開 FTP (埠 2226年) 的預設埠。溝通與 FTP 伺服器,您需要為您的帳戶的密碼的 MD5 雜湊值。通過 RDP 連接,打開 users.conf 檔,複製將用來通過 FTP 傳輸檔,然後使用此值來連接的帳戶的密碼的 MD5 雜湊值。注意密碼的 MD5 雜湊值可能不完全受信任的 Hadoop 伺服器上使用自簽名的證書。

在本條中的入口網站,也可以打開一個用於 ODBC 連接 (如 Excel) 埠。ODBC 伺服器連接的預設埠號為 10000。對於更複雜的埠配置,不過,使用 RDP 連接到您的群集。

使用 ODBC 驅動程式 Hadoop (到 Excel 中,PowerPivot 的連接),您可以從入口網站的下載頁面下載 Hadoop 的 ODBC 驅動程式。此驅動程式,其中包括添加在 excel,可以從 Hadoop 連接到 Excel 或 PowerPivot。圖 4 顯示添加在安裝後添加到 Excel 的 Hive 窗格按鈕。該按鈕將公開配置單元查詢窗格,您可以在其中建立到本地宿主的 Hadoop 伺服器或遠端實例的連接。這樣做之後, 您可以寫配置單元查詢 (通過 HiveQL) 針對該群集並執行然後使用的結果被返回到 Excel。


圖 4 在 Excel 中的配置單元查詢窗格

您也可以連接到用於 Excel 使用 PowerPivot Hadoop 資料。要從 Hadoop 連接到 PowerPivot,首先創建用於 OLE DB 使用的配置單元提供的 ODBC 連接。在配置單元查詢窗格上下, 一步連接到 Hadoop 群集時使用您以前,配置的連接然後選擇配置單元表 (或寫 HiveQL 查詢),將所選的資料返回到 PowerPivot。

一定要下載您的電腦硬體和 Excel 的 ODBC 驅動程式的正確版本。該驅動程式在 32 位和 64 位版本中可用。

簡單、 靈活 — — 但與一些未知因素

對 Windows Azure Beta Hadoop 顯示了幾個有趣的優勢,包括:

  • 安裝程式很容易使用直觀的地鐵樣式的 Web 門戶。
  • 您可以得到靈活的語言選擇運行 MapReduce 作業和資料查詢。您可以運行 MapReduce 作業使用 JAVA、 C#、 豬或 JavaScript,並可以使用配置單元 (HiveQL) 執行的查詢。
  • 如果你熟悉 Hadoop 技術,您可以使用您現有的技能。這種實現是符合 Apache Hadoop 快照 0.203 +。
  • 有多種連接選項,其中 ODBC 驅動程式 (SQL 伺服器/Excel)、 RDP 和其他的用戶端,以及連接到其他雲資料存儲包括從 Microsoft (Windows Azure Blob,Windows Azure 資料超市) 和其他 (亞馬遜 Web 服務 S3 桶)。

然而,有許多未知因素在版本上將公開發布的 Windows Azure Hadoop 的:

  • 當前版本是私人 Beta 只 ; 有一個路線圖及計畫的版本功能小資訊。
  • 價格尚未公佈。
  • 在測試版中,期間有可以上載的檔的大小限制和 Microsoft 包括一份免責聲明,"測試版是用於測試的功能,不用於測試生產級資料載入"。所以尚不清楚的發佈版本的性能將會是什麼樣子了。

視頻演示 (截屏視頻) 對 Windows Azure Hadoop 的 Beta 版功能,請參見 BigData 播放清單在 YouTube 上 bit.ly/LyX7Sj

Lynn Langit (LynnLangit.com) 運行自己的技術培訓和諮詢公司。她設計和生成的資料的解決方案,包括 RDBMS 和 NoSQL 系統。她作為微軟的開發者福音工作了四年之後最近回私人執業。她是三個書籍 SQL 伺服器的商業情報,最近"智慧商業智慧解決方案與 SQL Server 2008"(微軟出版社,2009 年) 的作者。她也是非營利的 TKP 的創始人 (TeachingKidsProgramming.org)。

由於有關檢討這篇文章是以下技術專家: Denny Lee