华为云用户手册

  • 操作场景 原子性是指事务是一个不可分割的工作单元,一个事务可以包含多个操作,这些操作要么全部执行,要么全都不执行。但是由于事务在执行过程中,可能出现一些意外,例如用户回滚了事务、连接断开、断电等等,导致事务被中断执行。 ClickHouse支持原子性写入能力,支持事务能力。实现事务的原子性,在事务的某个操作失败后,支持回滚到事务执行之前的状态。 本章节主要介绍如何开启ClickHouse事务。 使用本地表场景进行数据写入性能更优,故推荐本地表的数据增、删、改、查场景的多副本分布式事务支持。 对于使用分布式表进行数据写入场景的分布式事务,需要结合分布式表事务insert_distributed_sync+本地表事务(Mergetree/ReplicateMergeTree)完整的事务支持数据写入。
  • 配置描述 参考修改集群服务配置参数进入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进度。
  • 推荐资源配置 mor表: 由于其本质上是写增量文件,调优可以直接根据Hudi的数据大小(dataSize)进行调整。 dataSize如果只有几个G,推荐跑单节点运行spark,或者yarn模式但是只分配一个container。 入湖程序的并行度p设置:建议 p = (dataSize)/128M,程序分配core的数量保持和p一致即可。内存设置建议内存大小和core的比例大于1.5:1 即一个core配1.5G内存, 堆外内存设置建议内存大小和core的比例大于0.5:1。 cow表: cow表的原理是重写原始数据,因此这种表的调优,要兼顾dataSize和最后重写的文件数量。总体来说core数量越大越好(和最后重写多少个文件数直接相关),并行度p和内存大小和mor设置类似。
  • 注意事项 以下为分别使用SET和RESET命令进行动态设置或清除操作的属性: 表2 属性描述 属性 描述 hoodie.insert.shuffle.parallelism insert方式写入数据时的spark shuffle并行度。 hoodie.upsert.shuffle.parallelism upsert方式写入数据时的spark shuffle并行度。 hoodie.delete.shuffle.parallelism delete方式删除数据时的spark shuffle并行度。 hoodie.sql.insert.mode 指定Insert模式,取值为strict、non-strict及upsert。 hoodie.sql.bulk.insert.enable 指定是否开启bulk insert写入。 spark.sql.hive.convertMetastoreParquet sparksql把parquet表转化为datasource表进行读取。当hudi的provider为hive的情况下,使用sparksql或sparkbeeline进行读取,需要将该参数设置为false。
  • 命令格式 Add或Update参数值: SET parameter_name=parameter_value 此命令用于添加或更新“parameter_name”的值。 Display参数值: SET parameter_name 此命令用于显示指定的“parameter_name”的值。 Display会话参数: SET 此命令显示所有支持的会话参数。 Display会话参数以及使用细节: SET -v 此命令显示所有支持的会话参数及其使用细节。 Reset参数值: RESET 此命令清除所有会话参数。
  • 场景介绍 为了快速对用户数据创建索引,HBase提供了可通过MapReduce功能创建索引的TableIndexer工具,该工具可实现添加,构建和删除索引。具体使用场景如下: 在用户的表中预先存在大量数据的情况下,可能希望在某个列上添加索引。但是,使用addIndicesWithData()API添加索引会生成与相关用户数据对应的索引数据,这将花费大量时间。另一方面,使用addIndices()创建的索引不会构建与用户数据对应的索引数据。因此,为了为这样的用户数据建立索引数据,用户可以使用TableIndexer工具来完成索引的构建。 如果索引数据与用户数据不一致,该工具可用于重新构建索引数据。 如果用户暂时禁用索引并且在此期间,向禁用的索引列执行新的put操作,然后直接将索引从禁用状态启用可能会导致索引数据与用户数据不一致。因此,用户必须注意在再次使用之前重新构建所有索引数据。 对于大量现有的索引数据,用户可以使用TableIndexer工具将索引数据从用户表中完全删除。 对于未建立索引的用户表,该工具允许用户同时添加和构建索引。
  • 配置场景 Spark中见到的UI、EventLog、动态资源调度等功能都是通过事件传递实现的。事件有SparkListenerJobStart、SparkListenerJobEnd等,记录了每个重要的过程。 每个事件在发生后都会保存到一个队列中,Driver在创建SparkContext对象时,会启动一个线程循环的从该队列中依次拿出一个事件,然后发送给各个Listener,每个Listener感知到事件后就会做各自的处理。 因此当队列存放的速度大于获取的速度时,就会导致队列溢出,从而丢失了溢出的事件,影响了UI、EventLog、动态资源调度等功能。所以为了更灵活的使用,在这边添加一个配置项,用户可以根据Driver的内存大小设置合适的值。
  • 在CarbonData中查询数据 创建CarbonData table并加载数据之后,可以执行所需的数据查询操作。以下为一些查询操作举例。 获取记录数 为了获取在CarbonData table中的记录数,可以运行以下命令。 select count(*) from x1; 使用Groupby查询 为了获取不重复的deviceinformationid记录数,可以运行以下命令。 select deviceinformationid,count (distinct deviceinformationid) from x1 group by deviceinformationid; 用Filter查询 为了获取特定deviceinformationid的记录,可以运行以下命令。 select * from x1 where deviceinformationid='1010'; 在执行数据查询操作后,如果查询结果中某一列的结果含有中文字等非英文字符,会导致查询结果中的列不能对齐,这是由于不同语言的字符在显示时所占的字宽不尽相同。
  • 在Spark-shell上使用CarbonData 用户如果需要在Spark-shell上使用CarbonData,需通过如下方式创建CarbonData Table,加载数据到CarbonData Table和在CarbonData中查询数据的操作。 spark.sql("CREATE TABLE x2(imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata") spark.sql("LOAD DATA inpath 'hdfs://hacluster/data/x1_without_header.csv' into table x2 options('DELIMITER'=',', 'QUOTECHAR'='\"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber')") spark.sql("SELECT * FROM x2").show()
  • 加载数据到CarbonData Table 创建CarbonData table之后,可以从 CS V文件加载数据到所创建的表中。 用所要求的参数运行以下命令从CSV文件加载数据。该表的列名需要与CSV文件的列名匹配。 LOAD DATA inpath 'hdfs://hacluster/data/test.csv' into table x1 options('DELIMITER'=',', 'QUOTECHAR'='"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber'); 其中,“test.csv”为准备CSV文件的CSV文件,“x1”为示例的表名。 CSV样例内容如下: 13418592122,1001,MAC地址,2017-10-23 15:32:30,2017-10-24 15:32:30,62.50,74.56 13418592123,1002,MAC地址,2017-10-23 16:32:30,2017-10-24 16:32:30,17.80,76.28 13418592124,1003,MAC地址,2017-10-23 17:32:30,2017-10-24 17:32:30,20.40,92.94 13418592125,1004,MAC地址,2017-10-23 18:32:30,2017-10-24 18:32:30,73.84,8.58 13418592126,1005,MAC地址,2017-10-23 19:32:30,2017-10-24 19:32:30,80.50,88.02 13418592127,1006,MAC地址,2017-10-23 20:32:30,2017-10-24 20:32:30,65.77,71.24 13418592128,1007,MAC地址,2017-10-23 21:32:30,2017-10-24 21:32:30,75.21,76.04 13418592129,1008,MAC地址,2017-10-23 22:32:30,2017-10-24 22:32:30,63.30,94.40 13418592130,1009,MAC地址,2017-10-23 23:32:30,2017-10-24 23:32:30,95.51,50.17 13418592131,1010,MAC地址,2017-10-24 00:32:30,2017-10-25 00:32:30,39.62,99.13 命令执行结果如下: +------------+ |Segment ID | +------------+ |0 | +------------+ No rows selected (3.039 seconds)
  • 创建CarbonData Table 在Spark Beeline被连接到JD BCS erver之后,需要创建一个CarbonData table用于加载数据和执行查询操作。下面是创建一个简单的表的命令。 create table x1 (imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata TBLPROPERTIES ('SORT_COLUMNS'='imei,mac'); 命令执行结果如下: +---------+ | Result | +---------+ +---------+ No rows selected (1.093 seconds)
  • 回答 原因分析 NameNode的主节点重启后,它原先在Zookeeper上建立的临时节点(/hadoop-ha/hacluster/ActiveStandbyElectorLock)就会被清理。同时,NameNode备节点发现这个信息后进行抢占希望升主,所以它重新在Zookeeper上建立了active的节点/hadoop-ha/hacluster/ActiveStandbyElectorLock。但是NameNode备节点通过客户端(ZKFC)与Zookeeper建立连接时,由于网络问题、CPU使用率高、集群压力大等原因,出现了客户端(ZKFC)的session(0x144cb2b3e4b36ae4)与Zookeeper服务端的session(0x164cb2b3e4b36ae4)不一致的问题,这就导致了NameNode备节点的watcher没有感知到自己已经成功建立临时节点,依然认为自己还是备。 而NameNode主节点启动后,发现/hadoop-ha/hacluster目录下已经有active的节点,所以也无法升主,导致两个节点都为备。 解决方法 建议通过在 FusionInsight Manager界面上重启HDFS的两个ZKFC加以解决。
  • 配置场景 当YARN本地目录和DataNode目录配置在同一个磁盘时,具有较大容量的磁盘可以运行更多的任务,因此将有更多的中间数据存储在YARN本地目录。 目前DataNode支持通过配置“dfs.datanode.du.reserved”来配置预留磁盘空间大小。配置较小的数值不能满足更大的磁盘要求。但对于更小的磁盘配置更大的数值将浪费大量的空间。 为了避免这种情况,添加一个新的参数“dfs.datanode.du.reserved.percentage”来配置预留磁盘空间占总磁盘空间大小的百分比,那样可以基于总的磁盘空间来预留磁盘百分比。 如果用户同时配置“dfs.datanode.du.reserved.percentage”和“dfs.datanode.du.reserved”,则采用这两个参数较大的数值作为DataNode的预留空间大小。 建议基于磁盘空间设置“dfs.datanode.du.reserved”或者“dfs.datanode.du.reserved.percentage”。
  • 回答 问题分析 创建表。 CREATE TABLE TEST_TABLE( DATE varchar not null, NUM integer not null, SEQ_NUM integer not null, ACCOUNT1 varchar not null, ACCOUNTDES varchar, FLAG varchar, SALL double, CONSTRAINT PK PRIMARY KEY (DATE,NUM,SEQ_NUM,ACCOUNT1) ); 创建全局索引 CREATE INDEX TEST_TABLE_INDEX ON TEST_TABLE(ACCOUNT1,DATE,NUM,ACCOUNTDES,SEQ_NUM); 插入数据 UPSERT INTO TEST_TABLE (DATE,NUM,SEQ_NUM,ACCOUNT1,ACCOUNTDES,FLAG,SALL) values ('20201001',30201001,13,'367392332','sffa1','',''); 执行BulkLoad任务更新数据 hbase org.apache.phoenix.mapreduce.CsvBulkLoadTool -t TEST_TABLE -i /tmp/test.csv,test.csv内容如下: 20201001 30201001 13 367392332 sffa888 1231243 23 问题现象:无法直接更新之前存在的索引数据,导致存在两条索引数据。 +------------+-----------+-----------+---------------+----------------+ | :ACCOUNT1 | :DATE | :NUM | 0:ACCOUNTDES | :SEQ_NUM | +------------+-----------+-----------+---------------+----------------+ | 367392332 | 20201001 | 30201001 | sffa1 | 13 | | 367392332 | 20201001 | 30201001 | sffa888 | 13 | +------------+-----------+-----------+---------------+----------------+ 解决方法 删除旧的索引表。 DROP INDEX TEST_TABLE_INDEX ON TEST_TABLE; 异步方式创建新的索引表。 CREATE INDEX TEST_TABLE_INDEX ON TEST_TABLE(ACCOUNT1,DATE,NUM,ACCOUNTDES,SEQ_NUM) ASYNC; 索引重建。 hbase org.apache.phoenix.mapreduce.index.IndexTool --data-table TEST_TABLE --index-table TEST_TABLE_INDEX --output-path /user/test_table
  • SparkSQL权限 类似于Hive,SparkSQL也是建立在Hadoop上的 数据仓库 框架,提供类似SQL的结构化数据。 MRS 提供用户、用户组和角色,集群中的各类权限需要先授予角色,然后将用户或者用户组与角色绑定。用户只有绑定角色或者加入绑定角色的用户组,才能获得权限。 如果当前组件使用了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
  • SparkSQL使用场景及对应权限 用户通过SparkSQL服务创建数据库需要加入Hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。 如果用户访问别人创建的表或数据库,需要授予权限。所以根据SparkSQL使用场景的不同,用户需要的权限可能也不相同。 表1 SparkSQL使用场景 主要场景 用户需要的权限 使用SparkSQL表、列或数据库 使用其他用户创建的表、列或数据库,不同的场景需要不同的权限,例如: 创建表,需要“创建”。 查询数据,需要“查询”。 插入数据,需要“插入”。 关联使用其他组件 部分场景除了SparkSQL权限,还可能需要组件的权限,例如: 使用Spark on HBase,在SparkSQL中查询HBase表数据,需要设置HBase权限。 在一些特殊SparkSQL使用场景下,需要单独设置其他权限。 表2 SparkSQL授权注意事项 场景 用户需要的权限 创建SparkSQL数据库、表、外表,或者为已经创建的表或外表添加分区,且Hive用户指定数据文件保存在“/user/hive/warehouse”以外的HDFS目录。 需要此目录已经存在,客户端用户是目录的属主,且用户对目录拥有“读”、“写”和“执行”权限。同时用户对此目录上层的每一级目录都拥有“读”和“执行”权限。 在Spark2x中,在创建HBase的外表时,需要拥有Hive端database的“创建”权限。而在Spark 1.5中,在创建HBase的外表时,需要拥有Hive端database的“创建”权限,也需要拥有HBase端Namespace的“创建”权限。 用户使用load将指定目录下所有文件或者指定文件,导入数据到表中。 数据源为Linux本地磁盘,指定目录时需要此目录已经存在,系统用户“omm”对此目录以及此目录上层的每一级目录拥有“r”和“x”的权限。指定文件时需要此文件已经存在,“omm”对此文件拥有“r”的权限,同时对此文件上层的每一级目录拥有“r”和“x”的权限。 数据源为HDFS,指定目录时需要此目录已经存在,SparkSQL用户是目录属主,且用户对此目录及其子目录拥有“读”、“写”和“执行”权限,并且其上层的每一级目录拥有“读”和“执行”权限。指定文件时需要此文件已经存在,SparkSQL用户是文件属主,且用户对文件拥有“读”、“写”和“执行”权限,同时对此文件上层的每一级目录拥有“读”和“执行”权限。 创建函数、删除函数或者修改任意数据库。 需要授予“管理”权限。 操作Hive中所有的数据库和表。 需加入到supergroup用户组,并且授予“管理”权限。 对部分datasource表赋予insert权限后,执行insert|analyze操作前需要单独对hdfs上的表目录赋予写权限。 当前对spark datasource表赋予Insert权限时,如果表格式为:text|csv|json|parquet|orc,则不会修改表目录的权限。因此,对以上几种类型的datasource表赋予Insert权限后,还需要单独对hdfs上的表目录赋予写权限,用户才能成功对表执行insert|analyze操作。
  • SparkSQL权限模型 用户使用SparkSQL服务进行SQL操作,必须对SparkSQL数据库和表(含外表和视图)拥有相应的权限。完整的SparkSQL权限模型由元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是SparkSQL权限模型中的一种。 元数据权限 元数据权限即在元数据层上进行权限控制,与传统关系型数据库类似,SparkSQL数据库包含“创建”和“查询”权限,表和列包含“查询”、“插入”、“UPDATE”和“删除”权限。SparkSQL中还包含拥有者权限“OWNERSHIP”和Spark管理员权限“管理”。 数据文件权限,即HDFS文件权限 SparkSQL的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。 用户对SparkSQL数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对SparkSQL数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“执行”。 使用Manager界面图形化的角色管理功能来管理SparkSQL数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。
  • 操作步骤 使用Ranger管理员用户rangeradmin登录Ranger管理页面,具体操作可参考登录Ranger WebUI界面。 在首页中单击“KAFKA”区域的组件插件名称如“Kafka”。 单击“Add New Policy”,添加Kafka权限控制策略。 根据业务需求配置相关参数。 表1 Kafka权限参数 参数名称 描述 Policy Type Access。 Policy Conditions IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。 Policy Name 策略名称,可自定义,不能与本服务内其他策略名称重复。 Policy Label 为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。 topic 配置当前策略适用的topic名,可以填写多个值。这里支持通配符,例如:test、test*、*。 “Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。 Description 策略描述信息。 Audit Logging 是否审计此策略。 Allow Conditions 策略允许条件,配置本策略内允许的权限及例外,例外条件优先级高于正常条件。 在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的Role、用户组或用户。 单击“Add Conditions”,添加策略适用的IP地址范围,单击“Add Permissions”,添加对应权限。 Publish:生产权限。 Consume:消费权限。 Describe:查询权限。 Create: 创建主题权限。 Delete: 删除主题权限。 Describe Configs:查询配置权限。 Alter:修改topic的partition数量的权限。 Alter Configs:修改配置权限。 Select/Deselect All:全选/取消全选。 如需添加多条权限控制规则,可单击按钮添加。 如需当前条件中的用户或用户组管理本条策略,可勾选“Delegate Admin”,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略,它还可以基于原始策略创建子策略。 Deny Conditions 策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”类型,拒绝条件的优先级高于“Allow Conditions”中配置的允许条件。 例如为用户“testuser”添加“test”主题的生产权限,配置如下: 图1 Kafka权限参数 表2 设置权限 任务场景 角色授权操作 设置Kafka管理员权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - topic”的策略,单击按钮编辑策略。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Select/Deselect All”。 设置用户对Topic的创建权限 在“topic”配置Topic名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Create”。 说明: 目前Kafka内核支持"--zookeeper"和"--bootstrap-server"两种方式创建Topic,社区将会在后续的版本中删掉对"--zookeeper"的支持,所以建议用户使用"--bootstrap-server"的方式创建Topic。 注意:目前Kafka只支持"--bootstrap-server"方式创建Topic行为的鉴权,不支持对"--zookeeper"方式的鉴权 设置用户对Topic的删除权限 在“topic”配置Topic名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Delete”。 说明: 目前Kafka内核支持"--zookeeper"和"--bootstrap-server"两种方式删除Topic,社区将会在后续的版本中删掉对"--zookeeper"的支持,所以建议用户使用"--bootstrap-server"的方式删除Topic。 注意:目前Kafka只支持对"--bootstrap-server"方式删除Topic行为的鉴权,不支持对"--zookeeper"方式的鉴权 设置用户对Topic的查询权限 在“topic”配置Topic名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Describe”和“Describe Configs”。 说明: 目前Kafka内核支持"--zookeeper"和"--bootstrap-server"两种方式查询Topic,社区将会在后续的版本中删掉对"--zookeeper"的支持,所以建议用户使用"--bootstrap-server"的方式查询Topic。 注意:目前Kafka只支持对"--bootstrap-server"方式查询Topic行为的鉴权,不支持对"--zookeeper"方式的鉴权 设置用户对Topic的生产权限 在“topic”配置Topic名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Publish”。 设置用户对Topic的消费权限 在“topic”配置Topic名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Consume”。 说明: 因为消费Topic时,涉及到Offset的管理操作,必须同时开启ConsumerGroup的“Consume”权限,详见“设置用户对ConsumerGroup Offsets 的提交权限” 设置用户对Topic的扩容权限(增加分区) 在“topic”配置Topic名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Alter”。 设置用户对Topic的配置修改权限 当前Kafka内核暂不支持基于“--bootstrap-server”的Topic参数修改行为,故当前Ranger不支持对此行为的鉴权操作。 设置用户对Cluster的所有管理权限 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Kafka Admin”。 设置用户对Cluster的创建权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - cluster”的策略,单击按钮编辑策略。 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Create”。 说明: 对于Cluster的Create操作鉴权主要涉及以下两个场景: 集群开启了“auto.create.topics.enable”参数后,客户端向服务的还未创建的Topic发送数据的场景,此时会判断用户是否有集群的Create权限 对于用户创建大量Topic的场景,如果授予用户Cluster Create权限,那么该用户可以在集群内部创建任意Topic 设置用户对Cluster的配置修改权限 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Alter Configs”。 说明: 此处的配置修改权限,指的是Broker、Broker Logger的配置权限。 当授予用户配置修改权限后,即使不授予配置查询权限也可查询配置详情(配置修改权限高于且包含配置查询权限)。 设置用户对Cluster的配置查询权限 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Describe”和 “Describe Configs”。 说明: 此处查询指的是查询集群内的Broker、Broker Logger信息。该查询不涉及Topic。 设置用户对Cluster的Idempotent Write权限 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Idempotent Write”。 说明: 此权限会对用户客户端的Idempotent Produce行为进行鉴权。 设置用户对Cluster的分区迁移权限管理 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Alter”。 说明: Cluster的Alter权限可以对以下三种场景进行权限控制: Partition Reassign场景下,迁移副本的存储目录。 集群里各分区内部leader选举。 Acl管理(添加或删除)。 其中1和2都是集群内部Controller与Broker间、Broker与Broker间的操作,创建集群时,默认授予内置kafka用户此权限,普通用户授予此权限没有意义。 3涉及Acl的管理,Acl设计的就是用于鉴权,由于目前kafka鉴权已全部托管给Ranger,所以这个场景也基本不涉及(配置后亦不生效)。 设置用户对Cluster的Cluster Action权限 在“cluster”右侧输入并选择集群名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Cluster Action”。 说明: 此权限主要对集群内部副本主从同步、节点间通信进行控制,在集群创建时已经授权给内置kakfa用户,普通用户授予此权限没有意义。 设置用户对TransactionalId的权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - transactionalid”的策略,单击按钮编辑策略。 在“transactionalid”配置事务ID。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Publish”和 "Describe"。 说明: “Publish”权限主要对用户开启了事务特性的客户端请求进行鉴权,例如事务开启、结束、提交offset、事务性数据生产等行为。 “Describe”权限主要对于开启事务特性的客户端与Coordinator的请求进行鉴权。 建议在开启事务特性的场景下,给用户同时授予“Publish”和“Describe”权限。 设置用户对DelegationToken的权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - delegationtoken”的策略,单击按钮编辑策略。 在“delegationtoken”配置delegationtoken。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“ Describe”。 说明: 当前Ranger对DelegationToken的鉴权控制仅限于对查询的权限控制,不支持对DelegationToken的create、renew、expire操作的权限控制。 设置用户对ConsumerGroup Offsets 的查询权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - consumergroup”的策略,单击按钮编辑策略。 在“consumergroup”配置需要管理的consumergroup。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Describe”。 设置用户对ConsumerGroup Offsets 的提交权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - consumergroup”的策略,单击按钮编辑策略。 在“consumergroup”配置需要管理的consumergroup。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Consume”。 说明: 当给用户授予了ConsumerGroup的“Consume”权限后,用户会同时被授予“Describe”权限。 设置用户对ConsumerGroup Offsets 的删除权限 在首页中单击“KAFKA”区域的组件插件名称,例如“Kafka”。 选择“Policy Name”为“all - consumergroup”的策略,单击按钮编辑策略。 在“consumergroup”配置需要管理的consumergroup。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Delete”。 说明: 当给用户授予了ConsumerGroup的“Delete”权限后,用户会同时被授予“Describe”权限。 (可选)添加策略有效期。在页面右上角单击“Add Validity period”,设置“Start Time”和“End Time”,选择“Time Zone”。单击“Save”保存。如需添加多条策略有效期,可单击按钮添加。如需删除策略有效期,可单击按钮删除。 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。 如需禁用某条策略,可单击按钮编辑策略,设置策略开关为“Disabled”。 如果不再使用策略,可单击按钮删除策略。
  • 前提条件 创建Hudi数据源的代理用户,该代理用户为人机用户且需拥有hive组。 在HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统 域名 ”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。 参考创建HetuEngine权限角色创建HetuEngine管理员用户。
  • 查询冻结表的冻结分区 查询冷冻分区: show frozen partitions 表名; 默认元数据库冻结分区类型只支持int、string、varchar、date、timestamp类型。 外置元数据库只支持Postgres数据库,且冻结分区类型只支持int、string、varchar、timestamp类型。 对冻结后的表进行Msck元数据修复时,需要先解冻数据。如果对冻结表进行过备份后恢复操作,则可以直接执行Msck元数据修复操作,且解冻只能通过msck repair命令进行操作。 对冻结后的分区进行rename时,需要先解冻数据,否则会提示分区不存在。 删除存在冻结数据的表时,被冻结的数据会同步删除。 删除存在冻结数据的分区时,被冻结的分区信息不会被删除,HDFS业务数据也不会被删除。 select查询数据时,会自动添加排查冷分区数据的过滤条件,查询结果将不包含冷分区的数据。 show partitions table查询表下的分区数据时,查询结果将不包含冷分区,可通过show frozen partitions table进行冷冻分区查询。
  • 处理步骤 如果运行任务的BE节点故障,需查看具体的故障原因再进行解决。 如果RPC源端有大量未发送的数据超过了阈值,可设置如下参数: brpc_socket_max_unwritten_bytes:用于设置未发送的数据量的阈值,默认为1GB。如果未发送数据量超过该值,则会报OVERCROWDED错,可适当调大该值。 tablet_writer_ignore_eovercrowded:是否忽略数据导入过程中出现的OVERCROWDED错误,默认值为“false”。该参数主要用于避免导入失败,以提高导入的稳定性。 max_body_size:用于设置RPC的包大小阈值 ,默认为3GB。如果查询中带有超大 String 类型,或者bitmap类型数据时,可以通过修改该参数规避。
  • 数据结构 HyperLogLog(hll)是一种统计基数的算法。它实际上不会存储每个元素出现的次数,它使用的是概率算法,通过存储元素的32位hash值的第一个1的位置,来计算元素数量。通常分为稀疏存储结构和密集存储结构两种。hll创建时是稀疏存储结构,当需要更高效处理时会转为密集型数据结构。P4HyperLogLog则在其整改生命周期都是密集型数据结构。如有必要,可以显式地转换cast(hll as P4HyperLogLog)。在当前数据引擎的实现中,hll的数据草图是通过一组32位的桶来存储对应的最大hash。
  • 操作场景 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表上原始数据,因为保留一张未加密的表存在安全风险。
  • 日志级别 Loader中提供了如表2所示的日志级别,日志级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 ERROR ERROR表示错误日志输出。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示系统及各事件正常运行状态信息。 DEBUG DEBUG表示系统及系统调试信息。 如果您需要修改日志级别,请执行如下操作: 请参考修改集群服务配置参数,进入Loader的“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”,完成后重启服务使配置生效。
  • 工具使用 下载安装客户端,例如安装目录为“/opt/client”。进入 目录“/opt/client/Spark2x/spark/bin”, 执行start-prequery.sh。 参考表1,配置prequeryParams.properties。 表1 参数列表 参数 说明 示例 spark.prequery.period.max.minute 预热的最大时长,单位分钟 60 spark.prequery.tables 表名配置database.table:int,表名支持通配符*,int代表预热多长时间内有更新的表,单位为天。 default.test*:10 spark.prequery.maxThreads 预热时并发的最大线程数 50 spark.prequery.sslEnable 集群安全模式为true,非安全模式为false true spark.prequery.driver JDBCServer的地址ip:port,如需要预热多个Server则需填写多个Server的IP,多个IP:port用逗号隔开。 192.168.0.2:22550 spark.prequery.sql 预热的sql语句,不同语句冒号隔开 SELECT COUNT(*) FROM %s;SELECT * FROM %s LIMIT 1 spark.security.url 安全模式下jdbc所需url ;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.hadoop.com@HADOOP.COM; spark.prequery.sql 配置的语句在每个所预热的表中都会执行,表名用%s代替。 脚本使用 命令形式:sh start-prequery.sh 执行此条命令需要:将user.keytab或jaas.conf(二选一),krb5.conf(必须)放入conf目录中。 此工具暂时只支持Carbon表。 此工具会初始化Carbon环境和预读取表的元数据到JDBCServer,所以更适合在多主实例、静态分配模式下使用。
  • 问题 在Spark2x的spark-shell上执行如下代码失败: val acctId = List(("49562", "Amal", "Derry"), ("00000", "Fred", "Xanadu")) val rddLeft = sc.makeRDD(acctId) val dfLeft = rddLeft.toDF("Id", "Name", "City") //dfLeft.show val acctCustId = List(("Amal", "49562", "CO"), ("Dave", "99999", "ZZ")) val rddRight = sc.makeRDD(acctCustId) val dfRight = rddRight.toDF("Name", "CustId", "State") //dfRight.show val dfJoin = dfLeft.join(dfRight, dfLeft("Id") === dfRight("CustId"), "outer") dfJoin.show dfJoin.repartition(1).write.format("com.databricks.spark.csv").option("delimiter", "\t").option("header", "true").option("treatEmptyValuesAsNulls", "true").option("nullValue", "").save("/tmp/outputDir")
  • 前提条件 已创建包含Doris服务的集群,集群内各服务运行正常。 待连接Doris数据库的节点与MRS集群网络互通。 创建具有Doris管理权限的用户。 集群已启用Kerberos认证(安全模式) 在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。 使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。 集群未启用Kerberos认证(普通模式) 使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
  • 回答 当用户在distcp命令中使用webhdfs://时,会发生上述异常,是由于集群所使用的HTTP政策为HTTPS,即配置在“core-site.xml”的“dfs.http.policy”值为“HTTPS_ONLY”。所以要避免出现此异常,应使用swebhdfs://替代webhdfs://。 例如: ./hadoop distcpswebhdfs://IP:PORT/testfile hdfs://IP:PORT/testfile1
  • 前提条件 HDFS和Oozie组件安装完成且运行正常,客户端安装成功。 如果当前客户端为旧版本,需要重新下载和安装客户端。 已创建或获取访问Oozie服务的人机用户账号及密码。 该用户需要从属于hadoop、supergroup、hive组,同时添加Oozie的角色操作权限。如果使用Hive多实例,该用户还需要从属于具体的Hive实例组,如hive3。 用户同时还需要至少有manager_viewer权限的角色。
共100000条