华为云用户手册

  • FlinkSQL窗口函数支持迟到数据 FlinkSQL新增窗口函数支持迟到数据特性,解决迟到数据需要处理的场景。目前支持TUMBLE、HOP、OVER、CUMULATE窗口函数的迟到数据,示例如下: CREATE TABLE T1 ( `int` INT, `double` DOUBLE, `float` FLOAT, `bigdec` DECIMAL(10, 2), `string` STRING, `name` STRING, `rowtime` TIMESTAMP(3), WATERMARK for `rowtime` AS `rowtime` - INTERVAL '1' SECOND ) WITH ( 'connector' = 'values', ); -- 该Sink的字段必须和窗口的输入数据保持一致,但顺序不要求一致 CREATE TABLE LD_SINK( `float` FLOAT, `string` STRING, `name` STRING, `rowtime` TIMESTAMP(3) ) WITH ( 'connector' = 'print', ); SELECT /*+ LATE_DATA_SINK('sink.name'='LD_SINK') */ `name`, MIN(`float`), COUNT(DISTINCT `string`) FROM TABLE( TUMBLE(TABLE T1, DESCRIPTOR(rowtime), INTERVAL '5' SECOND)) GROUP BY `name`, window_start, window_end 该特性还支持窗口接收到迟到数据时输出当前窗口的开始时间和结束时间,可通过添加在Hint中'window.start.field'和'window.end.field'使用,字段类型必须是timestamp,示例如下: CREATE TABLE LD_SINK( `float` FLOAT, `string` STRING, `name` STRING, `rowtime` TIMESTAMP(3), `windowStart` TIMESTAMP(3), `windowEnd` TIMESTAMP(3) ) WITH ( 'connector' = 'print', ); SELECT /*+ LATE_DATA_SINK('sink.name'='LD_SINK', 'window.start.field'='windowStart', 'window.end.field'='windowEnd') */ `name`, MIN(`float`), COUNT(DISTINCT `string`) FROM TABLE( TUMBLE(TABLE T1, DESCRIPTOR(rowtime), INTERVAL '5' SECOND)) GROUP BY `name`, window_start, window_end
  • FlinkSQL DISTRIBUTEBY FlinkSQL新增DISTRIBUTEBY特性,根据指定的字段进行分区,支持单字段及多字段,解决数据仅需要分区的场景。示例如下: SELECT /*+ DISTRIBUTEBY('id') */ id, name FROM t1; SELECT /*+ DISTRIBUTEBY('id', 'name') */ id, name FROM t1; SELECT /*+ DISTRIBUTEBY('id1') */ id as id1, name FROM t1;
  • 前提条件 集群已安装CDL、Hudi服务且运行正常。 ThirdKafka数据库的Topic需要能被MRS集群消费,操作步骤请参考ThirdPartyKafka前置准备。 在FusionInsight Manager中创建一个人机用户,例如“cdluser”,加入用户组cdladmin、hadoop、kafka、supergroup,主组选择“cdladmin”组,关联角色“System_administrator”。
  • 前提条件 已创建包含Doris服务的集群,集群内各服务运行正常。 待连接Doris数据库的节点与MRS集群网络互通。 创建具有Doris管理权限的用户。 集群已启用Kerberos认证(安全模式) 在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。 使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。 集群未启用Kerberos认证(普通模式) 使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
  • 日志级别 Yarn中提供了如表2所示的日志级别。其中日志级别优先级从高到低分别是OFF、FATAL、ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 FATAL FATAL表示当前事件处理存在严重错误信息。 ERROR ERROR表示当前事件处理存在错误信息。 WARN WARN表示当前事件处理存在异常告警信息。 INFO INFO表示记录系统及各事件正常运行状态信息 DEBUG DEBUG表示记录系统及系统的调试信息 如果您需要修改日志级别,请执行如下操作: 参考修改集群服务配置参数,进入Yarn服务“全部配置”页面。 在左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 单击“保存配置”,在弹出窗口中单击“确定”使配置生效。 配置完成后立即生效,不需要重启服务。
  • 内存参数设置 NameNode JVM参数配置规则 NameNode JVM参数“GC_OPTS”默认值为: -Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -Djdk.tls.ephemeralDHKeySize=3072 -Djdk.tls.rejectClientInitiatedRenegotiation=true -Djava.io.tmpdir=${Bigdata_tmp_dir} NameNode文件数量和NameNode使用的内存大小成比例关系,文件对象变化时请修改默认值中的“-Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M”。参考值如下表所示。 表4 NameNode JVM配置 文件对象数量 参考值 10,000,000 “-Xms6G -Xmx6G -XX:NewSize=512M -XX:MaxNewSize=512M” 20,000,000 “-Xms12G -Xmx12G -XX:NewSize=1G -XX:MaxNewSize=1G” 50,000,000 “-Xms32G -Xmx32G -XX:NewSize=3G -XX:MaxNewSize=3G” 100,000,000 “-Xms64G -Xmx64G -XX:NewSize=6G -XX:MaxNewSize=6G” 200,000,000 “-Xms96G -Xmx96G -XX:NewSize=9G -XX:MaxNewSize=9G” 300,000,000 “-Xms164G -Xmx164G -XX:NewSize=12G -XX:MaxNewSize=12G” DataNode JVM参数配置规则 DataNode JVM参数“GC_OPTS”默认值为: -Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -Djdk.tls.ephemeralDHKeySize=3072 -Djdk.tls.rejectClientInitiatedRenegotiation=true -Djava.io.tmpdir=${Bigdata_tmp_dir} 集群中每个DataNode实例平均保存的Blocks= HDFS Block * 3/DataNode节点数,单个DataNode实例平均Block数量变化时请修改默认值中的“-Xms2G -Xmx4G -XX:NewSize=128M -XX:MaxNewSize=256M”。参考值如下表所示。 表5 DataNode JVM配置 单个DataNode实例平均Block数量 参考值 2,000,000 “-Xms6G -Xmx6G -XX:NewSize=512M -XX:MaxNewSize=512M” 5,000,000 “-Xms12G -Xmx12G -XX:NewSize=1G -XX:MaxNewSize=1G” Xmx内存值对应DataNode节点块数阈值,每GB对应500000块数,用户可根据需要调整内存值。
  • 容量规格 NameNode容量规格 在NameNode中,每个文件对象对应DataNode中的一个文件、目录或Block。 一个文件至少占用一个Block,默认每个Block大小为“134217728”即128MB,对应参数为“dfs.blocksize”。默认情况下一个文件小于128MB时,只占用一个Block;文件大于128MB时,占用Block数为:文件大小/128MB。目录不占用Block。 根据“dfs.blocksize”,NameNode的文件对象数计算方法如下: 表1 NameNode文件对象数计算 单个文件大小 文件对象数 小于128MB 1(对应文件)+1(对应Block)=2 大于128MB(例如128G) 1(对应文件)+1,024(对应128GB/128MB=1024 Block)=1,025 主备NameNode支持最大文件对象的数量为300,000,000(最多对应150,000,000个小文件)。“dfs.namenode.max.objects”规定当前系统可生成的文件对象数,默认值为“0”表示不限制。 DataNode容量规格 在HDFS中,Block以副本的形式存储在DataNode中,默认副本数为“3”,对应参数为“dfs.replication”。 集群中所有DataNode角色实例保存的Block总数为:HDFS Block * 3。集群中每个DataNode实例平均保存的Blocks= HDFS Block * 3/DataNode节点数。 表2 DataNode支持规格 项目 规格 单个DataNode实例支持最大Block数 5,000,000 单个DataNode实例上单个磁盘支持最大Block数 500,000 单个DataNode实例支持最大Block数需要的最小磁盘数 10 表3 DataNode节点数规划 HDFS Block数 最少DataNode角色实例数 10,000,000 10,000,000 *3/5,000,000 = 6 50,000,000 50,000,000 *3/5,000,000 = 30 100,000,000 100,000,000 *3/5,000,000 = 60
  • 配置HetuEngine使用代理用户鉴权 适用于MRS 3.3.0及以后版本。 HetuEngine支持使用FusionInsight Manager用户认证时通过客户自有用户(代理用户)使用Ranger鉴权的能力。即在使用HetuEngine客户端时,通过--session-user来指定代理用户。 创建认证用户或代理用户请参考创建HetuEngine权限角色。 启用Ranger鉴权并为代理用户配置操作数据源的数据库、表、列的管理权限,具体操作请参考添加HetuEngine的Ranger访问权限策略。 集群已启用Kerberos认证(安全模式) 使用kinit指定认证用户(需为HetuEngine管理员用户,并额外添加supergroup用户组才能代理其他用户鉴权),如hetuadmin1。 kinit hetuadmin1 根据提示输入用户密码,首次登录需重置密码。 再使用--session-user指定代理用户,如user1。 hetu-cli --session-user user1 集群未启用Kerberos认证(普通模式) 使用--user指定认证用户(需拥有hetuuser用户组才能代理其他用户鉴权),如user;使用--session-user指定代理用户,如user1。 hetu-cli --user user --session-user user1 该功能不适用于HiveMetastore数据源鉴权与多用户映射共存的场景。 父主题: HetuEngine用户权限管理
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的HDFS/OBS目录和数据。 获取SFTP服务器使用的用户和密码,且该用户具备SFTP服务器数据导出目录的写入权限。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从HDFS/OBS导出数据时,确保HDFS/OBS数据源的输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的任务需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • 配置场景 在使用集群中,如果需要在多主实例模式与多租户模式之间切换,则还需要进行如下参数的设置。 多租户切换成多主实例模式 修改Spark2x服务的以下参数: spark.thriftserver.proxy.enabled=false spark.scheduler.allocation.file=#{conf_dir}/fairscheduler.xml spark.proxyserver.hash.enabled=false 多主实例切换成多租户模式 修改Spark2x服务的以下参数: spark.thriftserver.proxy.enabled=true spark.scheduler.allocation.file=./__spark_conf__/__hadoop_conf__/fairscheduler.xml spark.proxyserver.hash.enabled=true
  • 问题 Spark客户端设置fs.obs.hdfs.trash.version=1不生效,drop table后文件在回收站的存放路径不改变。 通常,默认情况: 当fs.obs.hdfs.trash.version=2时,回收站路径为:/user/.Trash/${userName}/Current 当fs.obs.hdfs.trash.version=1时,回收站路径为:/user/${userName}/.Trash/Current
  • 操作步骤 以下参数有如下两个配置入口: 服务器端配置 进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。具体操作请参考修改集群服务配置参数章节。 客户端配置 直接在客户端中修改相应的配置文件。 HDFS客户端配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/hdfs-site.xml。 Yarn客户端配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/yarn-site.xml。 MapReduce客户端配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 表1 多CPU内核设置 配置 描述 参数 默认值 Server/Client 影响 备注 节点容器槽位数 如下配置组合决定了每节点任务(map、reduce)的并发数。 “yarn.nodemanager.resource.memory-mb” “mapreduce.map.memory.mb” “mapreduce.reduce.memory.mb” yarn.nodemanager.resource.memory-mb 说明: 需要在FusionInsight Manager系统进行配置。 16384 Server 如果所有的任务(map/reduce)需要读写数据至磁盘,多个进程将会同时访问一个磁盘。这将会导致磁盘的IO性能非常的低下。为了改善磁盘的性能,请确保客户端并发访问磁盘的数不大于3。 最大并发的container数量应该为[2.5 * Hadoop中磁盘配置数 ]。 mapreduce.map.memory.mb 说明: 需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 4096 Client mapreduce.reduce.memory.mb 说明: 需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 4096 Client Map输出与压缩 Map任务所产生的输出可以在写入磁盘之前被压缩,这样可以节约磁盘空间并得到更快的写盘速度,同时可以减少至Reducer的数据传输量。需要在客户端进行配置。 mapreduce.map.output.compress指定了Map任务输出结果可以在网络传输前被压缩。这是一个per-job的配置。 mapreduce.map.output.compress.codec指定用于压缩的编解码器。 mapreduce.map.output.compress 说明: 需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 true Client 在这种情况下,磁盘的IO是主要瓶颈。所以可以选择一种压缩率非常高的压缩算法。 编解码器可配置为Snappy,Benchmark测试结果显示Snappy是非常平衡以及高效的编码器。 mapreduce.map.output.compress.codec 说明: 需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 org.apache.hadoop.io.compress.Lz4Codec Client Spills mapreduce.map.sort.spill.percent mapreduce.map.sort.spill.percent 说明: 需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/mapred-site.xml。 0.8 Client 磁盘IO是主要瓶颈,合理配置“mapreduce.task.io.sort.mb”可以使溢出至磁盘的内容最小化。 - 数据包大小 当HDFS客户端写数据至数据节点时,数据会被累积,直到形成一个包。然后这个数据包会通过网络传输。dfs.client-write-packet-size配置项可以指定该数据包的大小。这个可以通过每个job进行指定。 dfs.client-write-packet-size 说明: 需要在客户端进行配置,配置文件路径:客户端安装目录/HDFS/hadoop/etc/hadoop/hdfs-site.xml。 262144 Client 数据节点从HDFS客户端接收数据包,然后将数据包里的数据单线程写入磁盘。当磁盘处于并发写入状态时,增加数据包的大小可以减少磁盘寻道时间,从而提升IO性能。 dfs.client-write-packet-size = 262144
  • 约束 不支持如下语法:GRANT、REVOKE、SHOW GRANTS、SHOW ROLES、SHOW ROLE GRANTS。 UPDATE和DELETE语法不支持筛选条件子句中包含跨catalog的条件,例如:UPDATE mppdb.table SET column1=value WHERE column2 IN (SELECT column2 from hive.table)。 UPDATE语法不支持更新DATE/TIMESTAMP/VARBINARY字段。 不支持查询WHERE语句条件为REAL,例如SELECT * FROM mppdb.table WHERE column1 = REAL '1.1'。 DELETE语法不支持筛选条件子句中包含子查询,例如:DELETE FROM mppdb.table WHERE column IN (SELECT column FROM mppdb.table1)。 HetuEngine支持GaussDB数据源Decimal/Number/Numeric类型数据的最大精度不超过38位。 当谓词的前后两端任意一端包含子查询时,该谓词不会下推,如示例语句count(*) 后面存在子查询,则不下推,但子查询中的min函数可以下推。 select count(*) from item where i_current_price = (select min(i_current_price) from item);
  • 前提条件 数据源所在集群与HetuEngine集群节点网络互通。 在HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。 已创建HetuEngine计算实例。
  • 数据类型映射 GAUSSDB数据类型(data type) HetuEngine数据类型(data type) BOOLEAN BOOLEAN TINYINT TINYINT SMALLINT SMALLINT INTEGER INTEGER BINARY_INTEGER INTEGER BIGINT BIGINT SMALLSERIAL SMALLINT SERIAL INTEGER BIGSERIAL BIGINT FLOAT4 (REAL) REAL FLOAT8(DOUBLE PRECISION) DOUBLE PRECISION DECIMAL[p (,s)] DECIMAL[p (,s)] NUMERIC[p (,s)] DECIMAL[p (,s)] CHAR(n) CHAR(n) CHARACTER(n) CHAR(n) NCHAR(n) CHAR(n) VARCHAR(n) VARCHAR(n) CHARACTER VARYING(55) VARCHAR(n) VARCHAR2(n) VARCHAR(n) NVARCHAR2(n) VARCHAR TEXT(CLOB) VARCHAR DATE TIMESTAMP TIMESTAMP TIMESTAMP UUID UUID JSON JSON
  • 前提条件 主备集群已经安装并且启动。 主备集群上的时间必须一致,而且主备集群上的NTP服务必须使用同一个时间源。 当主集群HBase服务关闭时,Zookeeper和HDFS服务应该启动并运行。 该工具应该由启动HBase进程的系统用户运行。 如果处于安全模式,请确保备用集群的HBase系统用户具有主集群HDFS的读取权限。因为它将更新HBase系统Zookeeper节点和HDFS文件。 主集群HBase故障后,主集群的Zookeeper,文件系统和网络依然可用。
  • 工具使用 在主集群client上输入如下命令使用: hbase org.apache.hadoop.hbase.replication.regionserver.ReplicationSyncUp -Dreplication.sleep.before.failover=1 replication.sleep.before.failover是指在RegionServer启动失败时备份其剩余数据前需要的休眠时间。由于30秒(默认值)的睡眠时间没有任何意义,因此将其设置为1(s),使备份过程更快触发。
  • 注意事项 当主集群关闭时,此工具将从ZooKeeper节点(RS znode)获得WAL的处理进度以及WAL的处理队列,并将未复制的队列复制到备集群中。 每个主集群的RegionServer在备集群ZooKeeper上的replication节点下都有自己的znode。它包含每个对等集群的一个znode。 当Regionserver故障时,主集群的每个RegionServer都会通过watcher收到通知,并尝试锁定故障RegionServer的znode,包含它的队列。成功创建的RegionServer会将所有队列转移到自己队列的znode下。队列传输后,它们将从旧位置删除。 在主集群关闭期间,ReplicationSyncUp工具将使用来自ZooKeeper节点的信息同步主备集群的数据,并且RegionServer znode的wals将被移动到备集群下。
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业中指定的Hive表的权限。 获取SFTP服务器使用的用户和密码,且该用户具备SFTP服务器上源文件的读取权限。如果源文件在导入后文件名要增加后缀,则该用户还需具备源文件的写入权限。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从SFTP服务器导入数据时,确保SFTP服务器输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的作业需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • 块副本位置选择 Nodelabel支持对各个副本的摆放采用不同的策略,如表达式“label-1,label-2,label-3”,表示3个副本分别放到含有label-1、label-2、label-3的DataNode中,不同的副本策略用逗号分隔。 如果label-1,希望放2个副本,可以这样设置表达式:“label-1[replica=2],label-2,label-3”。这种情况下,如果默认副本数是3,则会选择2个带有label-1和一个label-2的节点;如果默认副本数是4,会选择2个带有label-1、一个label-2以及一个label-3的节点。可以注意到,副本数是从左到右依次满足各个副本策略的,但也有副本数超过表达式表述的情况,当默认副本数为5时,多出来的一个副本会放到最后一个节点中,也就是label-3的节点里。 当启用ACLs功能并且用户无权访问表达式中使用的标签时,将不会为副本选择属于该标签的DataNode。
  • 多余块副本删除选择 如果块副本数超过参数“dfs.replication”值(即用户指定的文件副本数),hdfs会删除多余块副本来保证集群资源利用率。 删除规则如下: 优先删除不满足任何表达式的副本。 示例:文件默认副本数为3 /test标签表达式为“LA[replica=1],LB[replica=1],LC[replica=1]”, /test文件副本分布的四个节点(D1~D4)以及对应标签(LA~LD): D1:LA D2:LB D3:LC D4:LD 则选择删除D4节点上的副本块。 如果所有副本都满足表达式,删除多于表达式指定的数量的副本。 示例:文件默认副本数为3 /test标签表达式为“LA[replica=1],LB[replica=1],LC[replica=1]”, /test文件副本分布的四个节点以及对应标签: D1:LA D2:LA D3:LB D4:LC 则选择删除D1或者D2上的副本块。 如果文件所有者或文件所有者的组不能访问某个标签,则优先删除映射到该标签的DataNode中的副本。
  • 基于标签的数据块摆放策略样例 假如有一套集群,有六个DataNode:dn-1,dn-2,dn-3,dn-4,dn-5以及dn-6,对应的IP为10.1.120.[1-6]。有六个目录需要配置标签表达式,Block默认备份数为3。 下面给出3种DataNode标签信息在“host2labels”文件中的表示方式,其作用是一样的。 主机名正则表达式 /dn-[1456]/ = label-1,label-2 /dn-[26]/ = label-1,label-3 /dn-[3456]/ = label-1,label-4 /dn-5/ = label-5 IP地址范围表示方式 10.1.120.[1-6] = label-1 10.1.120.1 = label-2 10.1.120.2 = label-3 10.1.120.[3-6] = label-4 10.1.120.[4-6] = label-2 10.1.120.5 = label-5 10.1.120.6 = label-3 普通的主机名表达式 /dn-1/ = label-1, label-2 /dn-2/ = label-1, label-3 /dn-3/ = label-1, label-4 /dn-4/ = label-1, label-2, label-4 /dn-5/ = label-1, label-2, label-4, label-5 /dn-6/ = label-1, label-2, label-3, label-4 目录的标签表达式设置结果如下: /dir1 = label-1 /dir2 = label-1 && label-3 /dir3 = label-2 || label-4[replica=2] /dir4 = (label-2 || label-3) && label-4 /dir5 = !label-1 /sdir2.txt = label-1 && label-3[replica=3,fallback=NONE] /dir6 = label-4[replica=2],label-2 标签表达式设置方式请参考hdfs nodelabel -setLabelExpression命令。 文件的数据块存放结果如下: “/dir1”目录下文件的数据块可存放在dn-1,dn-2,dn-3,dn-4,dn-5和dn-6六个节点中的任意一个。 “/dir2”目录下文件的数据块可存放在dn-2和dn-6节点上。Block默认备份数为3,表达式只匹配了两个DataNode节点,第三个副本会在集群上剩余的节点中选择一个DataNode节点存放。 “/dir3”目录下文件的数据块可存放在dn-1,dn-3,dn-4,dn-5和dn-6中的任意三个节点上。 “/dir4”目录下文件的数据块可存放在dn-4,dn-5和dn-6。 “/dir5”目录下文件的数据块没有匹配到任何一个DataNode,会从整个集群中任意选择三个节点存放(和默认选块策略行为一致)。 “/sdir2.txt”文件的数据块,两个副本存放在dn-2和dn-6节点上,虽然还缺失一个备份节点,但由于使用了fallback=NONE参数,所以只存放两个备份。 “/dir6”目录下文件的数据块在具备label-4的节点中选择2个节点(dn-3 -- dn-6),然后在label-2中选择一个节点,如果用户指定“/dir6”下文件副本数大于3,则多出来的副本均在label-2。
  • 配置描述 Datanode节点标签配置 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 dfs.block.replicator.classname 配置HDFS的DataNode原则策略。 如果需要开启NodeLabeNodel功能,需要将该值设置为org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeLabel。 org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy host2tags 配置DataNode主机与标签的对应关系。 主机名称支持配置IP扩展表达式(如192.168.1.[1-128]或者192.168.[2-3].[1-128],且IP必须为业务IP),或者为前后加上 / 的主机名的正则表达式(如/datanode-[123]/或者/datanode-\d{2}/)。标签配置名称不允许包含 = / \ 字符。【注意】配置IP时必须是业务IP。 - host2tags配置项内容详细说明: 假如有一套集群,有20个Datanode:dn-1到dn-20,对应的IP地址为10.1.120.1到10.1.120.20,host2tags配置文件内容可以使用如下的表示方式。 主机名正则表达式 “/dn-\d/ = label-1”表示dn-1到dn-9对应的标签为label-1,即dn-1 = label-1,dn-2 = label-1,...dn-9 = label-1。 “/dn-((1[0-9]$)|(20$))/ = label-2”表示dn-10到dn-20对应的标签为label-2,即dn-10 = label-2,dn-11 = label-2,...dn-20 = label-2。 IP地址范围表示方式 “10.1.120.[1-9] = label-1”表示10.1.120.1到10.1.120.9对应的标签为label-1,即10.1.120.1 = label-1,10.1.120.2 = label-1,...10.1.120.9 = label-1。 “10.1.120.[10-20] = label-2”表示10.1.120.10到10.1.120.20对应的标签为label-2,即10.1.120.10 = label-2,10.1.120.11 = label-2,...10.1.120.20 = label-2。 基于标签的数据块摆放策略支持扩容减容场景: 当集群中新增加DataNode节点时,如果该DataNode对应的IP匹配host2tags配置项中的IP地址范围,或者该DataNode的主机名匹配host2tags配置项中的主机名正则表达式,则该DataNode节点会被设置成对应的标签。 例如“host2tags”配置值为10.1.120.[1-9] = label-1,而当前集群只有10.1.120.1到10.1.120.3三个数据节点。进行扩容后,又添加了10.1.120.4这个数据节点,则该数据节点会被设置成label-1的标签;如果10.1.120.3这个数据节点被删除或者退出服务后,数据块不会再被分配到该节点上。 设置目录/文件的标签表达式 在HDFS参数配置页面配置“path2expression”,配置HDFS目录与标签的对应关系。当配置的HDFS目录不存在时,也可以配置成功,新建不存在的同名目录,已设置的标签对应关系将在30分钟之内被继承。设置了标签的目录被删除后,新增一个同名目录,原有的对应关系也将在30分钟之内被继承。 命令行设置方式请参考hdfs nodelabel -setLabelExpression命令。 Java API设置方式通过NodeLabelFileSystem实例化对象调用setLabelExpression(String src, String labelExpression)方法。src为HDFS上的目录或文件路径,“labelExpression”为标签表达式。 开启NodeLabel特性后,可以通过命令hdfs nodelabel -listNodeLabels查看每个Datanode的标签信息。
  • 配置场景 用户需要通过数据特征灵活配置HDFS文件数据块的存储节点。通过设置HDFS目录/文件对应一个标签表达式,同时设置每个DataNode对应一个或多个标签,从而给文件的数据块存储指定了特定范围的DataNode。 当使用基于标签的数据块摆放策略,为指定的文件选择DataNode节点进行存放时,会根据文件的标签表达式选择出DataNode节点范围,然后在这些DataNode节点范围内,选择出合适的存放节点。 场景1 DataNodes分区场景。 场景说明: 用户需要让不同的应用数据运行在不同的节点,分开管理,就可以通过标签表达式,来实现不同业务的分离,指定业务存放到对应的节点上。 通过配置NodeLabel特性使得: /HBase下的数据存储在DN1、DN2、DN3、DN4节点上。 /Spark下的数据存储在DN5、DN6、DN7、DN8节点上。 图1 DataNode分区场景 通过hdfs nodelabel -setLabelExpression -expression 'LabelA[fallback=NONE]' -path /Hbase命令,给Hbase目录设置表达式。从图1中可知,“/Hbase”文件的数据块副本会被放置在有LabelA标签的节点上,即DN1、DN2、DN3、DN4。同理,通过hdfs nodelabel -setLabelExpression -expression 'LabelB[fallback=NONE]' -path /Spark命令,给Spark目录设置表达式。在“/Spark”目录下文件对应的数据块副本只能放置到LabelB标签上的节点,如DN5、DN6、DN7、DN8。 设置数据节点的标签参考配置描述。 如果同一个集群上存在多个机架,每个标签下需要有多个机架的datanodes,以确保数据块摆放的可靠性。 场景2 多机架下指定副本位置场景 场景说明: 在异构集群中,客户需要分配一些特定的具有高可靠性的节点用以存放重要的商业数据,可以通过标签表达式指定副本位置,指定文件数据块的其中一个副本存放到高可靠性的节点上。 “/data”目录下的数据块,默认三副本情况下,其中至少有一个副本会被存放到RACK1或RACK2机架的节点上(RACK1和RACK2机架的节点为高可靠性节点),另外两个副本会被分别存放到RACK3和RACK4机架的节点上。 图2 场景样例 通过 hdfs nodelabel -setLabelExpression -expression 'LabelA||LabelB[fallback=NONE],LabelC,LabelD' -path /data命令给“/data”目录设置表达式。 当向“/data”目录下写数据时,至少有一个数据块副本存放在LabelA或者LabelB标签的节点中,剩余的两个数据块副本会被存放在有LabelC和LabelD标签的节点上。
  • 使用介绍 表2 物化视图使用介绍 阶段 说明 参考章节 物化视图SQL示例 介绍物化视图支持的操作,包括创建物化视图、列举物化视图、查询物化视图等 HetuEngine物化视图SQL示例 配置物化视图改写能力 开启物化视图能力,提高查询的响应效率 配置HetuEngine物化视图改写能力 配置物化视图推荐能力 自动学习并推荐对业务最有价值的物化视图SQL,使在线查询效率获得倍数提升,同时有效降低系统负载压力 配置HetuEngine物化视图推荐能力 配置物化视图缓存能力 可将多次执行并改写后的SQL保存到缓存中,再次执行这条SQL时会直接从缓存中获取改写后的SQL,而不是重新对SQL进行改写,提高查询效率 配置HetuEngine物化视图缓存能力 配置物化视图有效期与数据刷新 设置物化视图的有效期,当前系统只会使用有效期内的物化视图进行自动改写 设置数据定期更新,可定时手动刷新或自动刷新物化视图 配置HetuEngine物化视图的有效期与数据刷新能力 配置智能物化视图 提供自动化物化视图的创建,无需手动执行SQL创建物化视图(推荐使用) 配置HetuEngine智能物化视图能力 查看物化视图自动化任务记录 看任务执行情况,帮助评估集群运行健康状况 查看HetuEngine物化视图自动化任务
  • 背景介绍 HetuEngine具备物化视图能力。在实际运用中,将高频访问的SQL查询和有高耗时的算子(连接, 聚合等算子)的SQL通过建立物化视图进行预计算,然后在查询的SQL中将能匹配到物化视图的查询或者子查询转换为物化视图,避免了数据的重复计算,这种情况下往往能较大地提高查询的响应效率。 物化视图通常基于对数据表进行聚合和连接的查询结果创建。 物化视图支持“查询重写”,这是一种优化技术,即将基于原始表编写的查询语句转换为查询一个或多个物化视图语句的等效请求。如下物化视图的SQL示例: create materialized view mv.default.mv1 with(storage_table='hive.default.mv1') AS select id from hive.mvschema.t1; 该物化视图实际数据的存储表为“hive.default.mv1”,在查询重写时,查询SQL“select id from hive.mvschema.t1”会被重写成查询物化视图的表,即“select id from hive.default.mv1”。
  • 权限介绍 物化视图权限如表1。物化视图权限控制依赖Ranger,若关闭Ranger鉴权会带来权限失效的风险。 表1 HetuEngine物化视图权限介绍 操作 catalog mv权限 物化视图存储表的权限 原始物理表的权限 创建物化视图 表的Create权限 NA 对应列的查询权限 删除物化视图 删除表权限 NA NA 刷新物化视图 表的更新权限 NA 对应列的查询权限 修改物化视图属性或状态 表的Alter权限 NA NA 使用物化视图重写查询语句 NA NA 对应列的查询权限 使用物化视图重写查询语句的执行计划(EXPLAIN) NA 对应列的查询权限 对应列的查询权限 查询物化视图 对应列的查询权限 NA NA 物化视图和非物化视图的物理表联合查询 对应列的查询权限 NA 对应列的查询权限 查看物化视图 NA NA NA 查看物化视图的创建语句 表的Show权限 表的Show权限 NA
  • HetuEngine数据脱敏 Ranger支持对HetuEngine数据进行脱敏处理(Data Masking),可对用户执行的select操作的返回结果进行处理,以屏蔽敏感信息。 登录Ranger WebUI界面,在首页中单击“PRESTO”区域的“HetuEngine”。 在“Masking”页签单击“Add New Policy”,添加HetuEngine数据脱敏策略。 根据业务需求配置相关参数。 表3 HetuEngine数据脱敏参数 参数名称 描述 Policy Name 策略名称,可自定义,不能与本服务内其他策略名称重复。 Policy Conditions IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。 Policy Label 为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。 Presto Catalog 配置当前策略使用的Catalog名称。 Presto Schema 配置当前策略使用的数据库名称。 Presto Table 配置当前策略使用的表名称。 Presto Column 配置当前策略使用的列名称。 Description 策略描述信息。 Audit Logging 是否审计此策略。 Mask Conditions 在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的对象,单击“Add Conditions”,添加策略适用的IP地址范围,然后在单击“Add Permissions”,勾选“Select”权限。 单击“Select Masking Option”,选择数据脱敏时的处理策略: Redact:用x屏蔽所有字母字符,用0屏蔽所有数字字符。 Partial mask: show last 4:只显示最后的4个字符,其他用x代替。 Partial mask: show first 4:只显示开始的4个字符,其他用x代替。 Hash:用值的哈希值替换原值。 Nullify:用NULL值替换原值。 Unmasked(retain original value):原样显示。 Custom:可使用任何有效返回与被屏蔽的列中的数据类型相同的数据类型来自定义策略。 如需添加多列的脱敏策略,可单击按钮添加。 单击“Add”,在策略列表可查看策略的基本信息。 用户通过HetuEngine客户端对配置了数据脱敏策略的表执行select操作,系统将对数据进行处理后进行展示。
  • 操作步骤 使用Ranger管理员用户rangeradmin登录Ranger管理页面,具体操作可参考登录Ranger WebUI界面。 在首页中单击“PRESTO”区域的“HetuEngine”。 在“Access”页签单击“Add New Policy”,添加HetuEngine权限控制策略。 根据业务需求配置相关参数。 “授予访问表所在的Catalog策略”为基础策略,配置其他策略前必须先确保配置了此策略,可参考表2进行配置。 表1 HetuEngine权限参数 参数名称 描述 Policy Name 策略名称,可自定义,不能与本服务内其他策略名称重复。 Enabled:启用当前策略。 Disabled:不启用当前策略。 Policy Conditions IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。 Policy Label 为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。 Presto Catalog 适用该策略的数据源Catalog名称,填写*时表示所有Catalog。 Include:策略适用于当前输入的对象。 Exclude:策略适用于除去当前输入内容之外的其他对象。 Schema 适用该策略的schema名称,填写*时表示所有schema。 Include:策略适用于当前输入的对象。 Exclude:策略适用于除去当前输入内容之外的其他对象。 table 适用该策略的table/view名称,填写*时表示所有table。 Include:策略适用于当前输入的对象。 Exclude:策略适用于除去当前输入内容之外的其他对象。 Column 适用该策略的列名,填写*时表示所有列。 Description 策略描述信息。 Audit Logging 是否审计此策略。 Allow Conditions 策略允许条件,配置本策略内允许的权限及例外。 在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的Role、用户组或用户。单击“Add Conditions”,添加策略适用的IP地址范围,单击“Add Permissions”,添加对应权限。 Select:查询权限 Insert:插入权限 Create:创建权限 Drop:drop权限 Delete:删除权限 Use:use权限 Alter:alter权限 Update: update权限 Admin:admin权限 All:所有执行权限(涵盖Admin权限) Select/Deselect All:全选/取消全选 如需添加多条权限控制规则,可单击按钮添加。 如需当前条件中的用户或用户组管理本条策略,可勾选“Delegate Admin”,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略,它还可以基于原始策略创建子策略。 Deny Conditions 策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”相同。 表2 设置权限 任务场景 角色授权操作 授予访问表所在的Catalog策略 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的资源所在的catalog,如“hive”。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Select”。 说明: 此策略为基础策略,在配置其他策略前必须先确保配置了此策略。 授予访问远端HetuEngine表的权限 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的表所在的catalog,“systemremote”和“svc”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入“*”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入“*”。 在“table”下方的下拉框中选中“column”,同时在其对应的输入框中输入“*”。 在“Select User”中填授权的远端HetuEngine用户。 在“Permissions”中勾选“Create、Drop、Select、Insert”。 说明: 此策略为远端HetuEngine表的基础策略,在配置其他策略前必须先确保配置了此策略。 Create schema 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权的schema名称。如果填“*”,表示对所有当前catalog下的所有schema进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Create”。 Drop schema 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权的schema名称。如使用“*”,表示对所有当前catalog下的所有schema进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Drop”。 Create table 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Create”。 Drop table 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Drop”。 Alter table 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Alter”。 说明: ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]; 的操作需要额外授予Table级别的“delete”和Column级别的“select”权限。 Show tables 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的表所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入允许show table的目标schema,如“default”。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Select”。 Insert表 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Insert”。 Delete 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Delete”。 Select 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“table”下方的下拉框中选中“column”,同时在其对应的输入框中输入要授权的目标column。如使用“*”,表示对所有当前table下的所有column进行授权 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Select”。 show columns 在“Policy Name”填写策略名称。 在“Presto Catalog”填写要授权的table所在的catalog,如“hive”。 在“Presto Catalog”下方的下拉框中选中“schema”,同时在其对应的输入框中输入要授权table所在的schema,如“default”。 在“schema”下方的下拉框中选中“table”,同时在其对应的输入框中输入要授权的目标table。如使用“*”,表示对所有当前schema下的所有table进行授权。 在“table”下方的下拉框中选中“column”,同时在其对应的输入框中输入要授权的目标column。如使用“*”,表示对所有当前table下的所有column进行授权。 在“Select User”中填授权的Hetu用户。 在“Permissions”中勾选“Select”。 set session 在“Policy Name”填写策略名称。 在“Presto Catalog”填写“*”。 在“Select User”中填授权的Hetu用户。 在“Delegate Admin”中进行勾选。 配置权限后预计30秒左右生效。 目前的权限管控可以到达列的级别。 (可选)添加策略有效期。在页面右上角单击“Add Validity period”,设置“Start Time”和“End Time”,选择“Time Zone”。单击“Save”保存。如需添加多条策略有效期,可单击按钮添加。如需删除策略有效期,可单击按钮删除。 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。 如需禁用某条策略,可单击按钮编辑策略,设置策略开关为“Disabled”。 如果不再使用策略,可单击按钮删除策略。
  • 操作场景 该任务指导MRS集群管理员在Manager创建并设置SparkSQL的角色。SparkSQL角色可设置Spark管理员权限以及数据表的数据操作权限。 用户使用Hive并创建数据库需要加入hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Spark2x的Ranger访问权限策略。 Spark2x开启或关闭Ranger鉴权后,需要重启Spark2x服务,并重新下载客户端,或刷新客户端配置文件spark/conf/spark-defaults.conf: 开启Ranger鉴权:spark.ranger.plugin.authorization.enable=true 关闭Ranger鉴权:spark.ranger.plugin.authorization.enable=false
共100000条