华为云用户手册

  • 注意事项 Join数据倾斜问题。执行任务的时候,任务进度长时间维持在99%,这种现象叫数据倾斜。 数据倾斜是经常存在的,因为有少量的Reduce任务分配到的数据量和其他Reduce差异过大,导致大部分Reduce都已完成任务,但少量Reduce任务还没完成的情况。 解决数据倾斜的问题,可通过设置“set hive.optimize.skewjoin=true”并调整“hive.skewjoin.key”的大小。“hive.skewjoin.key”是指Reduce端接收到多少个key即认为数据是倾斜的,并自动分发到多个Reduce。
  • Map Join Hive的Map Join适用于能够在内存中存放下的小表(指表大小小于25MB),通过“hive.mapjoin.smalltable.filesize”定义小表的大小,默认为25MB。 Map Join的方法有两种: 使用/*+ MAPJOIN(join_table) */。 执行语句前设置如下参数,当前版本中该值默认为“true”。 set hive.auto.convert.join=true; 使用Map Join时没有Reduce任务,而是在Map任务前起了一个MapReduce Local Task,这个Task通过TableScan读取小表内容到本机,在本机以HashTable的形式保存并写入硬盘上传到DFS,并在Distributed Cache中保存,在Map Task中从本地磁盘或者Distributed Cache中读取小表内容直接与大表join得到结果并输出。 使用Map Join时需要注意小表不能过大,如果小表将内存基本用尽,会使整个系统性能下降甚至出现内存溢出的异常。
  • Sort Merge Bucket Map Join 使用Sort Merge Bucket Map Join必须满足以下2个条件: join的两张表都很大,内存中无法存放。 两张表都按照join key进行分桶(clustered by (column))和排序(sorted by(column)),且两张表的分桶数正好是倍数关系。 通过如下设置,启用Sort Merge Bucket Map Join: set hive.optimize.bucketmapjoin=true; set hive.optimize.bucketmapjoin.sortedmerge=true; 这种Map Join也没有Reduce任务,是在Map任务前启动MapReduce Local Task,将小表内容按桶读取到本地,在本机保存多个桶的HashTable备份并写入HDFS,并保存在Distributed Cache中,在Map Task中从本地磁盘或者Distributed Cache中按桶一个一个读取小表内容,然后与大表做匹配直接得到结果并输出。
  • 操作步骤 以root用户登录已安装Hive客户端的节点。 执行以下命令,进入客户端安装目录,例如“/opt/client”。 cd /opt/client 执行source bigdata_env命令,配置客户端环境变量。 在客户端中执行如下命令,执行登录操作。 kinit 用户名 执行以下命令登录Hive客户端。 beeline 指定静态分区或者动态分区。 静态分区: 静态分区是手动输入分区名称,在创建表时使用关键字PARTITIONED BY指定分区列名及数据类型。应用开发时,使用ALTER TABLE ADD PARTITION语句增加分区,以及使用LOAD DATA INTO PARTITON语句将数据加载到分区时,只能加载到静态分区。 动态分区:通过查询命令,将结果插入到某个表的分区时,可以使用动态分区。 动态分区通过在客户端工具执行如下命令开启: set hive.exec.dynamic.partition=true; 动态分区默认模式是“strict”,也就是必须至少指定一列为静态分区,在静态分区下建立动态子分区,可以通过如下设置开启完全的动态分区: set hive.exec.dynamic.partition.mode=nonstrict; 动态分区可能导致一个DML语句创建大量的分区,对应创建大量新文件夹,对系统性能可能带来影响。 在文件数量大的情况下,执行一个SQL语句启动时间较长,可以在执行SQL语句之前执行“set mapreduce.input.fileinputformat.list-status.num-threads = 100;”命令缩短启动时间。“mapreduce.input.fileinputformat.list-status.num-threads”参数需要先添加到Hive的白名单才可设置。
  • 日志级别 Hive提供了如表2所示的日志级别。 运行日志的级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 ERROR ERROR表示系统运行的错误信息。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 参考修改集群服务配置参数,进入Hive服务“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别并保存。 配置Hive日志级别后可立即生效,无需重启服务。
  • 操作示例 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录,配置环境变量并认证用户。 cd 客户端安装目录 source bigdata_env kinit Hive业务用户(如果集群未开启Kerberos认证,请跳过该操作) beeline启动断线重连功能。 示例: beeline -e "${SQL}" --hivevar batchid=xxx beeline kill正在运行的任务。 示例: beeline -e "" --hivevar batchid=xxx --hivevar kill=true 登录beeline客户端,启动断线重连机制。 beeline set hivevar:batchid=xxx 其中“xxxx”表示每一次通过beeline提交任务的批次号,通过该批次号,可以识别出先提交的任务。如果提交任务时不带批次号,该特性功能不会启用。“xxxx”的值是执行任务时指定的,如下所示,“xxxx”值为“012345678901”: beeline -f hdfs://hacluster/user/hive/table.sql --hivevar batchid=012345678901 如果运行的SQL脚本依赖数据的失效性,建议不启用断点重连机制,或者每次运行时使用新的batchid。因为重复执行时,可能由于某些SQL语句已经执行过了不再重新执行,导致获取到过期的数据。 如果SQL脚本中使用了一些内置时间函数,建议不启用断点重连机制,或者每次运行时使用新的batchid,理由同上。 一个SQL脚本里面会包含一个或多个子任务。如果SQL脚本中存在先创建再删除临时表的逻辑,建议将删除临时表的逻辑放到脚本的最后。假定删除临时表子任务的后续子任务执行失败,并且删除临时表的子任务之前的子任务用到了该临时表;当下一次以相同batchid执行该SQL脚本时,因为临时表在上一次执行时已被删除,则会导致删除临时表的子任务之前用到该临时表的子任务(不包括创建该临时表的子任务,因为上一次已经执行成功,本次不会再执行,仅可编译)编译失败。这种情况下,建议使用新的batchid执行脚本。 参数说明: zk.cleanup.finished.job.interval:执行清理任务的间隔时间,默认隔60s执行一次。 zk.cleanup.finished.job.outdated.threshold:节点的过期时间,每个批次的任务都会生成对应节点,从当前批次任务的结束时间开始算,如果超过60分钟,则表示已经过期了,那么就清除节点。 batch.job.max.retry.count:单批次任务的最大重试次数,当单批次的任务失败重试次数超过这个值,就会删除该任务记录,下次运行时将从头开始运行,默认是10次。 beeline.reconnect.zk.path:存储任务执行进度的根节点,Hive服务默认是“/beeline”。
  • 操作场景 在批处理任务运行过程中,beeline客户端由于网络异常等问题断线时,Hive能支持beeline在断线前已经提交的任务继续运行。当再次运行该批处理任务时,已经提交过的任务不再重新执行,直接从下一个任务开始执行。 在批处理任务运行过程中,HiveServer服务由于某些原因导致故障时,Hive能支持当再次运行该批处理任务时,已经成功执行完成的任务不再重新执行,直接从HiveServer2故障时正在运行的任务开始运行。
  • 功能介绍 AddDoublesUDF主要用来对两个及多个浮点数进行相加,在该样例中可以掌握如何编写和使用UDF。 一个普通UDF必须继承自“org.apache.hadoop.hive.ql.exec.UDF”。 一个普通UDF必须至少实现一个evaluate()方法,evaluate函数支持重载。 开发自定义函数需要在工程中添加“hive-exec-*.jar”依赖包,可从Hive服务的安装目录下获取,例如在“${BIGDATA_HOME}/components/ FusionInsight _HD_*/Hive/disaster/plugin/lib/”目录下获取。
  • Grouping 语法简介: 当group by语句带with rollup/cube选项时,Grouping才有意义。 CUBE生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合。 Grouping:当用CUBE或ROLLUP运算符添加行时,附加的列输出值为1;当所添加的行不是由CUBE或ROLLUP产生时,附加列值为0。 例如,Hive中有一张表“table_test”,表结构如下所示: +----------------+-------------------+--+ | table_test.id | table_test.value | +----------------+-------------------+--+ | 1 | 10 | | 1 | 15 | | 2 | 20 | | 2 | 5 | | 2 | 13 | +----------------+-------------------+--+ 执行如下语句: select id,grouping(id),sum(value) from table_test group by id with rollup; 得到如下结果: +-------+-----------------+------+--+ | id | groupingresult | sum | +-------+-----------------+------+--+ | 1 | 0 | 25 | | NULL | 1 | 63 | | 2 | 0 | 38 | +-------+-----------------+------+--+
  • EXCEPT、INTERSECT EXCEPT返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。 INTERSECT返回两个结果集的交集(即两个查询都返回的所有非重复值)。 例如,Hive中有两张表“test_table1”、“test_table2”。 “test_table1”表结构如下所示: +-----------------+--+ | test_table1.id | +-----------------+--+ | 1 | | 2 | | 3 | | 4 | +-----------------+--+ “test_table2”表结构如下所示: +-----------------+--+ | test_table2.id | +-----------------+--+ | 2 | | 3 | | 4 | | 5 | +-----------------+--+ 执行如下的EXCEPT语句: select id from test_table1 except select id from test_table2; 显示如下结果: +--------------+--+ | _alias_0.id | +--------------+--+ | 1 | +--------------+--+ 执行INTERSECT语句: select id from test_table1 intersect select id from test_table2; 显示如下结果: +--------------+--+ | _alias_0.id | +--------------+--+ | 2 | | 3 | | 4 | +--------------+--+
  • 操作步骤 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd 客户端安装目录 例如安装目录为“/opt/client”,则执行以下命令: cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 集群认证模式是否为安全模式。 是,执行以下命令进行用户认证: kinit Hive业务用户 否,执行5。 执行以下命令,将需要关联的关系型数据库驱动Jar包上传到HDFS目录下。 hdfs dfs -put Jar包所在目录 保存Jar包的HDFS目录 例如将“/opt”目录下ORACLE驱动Jar包上传到HDFS的“/tmp”目录下,则执行如下命令。 hdfs dfs -put /opt/ojdbc6.jar /tmp 按照如下示例,在Hive客户端创建关联关系型数据库的外表。 -- 关联oracle linux6版本示例 -- 如果是安全模式,需设置admin权限 set role admin; -- 添加连接关系型数据库的驱动Jar包,不同数据库有不同的驱动Jar ADD JAR hdfs:///tmp/ojdbc6.jar; CREATE EXTERNAL TABLE ora_test -- hive表的列需比数据库返回结果多一列用于分页查询 (id STRING,rownum string) STORED BY 'com.qubitproducts.hive.storage.jdbc.JdbcStorageHandler' TBLPROPERTIES ( -- 关系型数据库类型 "qubit.sql.database.type" = "ORACLE", -- 通过JDBC连接关系型数据库的url(不同数据库有不同的url格式) "qubit.sql.jdbc.url" = "jdbc:oracle:thin:@//10.163.0.1:1521/mydb", -- 关系型数据库驱动类名 "qubit.sql.jdbc.driver" = "oracle.jdbc.OracleDriver", -- 在关系型数据库查询的sql语句,结果将返回hive表 "qubit.sql.query" = "select name from aaa", -- hive表的列与关系型数据库表的列进行匹配(可忽略) "qubit.sql.column.mapping" = "id=name", -- 关系型数据库用户 "qubit.sql.dbcp.username" = "test", -- 关系型数据库密码,命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 "qubit.sql.dbcp.password" = "xxx"); 如果是安全模式,建表的用户需要“ADMIN”权限。 ADD JAR的路径请以实际路径为准。
  • 操作示例 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录,配置环境变量并认证用户。 cd 客户端安装目录 source bigdata_env kinit Hive业务用户 执行以下命令登录Hive客户端。 beeline 配置Hive视图的访问控制权限示例: 不采用“current_user”函数,要实现不同的用户,访问不同数据,需要创建不同的视图: 将视图v1授权给用户hiveuser1,hiveuser1用户可以访问表table1中“type='hiveuser1'”的数据: create view v1 as select * from table1 where type='hiveuser1'; 将视图v2授权给用户hiveuser2,hiveuser2用户可以访问表table1中“type='hiveuser2'”的数据: create view v2 as select * from table1 where type='hiveuser2'; 采用“current_user”函数,则只需要创建一个视图: 将视图v分别赋给用户hiveuser1、hiveuser2,当hiveuser1查询视图v时,“current_user()”被自动转化为hiveuser1,当hiveuser2查询视图v时,“current_user()”被自动转化为hiveuser2: create view v as select * from table1 where type=current_user();
  • 操作场景 由于底层存储系统的原因,Hive并不能支持对单条表数据进行删除操作,但在Hive on HBase功能中, MRS Hive提供了对HBase表的单条数据的删除功能,通过特定的语法,Hive可以将自己的HBase表中符合条件的一条或者多条数据清除。 表1 删除Hive on HBase表中的单行记录所需权限 集群认证模式 用户所需权限 安全模式 “SELECT”、“INSERT”和“DELETE” 普通模式 无
  • 操作场景 Hive支持对表的某一列或者多列进行加密;在创建Hive表时,可以指定要加密的列和加密算法。当使用insert语句向表中插入数据时,即可实现将对应列的 数据加密 。只支持对存储在HDFS上的TextFile和SequenceFile文件格式的Hive表进行列加密,不支持视图以及Hive over HBase场景。 Hive列加密机制目前支持的加密算法有两种,在建表时指定: AES:对应加密类名称为“org.apache.hadoop.hive.serde2.AESRewriter”。 SMS 4:对应加密类名称为“org.apache.hadoop.hive.serde2.SMS4Rewriter”。 将原始数据从普通Hive表导入到Hive列加密表后,在不影响其他业务情况下,建议删除普通Hive表上原始数据,因为保留一张未加密的表存在安全风险。
  • 操作场景 HDFS Colocation(同分布)是HDFS提供的数据分布控制功能,利用HDFS Colocation接口,可以将存在关联关系或者可能进行关联操作的数据存放在相同的存储节点上。Hive支持HDFS的Colocation功能,即在创建Hive表时,设置表文件分布的locator信息,当使用insert语句向该表中插入数据时会将该表的数据文件存放在相同的存储节点上(不支持其他数据导入方式),从而使后续的多表关联的数据计算更加方便和高效。支持HDFS的Colocation功能的Hive表格式只有TextFile和RCFile。
  • 操作场景 Hive业务还可能需要关联使用其他组件,例如HQL语句触发MapReduce任务需要设置Yarn权限,或者Hive over HBase的场景需要HBase权限。以下介绍Hive关联Yarn和Hive over HBase两个场景下的权限操作。 安全模式下Yarn和HBase的权限管理默认是开启的,因此在安全模式下默认需要配置Yarn和HBase权限。 在普通模式下,Yarn和HBase的权限管理默认是关闭的,即任何用户都有权限,因此普通模式下默认不需要配置Yarn和HBase权限。如果用户修改了Yarn或者HBase的配置来开启权限管理,则修改后也需要配置Yarn和HBase权限。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略。
  • 操作场景 使用Hive表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,Hive也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。以下介绍使用Manager角色管理功能在表授权、列授权和数据库授权三个场景下的操作。 安全模式支持配置Hive表、列或数据库的权限,普通模式不支持配置Hive表、列或数据库的权限。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略。
  • 相关概念 表1 使用Hive表、列或数据库场景权限一览 操作场景 用户需要的权限 DESCRIBE TABLE 查询(Select) SHOW PARTITIONS 查询(Select) ANALYZE TABLE 查询(Select)、插入(Insert) SHOW COLUMNS 查询(Select) SHOW TABLE STATUS 查询(Select) SHOW TABLE PROPERTIES 查询(Select) SELECT 查询(Select) EXPLAIN 查询(Select) CREATE VIEW 查询(Select)、Select授权(Grant Of Select)、建表(Create) SHOW CREATE TABLE 查询(Select)、Select授权(Grant Of Select) CREATE TABLE 建表(Create) ALTER TABLE ADD PARTITION 插入(Insert) INSERT 插入(Insert) INSERT OVERWRITE 插入(Insert)、删除(Delete) LOAD 插入(Insert)、删除(Delete) ALTER TABLE DROP PARTITION 删除(Delete) CREATE FUNCTION Hive管理员权限(Hive Admin Privilege) DROP FUNCTION Hive管理员权限(Hive Admin Privilege) ALTER DATABASE Hive管理员权限(Hive Admin Privilege)
  • 前提条件 获取一个拥有管理员权限的用户,例如“admin”。 请参考创建Hive角色,在Manager界面创建一个角色,例如“hrole”,不需要设置Hive权限、设置提交HQL命令到Yarn执行的权限。 在Manager界面创建两个使用Hive的“人机”用户并加入“hive”组,例如“huser1”和“huser2”。“huser2”需绑定“hrole”。使用“huser1”创建一个数据库“hdb”,并在此数据库中创建表“htable”。
  • 操作场景 该任务指导MRS集群管理员在Manager创建并设置Hive的角色。Hive角色可设置Hive管理员权限以及Hive表的数据操作权限。 用户使用Hive并创建数据库需要加入hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。 安全模式支持创建Hive角色,普通模式不支持创建Hive角色。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略。
  • 操作步骤 如果您需要对参数配置进行调整,具体操作请参考修改集群服务配置参数。 可用内存 除了分配给操作系统、其他服务的内存外,剩余的资源应尽量分配给YARN。通过如下配置参数进行调整。 例如,如果一个container默认使用512M,则内存使用的计算公式为:512M*container数。 默认情况下,Map或Reduce container会使用1个虚拟CPU内核和1024MB内存,ApplicationMaster使用1536MB内存。 参数 描述 默认值 yarn.nodemanager.resource.memory-mb 设置可分配给容器的物理内存数量。单位:MB,取值范围大于0。 建议配置成节点物理内存总量的75%~90%。如果该节点有其他业务的常驻进程,请降低此参数值给该进程预留足够运行资源。 16384 CPU虚拟核数 建议将此配置设定在逻辑核数的1.5~2倍之间。如果上层计算应用对CPU的计算能力要求不高,可以配置为2倍的逻辑CPU。 参数 描述 默认值 yarn.nodemanager.resource.cpu-vcores 表示该节点上YARN可使用的虚拟CPU个数,默认是8。 目前推荐将该值设置为逻辑CPU核数的1.5~2倍之间。 8 物理CPU使用百分比 建议预留适量的CPU给操作系统和其他进程(数据库、HBase等)外,剩余的CPU核都分配给YARN。可以通过如下配置参数进行调整。 参数 描述 默认值 yarn.nodemanager.resource.percentage-physical-cpu-limit 表示该节点上YARN可使用的物理CPU百分比。默认是90,即不进行CPU控制,YARN可以使用节点全部CPU。该参数只支持查看,可通过调整YARN的RES_CPUSET_PERCENTAGE参数来修改本参数值。注意,目前推荐将该值设为可供YARN集群使用的CPU百分数。 例如:当前节点除了YARN服务外的其他服务(如HBase、HDFS、Hive等)及系统进程使用CPU为20%左右,则可以供YARN调度的CPU为1-20%=80%,即配置此参数为80。 90 本地磁盘 由于本地磁盘会提供给MapReduce写job执行的中间结果,数据量大。因此配置的原则是磁盘尽量多,且磁盘空间尽量大,单个达到百GB以上规模更合适。简单的做法是配置和data node相同的磁盘,只在最下一级目录上不同即可。 多个磁盘之间使用逗号隔开。 参数 描述 默认值 yarn.nodemanager.log-dirs 日志存放地址(可配置多个目录)。 容器日志的存储位置。默认值为%{@auto.detect.datapart.nm.logs}。如果有数据分区,基于该数据分区生成一个类似/srv/BigData/hadoop/data1/nm/containerlogs,/srv/BigData/hadoop/data2/nm/containerlogs的路径清单。如果没有数据分区,生成默认路径/srv/BigData/yarn/data1/nm/containerlogs。除了使用表达式以外,还可以输入完整的路径清单,比如/srv/BigData/yarn/data1/nm/containerlogs或/srv/BigData/yarn/data1/nm/containerlogs,/srv/BigData/yarn/data2/nm/containerlogs。这样数据就会存储在所有设置的目录中,一般会是在不同的设备中。为保证磁盘IO负载均衡,需要提供几个路径且每个路径都对应一个单独的磁盘。应用程序的本地化后的日志目录存在于相对路径/application_%{appid}中。单独容器的日志目录,即container_{$contid},是该路径下的子目录。每个容器目录都含容器生成的stderr、stdin及syslog文件。要新增目录,比如新增/srv/BigData/yarn/data2/nm/containerlogs目录,应首先删除/srv/BigData/yarn/data2/nm/containerlogs下的文件。之后,为/srv/BigData/yarn/data2/nm/containerlogs赋予跟/srv/BigData/yarn/data1/nm/containerlogs一样的读写权限,再将/srv/BigData/yarn/data1/nm/containerlogs修改为/srv/BigData/yarn/data1/nm/containerlogs,/srv/BigData/yarn/data2/nm/containerlogs。可以新增目录,但不要修改或删除现有目录。否则,NodeManager的数据将丢失,且服务将不可用。 【默认值】%{@auto.detect.datapart.nm.logs} 【注意】请谨慎修改该项。如果配置不当,将造成服务不可用。当角色级别的该配置项修改后,所有实例级别的该配置项都将被修改。如果实例级别的配置项修改后,其他实例的该配置项的值保持不变。 %{@auto.detect.datapart.nm.logs} yarn.nodemanager.local-dirs 本地化后的文件的存储位置。默认值为%{@auto.detect.datapart.nm.localdir}。如果有数据分区,基于该数据分区生成一个类似/srv/BigData/hadoop/data1/nm/localdir,/srv/BigData/hadoop/data2/nm/localdir的路径清单。如果没有数据分区,生成默认路径/srv/BigData/yarn/data1/nm/localdir。除了使用表达式以外,还可以输入完整的路径清单,比如/srv/BigData/yarn/data1/nm/localdir或/srv/BigData/yarn/data1/nm/localdir,/srv/BigData/yarn/data2/nm/localdir。这样数据就会存储在所有设置的目录中,一般会是在不同的设备中。为保证磁盘IO负载均衡,需要提供几个路径且每个路径都对应一个单独的磁盘。应用程序的本地化后的文件目录存在于相对路径/usercache/%{user}/appcache/application_%{appid}中。单独容器的工作目录,即container_%{contid},是该路径下的子目录。要新增目录,比如新增/srv/BigData/yarn/data2/nm/localdir目录,应首先删除/srv/BigData/yarn/data2/nm/localdir下的文件。之后,为/srv/BigData/hadoop/data2/nm/localdir赋予跟/srv/BigData/hadoop/data1/nm/localdir一样的读写权限,再将/srv/BigData/yarn/data1/nm/localdir修改为/srv/BigData/yarn/data1/nm/localdir,/srv/BigData/yarn/data2/nm/localdir。可以新增目录,但不要修改或删除现有目录。否则,NodeManager的数据将丢失,且服务将不可用。 【默认值】%{@auto.detect.datapart.nm.localdir} 【注意】请谨慎修改该项。如果配置不当,将造成服务不可用。当角色级别的该配置项修改后,所有实例级别的该配置项都将被修改。如果实例级别的配置项修改后,其他实例的该配置项的值保持不变。 %{@auto.detect.datapart.nm.localdir}
  • 操作场景 集群的资源竞争场景如下: 提交两个低优先级的应用Job 1和Job 2。 正在运行中的Job 1和Job 2有部分task处于running状态,但由于集群或队列资源容量有限,仍有部分task未得到资源而处于pending状态。 提交一个较高优先级的应用Job 3,此时会出现如下资源分配情况:当Job 1和Job 2中running状态的task运行结束并释放资源后,Job 3中处于pending状态的task将优先得到这部分新释放的资源。 Job 3完成后,资源释放给Job 1、Job 2继续执行。 用户可以在YARN中配置任务的优先级。任务优先级是通过ResourceManager的调度器实现的。
  • 日志级别 Yarn中提供了如表2所示的日志级别。其中日志级别优先级从高到低分别是OFF、FATAL、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 FATAL FATAL表示当前事件处理存在严重错误信息。 ERROR ERROR表示当前事件处理存在错误信息。 WARN WARN表示当前事件处理存在异常告警信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 参考修改集群服务配置参数,进入Yarn服务“全部配置”页面。 在左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 单击“保存配置”,在弹出窗口中单击“确定”使配置生效。 配置完成后立即生效,不需要重启服务。
  • 配置场景 在YARN中,ApplicationMaster(AM)与Container类似,都运行在NodeManager(NM)上(本文中忽略未管理的AM)。AM可能由于多种原因崩溃、退出或关闭。如果AM停止运行,ResourceManager(RM)会关闭ApplicationAttempt中管理的所有Container,其中包括当前在NM上运行的所有Container。RM会在另一计算节点上启动新的ApplicationAttempt。 对于不同类型的应用,希望以不同方式处理AM重启的事件。MapReduce类应用的目标是不丢失任务,但允许丢失当前运行的Container。但是对于长周期的YARN服务而言,用户可能并不希望由于AM的故障而导致整个服务停止运行。 YARN支持在新的ApplicationAttempt启动时,保留之前Container的状态,因此运行中的作业可以继续无故障的运行。 图1 AM作业保留
  • 配置描述 参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。 根据表1,对如下参数进行设置。 表1 AM作业保留相关参数 参数 说明 默认值 yarn.app.mapreduce.am.work-preserve 是否开启AM作业保留特性。 false yarn.app.mapreduce.am.umbilical.max.retries AM作业保留特性中,运行的容器尝试恢复的最大次数。 5 yarn.app.mapreduce.am.umbilical.retry.interval AM作业保留特性中,运行的容器尝试恢复的时间间隔。单位:毫秒。 10000 yarn.resourcemanager.am.max-attempts ApplicationMaster的重试次数。增加重试次数可以避免当资源不足时造成AM启动失败。 适用于所有ApplicationMaster的全局设置。每个ApplicationMaster都可以使用API设置一个单独的最大尝试次数,但这个次数不能大于全局的最大次数。如果大于了,那ResourceManager将会覆写这个单独的最大尝试次数。取值范围大于等于1。 2
  • 配置描述 参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。 ResourceManager Restart特性配置如下。 表1 ResourceManager Restart参数配置 参数 描述 默认值 yarn.resourcemanager.recovery.enabled 设置是否让ResourceManager在启动后恢复状态。如果设置为true,那yarn.resourcemanager.store.class也必须设置。 true yarn.resourcemanager.store.class 指定用于保存应用程序和任务状态以及证书内容的state-store类。 org.apache.hadoop.yarn.server.resourcemanager.recovery.AsyncZK RMS tateStore yarn.resourcemanager.zk-state-store.parent-path ZKRMStateStore在ZooKeeper上的保存目录。 /rmstore yarn.resourcemanager.work-preserving-recovery.enabled 启用ResourceManager Work preserving功能。该配置仅用于YARN特性验证。 true yarn.resourcemanager.state-store.async.load 对已完成的application采用ResourceManager异步恢复方式。 true yarn.resourcemanager.zk-state-store.num-fetch-threads 启用异步恢复功能,增加工作线程的数量可以加快恢复ZK中保存的任务信息的速度,取值范围大于0。 20 NodeManager Restart特性配置如下。 表2 NodeManager Restart参数配置 参数 描述 默认值 yarn.nodemanager.recovery.enabled 当Nodemanager重启时是否启用日志失败收集功能,是否恢复未完成的Application。 true yarn.nodemanager.recovery.dir NodeManager用于保存container状态的本地目录。 ${SRV_HOME}/tmp/yarn-nm-recovery yarn.nodemanager.recovery.supervised NodeManager是否在监控下运行。开启此特性后NodeManager在退出后不会清理containers,NodeManager会假设自己会立即重启和恢复containers。 true
  • 配置场景 YARN Restart特性包含两部分内容:ResourceManager Restart和NodeManager Restart。 当启用ResourceManager Restart时,升主后的ResourceManager就可以通过加载之前的主ResourceManager的状态信息,并通过接收所有NodeManager上container的状态信息,重构运行状态继续执行。这样应用程序通过定期执行检查点操作保存当前状态信息,就可以避免工作内容的丢失。 当启用NodeManager Restart时,NodeManager在本地保存当前节点上运行的container信息,重启NodeManager服务后通过恢复此前保存的状态信息,就不会丢失在此节点上运行的container进度。
  • 配置描述 参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。 表1 配置自定义调度器的WebUI 参数 描述 默认值 hadoop.http.rmwebapp.scheduler.page.classes 在RM WebUI中为自定义调度器加载相应的web页面。仅当“yarn.resourcemanager.scheduler.class”配置为自定义调度器时此配置项生效。 - yarn.http.rmwebapp.external.classes 在RM的Web服务中加载用户自定义的web应用。 -
  • 配置描述 参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 yarn.nodemanager.vmem-check-enabled 是否进行虚拟内存检测的开关。如果任务使用的内存量超出分配值,则直接将任务强制终止。 设置为true时,进行虚拟内存检测; 设置为false时,不进行虚拟内存检测。 true yarn.nodemanager.pmem-check-enabled 是否进行物理内存检测的开关。如果任务使用的内存量超出分配值,则直接将任务强制终止。 设置为true时,进行物理内存检测; 设置为false时,不进行物理内存检测。 true
  • 配置描述 参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入表1中参数名称。 表1 参数说明 参数 描述 默认值 yarn.resourcemanager.am.max-attempts ApplicationMaster重试次数,增加重试次数,可以防止资源不足导致的AM启动失败问题。适用于所有ApplicationMaster的全局设置。每个ApplicationMaster都可以使用API设置一个单独的最大尝试次数,但这个次数不能大于全局的最大次数。如果大于了,那ResourceManager将会覆写这个单独的最大尝试次数。以允许至少一次重试。取值范围大于等于1。 5
共100000条