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结果文件: