YARN REST API 提交MR任务

本文详述了使用YARN REST API提交MapReduce任务的全过程,包括上传JAR包至HDFS、生成新的applicationId、获取JAR包信息及提交应用的具体步骤。通过Postman演示了各阶段的HTTP请求及响应。

@羲凡——只为了更好的活着

YARN REST API 提交MR任务

官网介绍地址 http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html
既然是api,推荐使用postman或者idea,本文使用postman

0.准备MR的jar包并上传到hdfs上
hdfs dfs -put xifan227-1.0-SNAPSHOT.jar /cpos/test/
1.生成新的applicationId

Cluster_New_Application_API

请求类型:POST
URL:http://rm-http-address:port/ws/v1/cluster/apps/new-application
在这里插入图片描述

2.查看MR的jar包信息

请求类型:GET
URL:http://nm-http-address:port/webhdfs/v1/cpos/test/xifan227-1.0-SNAPSHOT.jar?op=GETFILESTATUS
在这里插入图片描述

3.提交应用

Cluster Applications API(Submit Application)
请求类型:POST
URL:http://rm-http-address:port/ws/v1/cluster/apps
Body:

{
    "application-id":"application_1586340793234_0125",
    "application-name":"AaronTest",
    "queue":"default",
    "priority":-2,
    "am-container-spec":
    {
      "local-resources":
      {
        "entry":
        [
          {
            "key":"xifan227-1.0-SNAPSHOT",
            "value":
            {
              "resource":"hdfs://test96.com:8020/cpos/test/xifan227-1.0-SNAPSHOT.jar",
              "type":"FILE",
              "visibility":"APPLICATION",
              "size": 30301,
			  "timestamp": 1586400852288
            }
          }
        ]
      },
      "commands":
      {
        "command":"/opt/modules/hadoop-3.2.1/bin/yarn jar xifan227-1.0-SNAPSHOT mr.WordcountMapreduce 1><LOG_DIR>/WC.stdout 2><LOG_DIR>/WC.stderr"
      }
    },
    "max-app-attempts":1,
    "resource":{"memory":1024, "vCores":2},
    "application-type":"MAPREDUCE" 
}



在这里插入图片描述

4.结果展示

在这里插入图片描述
细心的朋友会发现:
我明明只提交了一个application(application-id为application_1586340793234_0125),但是在8088界面上却多出来一个application-id为application_1586340793234_0126,而且最蛋疼的是编号125的应用失败了,但是126的却成功了。这个问题特别尴尬,有解决的朋友指导一下吧。

若对博客中有任何问题,欢迎留言交流

@羲凡——只为了更好的活着

