HDInsight是Azure上基於Hadoop的大數據分析服務,後臺使用的其實是Hortonworks Data Platform。對於初次使用HDInsight的用戶,或者從Cloudera轉過來的開發人員,在剛開始使用HDInsight的時候,碰到的第一個問題是,建立完集羣之後,如何提交經典的MapReduce Java程序到HDInsight集羣上?整體上來講,有如下幾種方式: java
對於企業級完整的權限控制,你們能夠考慮Apache Ranger,在HDInsight上面目前支持Ranger+AD的方式提供細粒度的權限控制,固然,須要你的大數據配置管理人員比較瞭解Ranger的機制,配置相關的策略等等,本文介紹的一個場景是對於一個快速開發迭代的團隊,選擇Linux/Mac友好的第一種和第二種方式來提交MapReduce任務;在使用第一種場景的用戶中,用戶也但願可使用一臺單獨的Linux客戶機器,而不是集羣頭節點讓開發人員提交任務,避免開發人員錯誤修改頭節點配置致使集羣問題。本文分別討論兩種方式 node
假設你已經在你的Linux機器,MacBook等本地開發機器上安裝好了curl和準備好的Java MapReduce程序。 web
curl -u admin -G https://myhdp.azurehdinsight.net/templeton/v1/status 安全
admin是你建立集羣時的管理用戶名,myhdp是你的集羣名稱,若是一切正常,會顯示: bash
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
若是你想使用命令行來作,本地咱們使用Azure CLI來作; 運維
az login
az storage blob upload -f ./hadoop-mapreduce-examples.jar -c myhdp-2018-03-31t14-12-22-220z -n myhdpstore
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
curl -G -u admin -d user.name=admin https://myhdp.azurehdinsight.net/templeton/v1/jobs/job_1522506134287_0003 | jq .status.state
若是想要執行完整的yarn,hdfs等功能,就須要一個完整的客戶端進行操做,那麼這個任務能夠登陸到頭節點上執行,但就如以前討論的結果,在頭節點上執行不是很安全,開發運維人員容易誤操做或者修改配置文件致使集羣不工做,因此須要一個安全的客戶機或者gateway來作;要實現這個目標,能夠有幾種作法,好比本身安裝配置一臺Linux虛擬機,從頭開始安裝配置Hadoop環境,依賴庫,配置文件等等;或者直接從現有頭文件服務器"克隆"一臺客戶端環境便可,本文采起第二種方式,下面詳細介紹如何實現這種配置。
安裝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
咱們須要構建客戶端,因此須要目錄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.gz,hadoop-hdfs.tar.gz,hadoop-mapreduce.tar.gz,hadoop-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結果文件: