Linux開發人員玩轉HDInsight集羣上的MapReduce

HDInsight是Azure上基於Hadoop的大數據分析服務,後臺使用的其實是Hortonworks Data Platform。對於初次使用HDInsight的用戶,或者從Cloudera轉過來的開發人員,在剛開始使用HDInsight的時候,碰到的第一個問題是,建立完集羣之後,如何提交經典的MapReduce Java程序到HDInsight集羣上?整體上來講,有如下幾種方式: java

  1. 使用SSH登陸到HDInsight頭節點,scp須要提交的jar包,而後使用命令本地提交便可,頭節點上各類環境已經配置好了,對於Linux 開發人員來講多是最方便的,但對於團隊來說,存在安全風險,好比某個開發人員不當心改錯了集羣配置文件
  2. 使用curl命令行來提交,實際是調用HDInsight後面的REST API,將你的jar包提早上傳到Azure storage,而後調用遠端接口提交和查看任務便可,好處是在Linux/Mac/Windows上均可以提交,麻煩的地方時參數比較繁瑣,須要本身上傳jar包
  3. 使用PowerShell,對於Linux 開發者而言可能並非特別習慣,而對於你們比較喜歡的Azure CLI 2.0來講,目前暫不支持HDInsight相關命令

 

對於企業級完整的權限控制,你們能夠考慮Apache Ranger,在HDInsight上面目前支持Ranger+AD的方式提供細粒度的權限控制,固然,須要你的大數據配置管理人員比較瞭解Ranger的機制,配置相關的策略等等,本文介紹的一個場景是對於一個快速開發迭代的團隊,選擇Linux/Mac友好的第一種和第二種方式來提交MapReduce任務;在使用第一種場景的用戶中,用戶也但願可使用一臺單獨的Linux客戶機器,而不是集羣頭節點讓開發人員提交任務,避免開發人員錯誤修改頭節點配置致使集羣問題。本文分別討論兩種方式 node

 

使用curl方式提交MapReduce任務

假設你已經在你的Linux機器,MacBook等本地開發機器上安裝好了curl和準備好的Java MapReduce程序。 web

  1. 登陸到HDInsight集羣:

    curl -u admin -G https://myhdp.azurehdinsight.net/templeton/v1/status 安全

admin是你建立集羣時的管理用戶名,myhdp是你的集羣名稱,若是一切正常,會顯示: bash

  1. 首先須要把你的jar包上傳到Azure storage,上傳你的MapReduce jar包,你可使用Storage Exploer圖形化界面,也可使用Azure CLI來作,或者使用管理界面直接上傳便可,相關軟件的下載地址以下:

    Azure Storage Explorer 服務器

    https://azure.microsoft.com/en-us/features/storage-explorer/ 網絡

    Azure CLI 2.0 oracle

    https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest app

  2. 瞭解你的HDInsight的storage帳號信息,能夠登陸到Azure Portal,點擊你的HDInsight集羣,選擇存儲帳號,默認容器,你能夠選擇自建目錄上傳你的jar包,選擇"上傳"便可上傳你的jar包:

    若是你想使用命令行來作,本地咱們使用Azure CLI來作; 運維

    az login

    az storage blob upload -f ./hadoop-mapreduce-examples.jar -c myhdp-2018-03-31t14-12-22-220z -n myhdpstore

  3. 上傳完成後,既能夠開始提交你的MapReduce任務了,提交的任務命令行以下:

    JOBID=`curl -u admin -d user.name=admin -d jar=/example/jars/hadoop-mapreduce-examples.jar -d class=wordcount -d arg=/example/data/gutenberg/davinci.txt -d arg=/example/data/output https://myhdp.azurehdinsight.net/templeton/v1/mapreduce/jar | jq .id`

    echo $JOBID

  4. 提交完成後,能夠檢查任務狀態:

    curl -G -u admin -d user.name=admin https://myhdp.azurehdinsight.net/templeton/v1/jobs/job_1522506134287_0003 | jq .status.state

  5. 登陸到管理界面上的HDInsight存儲中,咱們提交任務定義的輸出目錄是 /example/data/output,那麼咱們能夠檢查這個工做目錄,能夠看到已經生成了SUCCESS和part-兩個文件,word count'結果能夠在part文件中檢查:

 

HDInsight Linux客戶機方式

若是想要執行完整的yarn,hdfs等功能,就須要一個完整的客戶端進行操做,那麼這個任務能夠登陸到頭節點上執行,但就如以前討論的結果,在頭節點上執行不是很安全,開發運維人員容易誤操做或者修改配置文件致使集羣不工做,因此須要一個安全的客戶機或者gateway來作;要實現這個目標,能夠有幾種作法,好比本身安裝配置一臺Linux虛擬機,從頭開始安裝配置Hadoop環境,依賴庫,配置文件等等;或者直接從現有頭文件服務器"克隆"一臺客戶端環境便可,本文采起第二種方式,下面詳細介紹如何實現這種配置。

 

  1. 首先新建一套基於Linux的HDInsight集羣,Hadoop 2.7,HDI 3.6,注意記住本身的用戶名名,密碼等:

  1. 在第5步高級設置配置裏面,選擇配置到虛擬機網絡,選擇但願將你的集羣部署進去的虛擬網絡和子網,完成部署,這樣能夠在後續虛擬機訪問的時候虛擬機和HDInsight在一個子網進行訪問:

  2. HDInsight集羣部署完成後,咱們就須要部署一臺Linux客戶端虛擬機,這裏咱們選擇一臺Ubuntu Linux虛擬機進行部署,確保你的虛擬機和以前建立的Hadoop在一個虛擬網絡以內,這裏虛擬網絡是myhdpnet:

  1. 虛擬機部署完成後,ssh登陸到這臺Linux虛擬機,添加第三方的源,安裝Oralce JDK,安裝完成後,使用java -version測試版本:

 

安裝OpenJDK

sudo apt-get install openjdk-8-jdk

 

或者安裝Oracle JDK:

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java8-installer

 

 

  1. 登陸到你的HDinsight集羣的頭節點,通常的連接地址相似於sshuser@myhdp-ssh.azurehdinsight.net,你能夠在管理界面的你的總覽部分,得到你的ssh登陸信息:

 

  1. 默認狀況下,HDP的相關信息都安裝在/usr/hdp下面,當前的版本是2.6.2.25-1,咱們進入到這個目錄,能夠看到hadoop全部的須要的組件都在

咱們須要構建客戶端,因此須要目錄hadoop,hadoop-hdfs,Hadoop-mapreduce,Hadoop-yarn,使用tar命令分別打包,例如hadoop目錄:

sudo tar -czvf hadoop.tar.gz Hadoop

7.打包配置文件,這個文件目錄比較特殊,須要單獨打包:

cd /usr/hdp/current/hadoop-client/conf

sudo tar -czvf conf.tar.gz ./

 

8. Scp你所打包的hadoop.tar.gzhadoop-hdfs.tar.gzhadoop-mapreduce.tar.gzhadoop-yarn.tar.gz到你的Linux開發客戶機器,建立相關目錄並解壓縮這些包:

sudo mkdir -p /usr/hdp/2.6.2.25-1

sudo chown -R steven:steven /usr/hdp/2.6.2.25-1

cp hadoop*.tar.gz /usr/hdp/2.6.2.25-1

tar -xzvf hadoop.tar.gz

其餘的hdfs,yarn等等都是同樣的方法解壓縮

 

9. 進入到hadoop目錄,刪除conf連接,新建目錄conf,拷貝conf.tar.gz並解壓縮:

rm -rf conf

mkdir conf

cd conf

cp ~/conf.tar.gz ./

tar -xzvf conf.tar.gz

 

若是如今你去執行hadoop等命令,依然會報錯,問題是缺乏加密腳本和依賴的java庫:

10.拷貝須要的依賴jar包以及安全腳本,jar包主要是微軟的一些定製包,安全腳本等,須要登陸到你的HDInsight頭節點上:

cd /usr/lib

sudo tar -czvf hdinsight-common.tar.gz hdinsight-common/

sudo tar -czvf hdinsight-logging.tar.gz hdinsight-logging/

scp這兩個tar到你的Linux客戶機上,建立/usr/lib目錄,並解壓縮:

sudo tar -xzvf hdinsight-common.tar.gz -C /usr/lib

sudo tar -xzvf hdinsight-logging.tar.gz -C /usr/lib

sudo chown -R steven:steven /usr/lib/hdinsight-*

 

11.最後,爲了方便在當前用戶下執行hadoop等命令,將hadoop命令路徑添加到當前bashrc文件中:

vi .bashrc

末尾增長一行:

export PATH=$PATH:/usr/hdp/2.6.2.25-1/hadoop/bin

source .bashrc

爲了你的客戶機能夠根據DNS名稱找到頭節點,須要將頭節點hosts文件裏面的迪一行配置文件拷貝粘貼到你的/etc/hosts文件:

10.0.0.16 hn0-myhdp.zs5qwfxkanyefgbpqapxnhsite.cx.internal.cloudapp.net headnodehost hn0-myhdp.zs5qwfxkanyefgbpqapxnhsite.cx.internal.cloudapp.net. hn0-myhdp headnodehost.

 

12.好了,到如今爲止,全部配置已經完成,你能夠在當前虛擬機執行各類hadoop操做,好比:

hdfs dfs -ls /

hadoop fs -ls /example

 

使用word count測試文件提交MapReduce任務:

yarn jar hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/wordcountout2

能夠利用hdfs命令查看MapReduce結果文件:

相關文章
相關標籤/搜索