<think>好的,我现在需要帮助用户通过YarnREST API查询任务名称中含'odshivedb'的任务信息。首先,我得回顾一下用户提供的引用内容,看看有没有相关的API或方法。 用户提到了引用[3],里面有一个查看指定任务详细信息的API:GET http://<rm http address:port>/ws/v1/cluster/apps/application_1326821518301_0005。这说明YarnREST API可以通过/cluster/apps端点获取应用信息。接下来,用户想根据任务名称过滤,可能需要用到查询参数。 根据Yarn REST API的文档,通常可以通过查询参数来过滤结果。例如,使用states参数按状态过滤,或者使用keywords进行模糊匹配。用户需要的是任务名称含'odshivedb',所以可能需要类似name=odshivedb或者含关键词的参数。 不过,用户提供的引用中没有直接提到名称过滤的参数,但一般来说,REST API可能会支持这样的过滤。例如,可能存在一个参数如applicationType或applicationTags,但更可能的是使用通配符或者搜索关键字。可能需要查阅Yarn REST API的文档确认具体参数,但根据用户提供的引用,可能只能通过获取所有应用然后过滤名称。 假设YarnAPI支持使用查询参数来过滤应用名称,可能构造像这样的请求:GET http://<rm-http-address:port>/ws/v1/cluster/apps?name=odshivedb。但不确定是否正确。或者可能需要使用通配符,例如*odshivedb*,但需要确认API是否支持。 另外,用户引用的示例任务名称是'ods_to_dwd',而用户现在需要的是'odshivedb',所以可能需要模糊查询。如果API不支持直接名称过滤,可能需要获取所有应用,然后在返回的JSON中查找name字段含'odshivedb'的条目。 根据引用[3],返回的应用信息中应该含name字段,如引用[1]中的name = ods_to_dwd。因此,正确的步骤可能是: 1. 调用获取所有应用的API:GET /ws/v1/cluster/apps 2. 解析返回的JSON,遍历每个应用,检查name字段是否含'odshivedb' 3. 提取符合条件的结果 但用户可能希望直接通过API过滤,而不是在客户端处理。因此需要确认Yarn API是否支持这样的过滤。例如,某些API允许使用查询参数过滤,比如YarnAPI可能有states、queue、user等参数,但不确定是否有name参数。例如,可能有一个参数叫做applicationTypes,或者可以使用通配符。 如果API不支持直接名称过滤,用户可能需要在客户端处理,例如使用jq工具过滤结果: curl -s http://<rm-address>/ws/v1/cluster/apps | jq '.apps.app[] | select(.name | contains("odshivedb"))' 不过用户可能需要具体的步骤,括如何构造请求,如何处理响应。 因此,总结步骤: 1. 确定ResourceManager的HTTP地址和端口,通常是<resourcemanager-host>:8088 2. 发送GET请求到/cluster/apps端点,获取所有应用列表 3. 在响应中查找name字段含'odshivedb'的应用 4. 或者如果API支持,使用过滤参数直接缩小结果范围 需要检查Yarn REST API文档,是否有过滤应用名称的参数。例如,根据Apache Yarn的文档,确实有一个参数叫做“name”,可以匹配应用名称,但可能需要完全匹配。而用户需要的是部分匹配,所以可能无法直接使用。因此,可能需要客户端过滤。 例如,使用curl获取所有应用,然后用jq处理: curl -s "http://<rm-host>:8088/ws/v1/cluster/apps" | jq '.apps.app[] | select(.name | contains("odshivedb"))' 这样就可以筛选出名称含odshivedb的应用。这可能是最直接的方法。 另外,用户的问题中提到“task名称”,但Yarn中的任务通常指的是应用(application),而task可能是MapReduce中的任务,但如果是Flink作业,可能整个作业对应一个Yarn应用。所以用户可能实际上需要查询应用名称含特定字符串的应用信息。 综上,正确的步骤应该是通过调用获取所有应用的API,然后过滤name字段,或者在可能的情况下使用查询参数进行过滤。但需要确认API是否支持模糊匹配。例如,YarnAPI可能支持通配符,比如name=*odshivedb*,但需要验证。 如果API不支持,只能客户端处理。因此,在回答中应该给出两种可能性:首先尝试使用API的过滤参数,如果不行,就使用客户端工具处理。</think>通过Yarn REST API查询任务名称含'odshivedb'的任务信息,可按以下步骤操作: --- ### 1. **确定ResourceManager的HTTP地址** 首先需获取Yarn ResourceManager的HTTP服务地址,格式一般为:`http://<resourcemanager-host>:8088`。例如: ```bash http://yarn-cluster-manager:8088 ``` --- ### 2. **调用Yarn REST API获取应用列表** 通过`/ws/v1/cluster/apps`接口获取所有应用信息,并添加查询参数过滤名称: ```bash curl -s "http://<rm-host>:8088/ws/v1/cluster/apps?states=RUNNING,ACCEPTED&applicationTags=odshivedb" ``` - **参数说明**: - `states`: 可筛选状态(如`RUNNING`、`ACCEPTED`等),不指定则返回所有状态[^3] - `applicationTags`: 若任务配置了标签,可直接过滤(非标准名称过滤) - **若需名称模糊匹配**,需解析返回的JSON并过滤`name`字段(见步骤3)。 --- ### 3. **解析JSON结果并过滤名称** 若API无法直接过滤名称,使用`jq`工具筛选`name`字段含`odshivedb`的应用: ```bash curl -s "http://<rm-host>:8088/ws/v1/cluster/apps" | \ jq '.apps.app[] | select(.name | contains("odshivedb"))' ``` - **输出字段**:含应用ID、名称、状态、跟踪URL等关键信息[^1]。 --- ### 4. **直接访问应用详情(可选)** 根据步骤3获取的`applicationId`,调用详情接口: ```bash curl "http://<rm-host>:8088/ws/v1/cluster/apps/application_1609329247342_52786" ``` 此接口可获取任务详细配置、资源使用情况等[^3]。 --- ### § 示例结果 § ```json { "apps": { "app": [ { "id": "application_1609329247342_52786", "name": "odshivedb_etl_job", "state": "RUNNING", "finalStatus": "UNDEFINED", "trackingUrl": "http://flink-job-tracker/proxy/application_1609329247342_52786" } ] } } ``` --- ### § 相关优化与注意事项 § 1. **状态实时性**:Yarn API数据更新存在延迟(通常1-2分钟),需结合监控系统使用[^2]。 2. **集成到项目**:可将API调用封装为脚本或服务,实现任务状态实时监控。 3. **安全认证**:若集群启用Kerberos认证,需在请求中添加令牌。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值