您的位置:首页 > 大数据 > Hadoop

YARN和HDFS的调用方式汇总

2015-11-13 00:25 465 查看

YARN和HDFS的调用方式汇总

总结涉及到运行YARN和HDFS的几种方式,包括使用命令行,JAVA API,REST API,oozie等.

调用YARN的几种方式

1. 命令行方式

hadoop jar wordcount.jar hdfs_input hdfs_output


2. JAVA API

hadoop API docs包含了hadoop的全部包,针对YARN的API也包含其中。

3. 使用YARN REST APIS

通过YARN(MapReduceV2)提供的api,用户可以自定义提交作业,查看作业状态等,参见Hadoop YARN - Introduction to the web services REST API’s

以查看某个job运行状态为例,参见Cluster Application State API.用户查询id为"application_1399397633663_0003"的job的运行状态时,发送的Request和收到的Response如下,

HTTP Request

GET http://<rm http address:port>/ws/v1/cluster/apps/application_1399397633663_0003/state


Response Header:

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)


Response Body:

{
"state":"ACCEPTED"
}


4. 使用oozie

4.1 使用oozie代理提交作业

使用oozie来提交hadoop作业前,需配置hadoop的core-site.xml文件,如下所示,参见--Oozie Quick Start

<!-- OOZIE -->
<property>
<name>hadoop.proxyuser.[OOZIE_SERVER_USER].hosts</name>
<value>[OOZIE_SERVER_HOSTNAME]</value>
</property>
<property>
<name>hadoop.proxyuser.[OOZIE_SERVER_USER].groups</name>
<value>[USER_GROUPS_THAT_ALLOW_IMPERSONATION]</value>
</property>


举一具体例子,

<property>
<name>hadoop.proxyuser.oozie.groups</name>
<value>group1,group2<value>
</property>
<property>
<name>hadoop.proxyuser.oozie.hosts</name>
<value>host1,host2<value>
</property>


上述配置表示,在主机host1和host2上,属于group1和group2的所有用户在提交作业时都会切换到用户oozie提交.不过,查看job时,job的提交者显示的是真实用户的名字.详情见Hadoop 2.0中用户安全伪装/模仿机制实现原理

4.2 具体提交方式

在终端执行命令
oozie job -oozie http://localhost:4080/oozie/ -config ~/map-reduce/job.properties -run
提交一个mapreduce作业,命令中的job.properties文件内容如下所示,

$ cat ~/map_reduce/job.properties

nameNode=hdfs://localhost:9000
jobTracker=localhost:9001
queueName=default
examplesRoot=map-reduce

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}
inputDir=input-data
outputDir=map-reduce


上面内容中,oozie.wf.application.path指定了workflow.xml在HDFS上的位置.workflow.xml的内容如下所示,

<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.2">
<start to='wordcount'/>
<action name='wordcount'>
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<property>
<name>mapred.mapper.class</name>
<value>org.myorg.WordCount.Map</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.myorg.WordCount.Reduce</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>${inputDir}</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>${outputDir}</value>
</property>
</configuration>
</map-reduce>
<ok to='end'/>
<error to='end'/>
</action>
<kill name='kill'>
<value>${wf:errorCode("wordcount")}</value>
</kill/>
<end name='end'/>
</workflow-app>


上述例子的详情见Map Reduce Cookbook

4.3 通过Oozie Web Services API提交作业

参见官网--Oozie Web Services APIP-roxy_MapReduce_Job_Submission.提交内容与上面的workflow.xml类似,故不再赘述.

操作HDFS文件

1. 命令行方式

HDFS Shell,比如使用如下命令修改hdfs_file的权限为750。

hadoop fs -chmod 750 hdfs_file


2. JAVA API

HDFS Permissions Guide–Changes_to_the_File_System_API。同样的,针对HDFS的API位于hadoop API docs中。

3. WebHDFS REST API

参见官网--WebHDFS REST API,包含了对HDFS文件的增删改查及权限处理等.比如,删除一个文件时发送的Request和收到的Response如下所示,

Submit a HTTP DELETE request.

curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE
[&recursive=<true |false>]"


The client receives a response with a boolean JSON object

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked

{"boolean": true}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: