1. 支持队列内抢占,支持不同用户的应用和同一队列中的优先级之间的平衡

功能描述:

Yarn队列内支持fair Scheduler。

功能测试:

OCDP5.0-Yarn新特性测试 - 图1

遇到问题:

2. Capacity Scheduler中的应用程序优先级调度支持

功能描述:

Yarn队列内支持应用的优先级调度。

功能测试:

-updatePriority update priority of an
application. ApplicationId can
be passed using ‘appId’ option.


yarn app -updatePriority 5 -appId application_1542278336337_0007
OCDP5.0-Yarn新特性测试 - 图2

OCDP5.0-Yarn新特性测试 - 图3

遇到问题:

Update后发现页面没有生效,后面再进行测试。


3. 支持YARN中的应用程序超时功能

功能描述:

超时功能表示应用程序在YARN上花费的总时间。应用程序的生存期是从其启动时间到完成时间计算的,包括实际运行时间以及资源分配的等待时间。在YARN系统上的用户和管理员有时可能需要限制特定生存期服务的持续时间。对于用户和管理员来说,限制持续时间的要求是不同的。例如,用户可能运行一个计划的cron作业,该作业每天返回在特定“N”分钟期间运行的应用程序的统计信息。假设计划作业以不同的数据集在指定时间运行,大约需要一个小时才能完成。如果作业没有在估计的持续时间内完成,则结果输出可能对用户没有用处,特别是当用户监视应用程序以在运行后声明其资源时。因此,限制应用程序的生存期不需要监视其运行。可能需要管理员限制特定叶队列的应用程序生存期。在跨部门共享队列的组织中,这种需求可能非常有用。在这种情况下,限制提交到树叶队列的申请的超时功能将确保希望提交工作的不同部门的用户能够最佳地获得资源。通过使用户和管理员能够配置应用程序的生存期来满足用户和管理员的需求。这个特性在Apache Hadoop中可用,从Hadoop2.9开始。Hortonworks数据平台(Hortonworks Data Platform,HDP)从HDP 3.0开始就包含了这个特性。

功能测试:

1.配置文件指定:

yarn.scheduler.capacity..maximum-application-lifetime
提交到队列的应用程序的最大生存期(以秒为单位)。任何小于或等于零的值都将被视为禁用。对于此队列中的所有应用程序来说,这将是一个困难的时间限制。如果配置了正值,那么提交到此队列的任何应用程序都将在超过配置的生存期后被终止。用户还可以在应用程序提交上下文中指定每个应用程序的生存期。但是,如果用户生存期超过队列最大生存期,它将被重写。这是点对点的配置.注意:配置过低的值会导致更快地杀死应用程序。此特性仅适用于叶队列。

yarn.scheduler.capacity.root..default-application-lifetime
以秒为单位提交到队列的应用程序的默认生存期。任何小于或等于零的值都将被视为禁用。如果用户尚未提交具有生存期值的应用程序,则将接受此值。这是点对点的配置.注意:默认生存期不能超过最大生存期。此特性仅适用于叶队列。

2. 通过java api 设置:
OCDP5.0-Yarn新特性测试 - 图4
3. 通过yarn命令指定:

yarn application -appId -updateLifetime

yarn application -appId application_1540792728433_0005 -updateLifetime 300
在上面的示例中,application_1540792728433_0005的生存期从现在起更新为300秒。如果当前时间是上午10:00,则应用程序超时发生在上午10:05。

4. 通过yarn rest api命令指定:
设定:
PUT http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeout
查看:
GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeouts/{type}

遇到问题:

4. 支持在YARN上运行的Docker容器

功能描述:

https://docs.hortonworks.com/HDPDocuments/HDP3/HDP-3.0.0/data-operating-system/content/run_docker_containers_on_yarn.html

功能测试:

yum install docker


遇到问题:

5. YARN上的支撑组件(YARN-6613)

功能描述:

OCDP5.0 YARN直接支持长服务(如:llap)

功能测试:

遇到问题:

6. 在YARN上支持dockerized Spark作业

功能描述:

https://docs.hortonworks.com/HDPDocuments/HDP3/HDP-3.0.0/data-operating-system/content/using_docker_containers_on_yarn_for_spark_jobs.html

功能测试:

遇到问题:

7. 需要资源管理器Web UI授权控制(用户只能看到自己的工作)

功能描述:

之前yarn的web界面不安全,任何用户都可以登录查看所有在yarn上跑的job。
OCDP5.0 yarn服务在开启kerberos后,可以支持用户通过web界面只能查看自己的运行的job。浏览器通过kerberos认证过程取到对应用户,然后timeline2.0再进行job过滤实现。

功能测试:

OCDP5.0-Yarn新特性测试 - 图5

问题原因:
浏览器作为客户端无法通过kerberos认证,所以无法访问对应web页面。


解决方法:
目前只有Firefox浏览器支持kerberos。我们基于该浏览器进行解决。

1.windows上安装MIT kerberos。
32位:http://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-amd64.msi
64位:http://web.mit.edu/kerberos/dist/kfw/4.1/kfw-4.1-1386.msi

安装完成后,将windows环境变量中kerberos变量前置。
OCDP5.0-Yarn新特性测试 - 图6

修改kerberos配置:
进入目录C:\ProgramData\MIT\Kerberos5
修改:krb5.ini文件内容为集群主机/etc/krb5.conf文件内容。保存,启动MIT kerberos服务。


2.初始化keytab:

修改windows主机hosts映射:
C:\Windows\System32\drivers\etc
修改hosts文件添加集群主机&ip:
10.1.236.145 host-10-1-236-145
10.1.236.82 host-10-1-236-82
10.1.236.83 host-10-1-236-83
10.1.236.84 host-10-1-236-84
10.1.236.51 host-10-1-236-51

将集群keytab文件smokeuser.headless.keytab 拷贝到windows目录:C:\Users\yinkaipeng

进入CMD终端:windows+r cmd
执行初始化命令:kinit -kt smokeuser.headless.keytab ocdc-ocdp@ocdp
OCDP5.0-Yarn新特性测试 - 图7

如果无报错,且能正常klist,说明正常。




3.配置Firefox浏览器:

url框输入:about:config
然后搜配置:network.negotiate-auth.trusted-uris
进行修改:加入需要认证的主机名加端口,多个用英文逗号隔开。
OCDP5.0-Yarn新特性测试 - 图8




然后就可以正常访问了:




OCDP5.0-Yarn新特性测试 - 图9



注:如果keytab过期后需要使用新的keytab重新进行kinit。


配置yarn进行用户只能看到自己的job:

OCDP5.0-Yarn新特性测试 - 图10
yarn.webapp.filter-entity-list-by-user=true
重启yarn生效


然后我们只需要kinit对应用户的keytab,就可以看到对应用户跑的job。
比如:ocdc
OCDP5.0-Yarn新特性测试 - 图11

OCDP5.0-Yarn新特性测试 - 图12

遇到问题:

8. YARN / MapReduce与SSO /代理集成(通过Knox)

功能描述:

默认可以通过knox网关进行代理访问,由于yarn界面本身没有权限认证,所以在开启kerberos前这些都没有问题。开启kerberos后,yarn等web界面都需要通过kerberos认证后才能够访问。然而使用knox代理后,knox本身通过了kerberos认证,所以web访问时不再进行kerberos认证即可访问。

功能测试:

  1. 集群开启kerberos。
    2. 访问yarn web界面,发现无法访问。
    OCDP5.0-Yarn新特性测试 - 图13
    OCDP5.0-Yarn新特性测试 - 图14

    3. 配置knox代理并通过knox访问:
    OCDP5.0-Yarn新特性测试 - 图15









    通过knox代理可以正常访问,无需web端再进行kerberos认证。
    OCDP5.0-Yarn新特性测试 - 图16
    OCDP5.0-Yarn新特性测试 - 图17

    遇到问题:

9. 支持删除队列而无需重新启动RM

功能描述:

在OCDP5.0之前版本中,yarn的scheduler队列数据存储在对应目录的配置文件:capacity-scheduler.xml 中。每次我们通过ambari进行的队列改变都会修改这个配置文件,resourcemanager在重启时会将该文件读到内存中,这样我们进行队列删除时,就需要重启resourcemanager才会生效。
在OCDP5.0版本中,yarn的队列信息支持存储在:file、zk、leveldb三种方式。File就是旧的存储方式,zk和leveldb是新的存储方式,使用这两种之一的方式都可以实现删除队列不重启resourcemanager。本次我们使用zk测试。

功能测试:

修改配置:
OCDP5.0-Yarn新特性测试 - 图18
yarn.scheduler.configuration.store.class=zk

通过ambari重启yarn服务。


OCDP5.0-Yarn新特性测试 - 图19
OCDP5.0-Yarn新特性测试 - 图20



yarn schedulerconf -remove “root.test.test01;”

http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Changing_Queue_Configuration

遇到问题:

  1. [ocdc@ocdp-42-59 root]$ yarn schedulerconf -remove “root.test.test01;”
    Configuration change unsuccessful: {“RemoteException”:{“exception”:”AuthorizationException”,”message”:”Unable to obtain user name, user not authenticated”,”javaClassName”:”org.apache.hadoop.security.authorize.AuthorizationException”}}

    目前没有解决。

    2. 使用zk或者leveldb后ambari提供的界面就无法使用,添加队列等操作会报错。
    OCDP5.0-Yarn新特性测试 - 图21
    因为使用这个特性后,由于无法再使用yarn rmadmin -refreshQueues进行队列更新,所以对队列的操作都要在后台通过命令进行。目前版本ambari对这个特性的支持不是很完善,建议后面版本再使用。

    10. 当doAs = false时,YARN队列ACL支持

    功能描述:

    当hive doAs属性配置为false时,yarn就会使用自身的ACL进行用户的队列权限认证。

    功能测试:

    OCDP5.0-Yarn新特性测试 - 图22

    遇到问题: