华为云用户手册

  • 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
  • 操作步骤 使用Ranger管理员用户rangeradmin登录Ranger管理页面,具体操作可参考登录Ranger管理界面。 在首页中单击“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”。 如果不再使用策略,可单击按钮删除策略。
  • 操作步骤 创建工作流,请参考创建工作流。 在工作流编辑页面,选择“数据流”按钮,将其拖到操作区中。 在弹出的“Streaming”窗口中配置“Mapper”的值,例如“/bin/cat”。配置“Reducer”的值,例如“/usr/bin/wc”。然后单击“添加”。 单击“文件+”,添加运行所需的文件。 例如“/user/oozie/share/lib/mapreduce-streaming/hadoop-streaming-xxx.jar”和“/user/oozie/share/lib/mapreduce-streaming/oozie-sharelib-streaming-5.1.0.jar”。 单击右上角的配置按钮。在打开的配置界面中,单击“删除+”,添加删除目录,例如“/user/admin/examples/output-data/streaming_workflow”。 单击“属性+”,添加下列属性。 左边框填写属性名称“mapred.input.dir”,右边框填写属性值“/user/admin/examples/input-data/text”。 左边框填写属性名称“mapred.output.dir”,右边框填写属性值“/user/admin/examples/output-data/streaming_workflow”。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“Streaming-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的目录、HBase表和数据。 获取外部数据源(SFTP服务器或关系型数据库)使用的用户和密码。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从HDFS/OBS导出数据时,确保HDFS/OBS数据源的输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的任务需要使用指定Yarn队列功能,该用户需要已授权有相关Yarn队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • 问题 为什么在往HDFS写数据时报"java.net.SocketException: No buffer space available"异常? 这个问题发生在往HDFS写文件时。查看客户端和DataNode的错误日志。 客户端日志如下: 图1 客户端日志 DataNode日志如下: 2017-07-24 20:43:39,269 | ERROR | DataXceiver for client DFSClient_NONMAPREDUCE_996005058_86 at /192.168.164.155:40214 [Receiving block BP-1287143557-192.168.199.6-1500707719940:blk_1074269754_528941 with io weight 10] | DataNode{data=FSDataset{dirpath='[/srv/BigData/hadoop/data1/dn/current, /srv/BigData/hadoop/data2/dn/current, /srv/BigData/hadoop/data3/dn/current, /srv/BigData/hadoop/data4/dn/current, /srv/BigData/hadoop/data5/dn/current, /srv/BigData/hadoop/data6/dn/current, /srv/BigData/hadoop/data7/dn/current]'}, localName='192-168-164-155:9866', datanodeUuid='a013e29c-4e72-400c-bc7b-bbbf0799604c', xmitsInProgress=0}:Exception transfering block BP-1287143557-192.168.199.6-1500707719940:blk_1074269754_528941 to mirror 192.168.202.99:9866: java.net.SocketException: No buffer space available | DataXceiver.java:870 2017-07-24 20:43:39,269 | INFO | DataXceiver for client DFSClient_NONMAPREDUCE_996005058_86 at /192.168.164.155:40214 [Receiving block BP-1287143557-192.168.199.6-1500707719940:blk_1074269754_528941 with io weight 10] | opWriteBlock BP-1287143557-192.168.199.6-1500707719940:blk_1074269754_528941 received exception java.net.SocketException: No buffer space available | DataXceiver.java:933 2017-07-24 20:43:39,270 | ERROR | DataXceiver for client DFSClient_NONMAPREDUCE_996005058_86 at /192.168.164.155:40214 [Receiving block BP-1287143557-192.168.199.6-1500707719940:blk_1074269754_528941 with io weight 10] | 192-168-164-155:9866:DataXceiver error processing WRITE_BLOCK operation src: /192.168.164.155:40214 dst: /192.168.164.155:9866 | DataXceiver.java:304 java.net.SocketException: No buffer space available at sun.nio.ch.Net.connect0(Native Method) at sun.nio.ch.Net.connect(Net.java:454) at sun.nio.ch.Net.connect(Net.java:446) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648) at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:192) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495) at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:800) at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:138) at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74) at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:265) at java.lang.Thread.run(Thread.java:748)
  • Oozie常用排查手段 根据任务在Yarn上的任务日志排查,首先把实际的运行任务,比如Hive SQL通过beeline运行一遍,确认Hive无问题。 出现“classnotfoundException”等报错,排查“/user/oozie/share/lib”路径下各组件有没有报错的类的Jar包,如果没有,添加Jar包并执行HDFS上更新了oozie的share lib目录但没有生效。如果执行了更新“share lib”目录依然报找不到类,那么可以查看执行更新“share lib”的命令打印出来的路径“sharelibDirNew”是否是“ /user/oozie/share/lib”, 一定不能是其它目录。 出现NosuchMethodError,排查“/user/oozie/share/lib”路径下各组件的Jar包是不是有多个版本,注意业务本身上传的Jar包冲突,可通过Oozie在Yarn上的运行日志打印的加载的Jar包排查是否有Jar包冲突。 自研代码运行异常,可以先运行Oozie的自带样例,排除Oozie自身的异常。 寻求技术人员的支持,需要收集Yarn上Oozie任务运行日志、Oozie自身的日志及组件的运行的日志,例如使用Oozie运行Hive报异常,需收集Hive的日志。 父主题: Oozie常见问题
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 HBase表类型 配置HBase表类型,可选项为normal(普通HBase表)和phoenix表。 enum 是 normal NULL值处理方式 配置NULL值处理方式。选中单选框时是将转换为空字符串并保存。不选中单选框时是不保存数据。 boolean 否 不选中单选框 HBase输出字段 配置HBase输出信息: 字段名:配置输出字段的字段名。 表名:配置HBase表名。 列族名:配置HBase列族名,如果HBase/Phoenix建表时未配置列族名,默认列族名为 '0'。 列名:配置HBase列名。 类型:配置字段类型,字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 主键:配置是否为主键列。普通HBase表主键只能指定一个;phoenix表主键可以指定多个,配置多个列为主键时,会按照配置列的先后顺序对其进行拼接。必需配置一个主键列。 map 是 无
  • Ranger用户类型 Ranger中的用户可分为Admin、User、Auditor等类型,不同用户具有的Ranger管理界面查看和操作权限不同。 Admin:Ranger安全管理员,可查看所有页面内容,进行服务权限管理插件及权限访问控制策略的管理操作,可查看审计信息内容,可进行用户类型设置。 Auditor:Ranger审计管理员,可查看服务权限管理插件及权限访问控制策略的内容。 User:普通用户,可以被Ranger管理员赋予具体权限。
  • 回答 问题根因: 上述两个问题是由于多主实例模式或者多租户模式下,使用spark-beeline通过add jar的方式创建function,此function在各个JD BCS erver实例之间是不可见的。执行drop function时,如果该session连接的JDB CS erver实例不是创建function的JDBCServer实例,则在该session中找不到该function,而且hive默认将“hive.exec.drop.ignorenonexistent”设置为“true”,即当function不存在时,删除function操作不会报错,这样就表现出了用户没有drop function的权限,执行drop时却没有报错,让用户误以为drop成功;但重新起session时又连到创建function的JDBCServer上,因此执行show function,function仍然存在。该行为是hive的社区行为。 修改方案: 在执行drop function命令之前先执行add jar命令,则该function在有权限的情况下才能drop成功,且drop成功之后不会出现show function仍然存在的现象。
  • 问题 问题一: 用户没有drop function的权限,能够drop成功。具体场景如下: 在 FusionInsight Manager页面上添加user1用户,给予用户admin权限,执行下列操作: set role admin;add jar /home/smartcare-udf-0.0.1-SNAPSHOT.jar;create database db4;use db4;create function f11 as 'com.huaweixxx.smartcare.dac.hive.udf.UDFArrayGreaterEqual';create function f12 as 'com.huaweixxx.smartcare.dac.hive.udf.UDFArrayGreaterEqual'; 修改user1用户,取消admin权限,执行下列操作: drop functiondb4.f11; 结果显示drop成功,如图1所示。 图1 用户没有权限却drop成功结果 问题二: 用户drop function成功,show function的时候,function仍然存在。具体场景如下: 在FusionInsight Manager页面上添加user1用户,给予用户admin权限,进入spark-beeline执行下列操作: set role admin;create database db2;use db2;add jar /home/smartcare-udf-0.0.1-SNAPSHOT.jar;create function f11 as 'com.huaweixxx.smartcare.dac.hive.udf.UDFArrayGreaterEqual';create function f12 as 'com.huaweixxx.smartcare.dac.hive.udf.UDFArrayGreaterEqual'; 退出后再进入spark-beeline执行下列操作: set role admin;use db2;drop function db2.f11; 退出后再进入spark-beeline执行下列操作: use db2;show functions; 结果显示,被drop的function仍然存在,如图2所示。 图2 执行show functions操作后的结果
  • 操作步骤 在SFTP服务器的“/opt/houjt/test03”路径中,创建多个以“table1”为前缀,“.txt”为后缀,中间为yyyyMMdd的日期格式的文件。 图1 示例 创建一个从SFTP服务器导入数据到HDFS的Loader作业,具体操作请参见典型场景:从SFTP服务器导入数据到HDFS/OBS。 使用安装客户端的用户登录客户端所在节点。 执行以下命令,进入schedule-tool工具的conf目录。例如,Loader客户端安装目录为“/opt/client/Loader/”。 cd /opt/client/Loader/loader-tools-1.99.3/schedule-tool/conf 执行以下命令,编辑schedule.properties文件,配置登录方式。 vi schedule.properties schedule-tool工具支持两种登录方式,两者只能选一。详细参数请参见schedule-tool工具使用指导。配置文件中包含认证密码信息可能存在安全风险,建议当前场景执行完毕后删除相关配置文件或加强安全管理。 以密码方式登录,配置信息示例如下: [server.url = 10.10.26.187:21351,127.0.0.2:21351] [authentication.type = kerberos] [use.keytab = false] [authentication.user = admin] # 密码明文存储存在安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全 [authentication.password= xxx] 以keytab文件方式登录,配置信息示例如下: [server.url = 10.10.26.187:21351,127.0.0.2:21351] [authentication.type = kerberos] [use.keytab = true] [client.principal = bar] [client.keytab = /opt/hadoopclient/Loader/loader-tools-1.99.3/loader-tool/hadoop-config/user.keytab] [krb5.conf.file = /opt/hadoopclient/Loader/loader-tools-1.99.3/loader-tool/hadoop-config/krb5.conf] 执行以下命令,编辑job.properties文件,配置作业信息。 vi job.properties #job name job.jobName = sftp2hdfs-schedule-tool #Whether to update the loader configuration parameters(File filter)£?This parameter is used to match the import file name.Values are true or false. #false means update.the file name which is get by schedule tool will be updated to Loader configuration parameters (File filter). #false means no update.the file name which is get by schedule tool will be updated to Loader configuration parameters (import path). file.filter = false #File name = prefix + date + suffix #Need to import the file name prefix file.fileName.prefix=table1 #Need to import the file name suffixes file.fileName.posfix=.txt #Date Days.Value is an integer. #According to the date and number of days to get the date of the import file. date.day = 1 #Date Format.Import file name contains the date format.Format Type£ºyyyyMMdd,yyyyMMdd HHmmss,yyyy-MM-dd,yyyy-MM-dd HH:mm:ss file.date.format = yyyyMMdd #Date Format.Scheduling script execution. Enter the date format. parameter.date.format = yyyyMMdd #Whether the import file is a compressed format.Values ??are true or false. #true indicates that the file is a compressed format£?Execution scheduling tool will extract the files.false indicates that the file is an uncompressed.Execution scheduling tool does not unpack. file.format.iscompressed = false #Hadoop storage type.Values are HDFS or HBase. storage.type = HDFS 根据1的所准备的数据,以文件table120160221.txt为例,过滤规则设置如下: 文件名的前缀 file.fileName.prefix=table1 文件名的后缀 file.fileName.posfix=.txt 文件名中包含的日期格式 file.date.format = yyyyMMdd 调用脚本输入的日期参数 parameter.date.format = yyyyMMdd 顺延的天数 date.day = 1 例如,脚本传入的日期参数是20160220,则通过加法计算,得到的结果是20160221。 如果执行的命令是 ./run.sh 20160220 /user/loader/schedule_01时,以上过滤规则会拼凑出一个字符串:"table1"+"20160221"+.txt = table120160221.txt 根据file.filter的值,选择过滤规则。 精确匹配某一个文件,请执行8。 模糊匹配一系列文件,请执行9。 将job.properties文件中“file.filter”的值修改为“false”。 执行以下命令,运行作业,任务结束。 cd /opt/client/Loader/loader-tools-1.99.3/schedule-tool ./run.sh 20160220 /user/loader/schedule_01 其中20160220为输入的日期,/user/loader/schedule_01为输出的路径。 通过以上过滤规则,拼凑得到的字符串“table120160221.txt”,会直接作为文件名,追加到作业配置的输入路径中。所以,作业只会处理唯一匹配到的文件“table120160221.txt”。 将job.properties文件中“file.filter”的值修改为“true”,“file.fileName.prefix”设置为“*”。 执行以下命令,运行作业,任务结束。 cd /opt/client/Loader/loader-tools-1.99.3/schedule-tool ./run.sh 20160220 /user/loader/schedule_01 其中20160220为输入的日期,/user/loader/schedule_01为输出的路径。 通过以上过滤规则,拼凑到的字符串“*20160221.txt”,会作为文件过滤器的模糊匹配模式,在作业配置的输入路径下,所有符合“*20160221.txt”这个模式的文件都将被作业处理。
  • 样例 以Hive导出到sqlserver2014数据库为例。 在sqlserver2014上创建一张空表“test_1”用于存储Hive数据。执行以下语句: create table test_1 (id int, name text, value text); 配置“Hive输入”算子,生成三个字段A、B和C: 设置了数据连接器后,单击“自动识别”,系统将自动读取数据库中的字段,可根据需要选择添加,然后根据业务场景手动进行完善或者修正即可,无需逐一手动添加。 此操作会覆盖表格内已有数据。 通过“表输出”算子,将A、B和C输出到“test_1”表中: select * from test_1;
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 Hive数据库 Hive的数据库名称。 String 否 default Hive表名 配置Hive表名。 仅支持一个Hive表。 String 是 无 分区过滤器 配置分区过滤器可以导出指定分区数据,默认为空,导出整个表数据。 例如导出分区字段locale的值为“CN”或“US”的表数据,输入如下: locale = "CN" or locale = "US" String 否 - Hive输入字段 配置Hive输入信息: 列名:配置Hive列名。 字段名:配置输入字段名。 类型:配置字段类型。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 -
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的HDFS目录和数据。 ClickHouse相关表已创建,并确保用户已授权访问作业执行时操作该表的权限。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从HDFS导入数据时,确保HDFS输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的作业需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 Spark文件存储格式 配置SparkSQL表文件的存储格式(目前支持四种格式:CSV、ORC、RC和PARQUET)。 说明: PARQUET格式是一种列式存储格式,PARQUET要求Loader的输出字段名和SparkSQL表中的字段名保持一致。 Hive 1.2.0版本之后,Hive使用字段名称替代字段序号对ORC文件进行解析,因此,Loader的输出字段名和SparkSQL表中的字段名需要保持一致。 enum 是 CSV Spark文件压缩格式 在下拉菜单中选择SparkSQL表文件的压缩格式,未配置或选择“NONE”表示不压缩数据。 enum 是 NONE Spark ORC文件版本 通过该字段配置ORC文件的版本(当SparkSQL表文件的存储格式是ORC时)。 enum 是 0.12 输出分隔符 配置分隔符。 string 是 无 输出字段 配置输出信息: 位置:配置输出字段的位置。 字段名:配置输出字段的字段名。 类型:配置字段类型,字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 十进制格式:配置小数的刻度和精度。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 分区键:配置是否为分区列。可以不指定分区列,也可以指定多个分区列。配置多个列为分区列时,会按照配置列的先后顺序对其进行拼接。 map 是 无
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 逆序转换的字段 配置字符串逆序转换的字段相关信息: 输入字段名:配置输入字段名,需填写上一个转换步骤生成的字段名。 输出字段名:配置输出字段名。 类型:配置字段类型。 输出字段长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 操作步骤 创建工作流,请参考创建工作流。 在工作流编辑页面,选择“Spark 程序”按钮,将其拖到操作区中。 在弹出的“Spark”窗口配置“Files”,例如“hdfs://hacluster/user/admin/examples/apps/spark2x/lib/oozie-examples.jar”。配置“jar/py name”,例如“oozie-examples.jar” ,配置完成后单击“添加”。 配置“Main class”的值。例如“org.apache.oozie.example.SparkFileCopy”。 单击“参数+”,添加输入输出相关参数。 例如添加: “hdfs://hacluster/user/admin/examples/input-data/text/data.txt” “hdfs://hacluster/user/admin/examples/output-data/spark_workflow” 在“Options list”文本框指定spark参数,例如“--conf spark.yarn.archive=hdfs://hacluster/user/spark2x/jars/xxx/spark-archive-2x.zip --conf spark.eventLog.enabled=true --conf spark.eventLog.dir=hdfs://hacluster/spark2xJobHistory2x”。 此处版本号“xxx”为示例,可登录FusionInsight Manager界面,单击右上角的,在下拉框中单击“关于”,在弹框中查看Manager版本号。 单击右上角的配置按钮。配置“Spark Master”的值,例如“yarn-cluster”。配置“Mode”的值,例如“cluster”。 在打开的配置界面中,单击“删除+”,添加删除目录,例如“hdfs://hacluster/user/admin/examples/output-data/spark_workflow”。 单击“属性+”,添加oozie使用的sharelib,左边文本框填写属性名称“oozie.action.sharelib.for.spark”,右边文本框填写属性值“spark2x”。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“Spark-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。
  • 前提条件 集群已安装HDFS、Yarn、Kafka、Flink和Hive(且服务名称必须为Hive)等服务。 包含Hive服务的客户端已安装,安装路径如:/opt/client。 Flink支持1.12.2及以后版本,Hive支持3.1.0及以后版本。 参考创建FlinkServer角色创建一个具有FlinkServer管理员权限的用户用于访问Flink WebUI,如:flink_admin。 参考创建集群连接中的“说明”获取访问Flink WebUI用户的客户端配置文件及用户凭据。
  • 操作场景 该章节主要介绍如何在HBase Shell命令行查询慢请求或超大请求信息。慢请求是指通过hbase shell命令查询服务端时,RPC请求响应时长超过阈值(即HBase服务端配置参数“hbase.ipc.warn.response.time”,默认值为“3000”ms)的请求;超大请求是指通过hbase shell命令查询服务端时,RPC请求一次返回数据量大小超过阈值(即HBase服务端配置参数“hbase.ipc.warn.response.size”,默认值为“5MB”)的请求。 每个RegionServer节点默认会缓存最近的256条慢请求和超大请求,可以通过FusionInsight Manager中HBase服务端配置参数“hbase.regionserver.slowlog.ringbuffer.size”调整缓存的大小。 该章节内容适用于MRS 3.3.0 及之后版本。
  • 命令说明 该操作主要涉及新增的hbase shell命令如下: get_slowlog_responses:查询慢请求信息。 get_largelog_responses:查询超大请求信息。 clear_slowlog_responses:清理RegionServer缓存中的数据。 可以在hbase shell中执行如下命令查看相关命令如何使用: help 'cmdName' 例如,执行help 'clear_slowlog_responses'查看clear_slowlog_responses命令的使用方法:
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 分隔符 CSV文件的列分隔符,用于分隔每行的数据。 string 是 , 换行符 用户根据数据实际情况,填写字符串作为换行符。支持任何字符串。默认使用操作系统的换行符。 string 否 \n 文件名是否作为字段 自定义一个字段,以当前数据所在的文件名作为该字段值。 string 否 无 绝对路径 配置“文件名是否作为字段”引用文件名环境,选中单选框时是带绝对路径的文件名;不选中单选框时是不带路径的文件名。 boolean 否 不选中 验证输入字段 是否检验输入字段与值的类型匹配情况,值为“NO”,不检查;值为“YES”,检查。如果不匹配则跳过该行。 enum 是 YES 输入字段 配置输入字段的相关信息: 位置:源文件每行被列分隔符分隔后,目标字段对应的位置,从1开始编号。 字段名:配置字段名。 类型:配置字段类型。 数据格式:字段类型为“DATE”或“TIM”E或“TIMESTAMP”时,需指定特定时间格式,其他字段类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值太长则按配置的长度截取,类型为“CHAR”时实际长度不足则空格补齐,类型为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 操作步骤 创建工作流,请参考创建工作流。 在工作流编辑页面,选择“Fs”按钮,将其拖到操作区中。 在弹出的“Fs”窗口中单击“添加”。 单击“CREATE DIRECTORY+”,添加待创建的HDFS目录。例如“/user/admin/examples/output-data/mkdir_workflow”和“/user/admin/examples/output-data/mkdir_workflow1”。 如果单击了“DELETE PATH+”添加待删除的HDFS路径,该参数不能为空,否则会默认删除HDFS的“/user{提交用户名}”目录,可能会导致其他任务运行异常。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“HDFS-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。
  • Clustering架构 Hudi通过其写入客户端API提供了不同的操作,如insert/upsert/bulk_insert来将数据写入Hudi表。为了能够在文件大小和入湖速度之间进行权衡,Hudi提供了一个hoodie.parquet.small.file.limit配置来设置最小文件大小。用户可以将该配置设置为“0”,以强制新数据写入新的文件组,或设置为更高的值以确保新数据被“填充”到现有小的文件组中,直到达到指定大小为止,但其会增加摄取延迟。 为能够支持快速摄取的同时不影响查询性能,引入了Clustering服务来重写数据以优化Hudi 数据湖 文件的布局。 Clustering服务可以异步或同步运行,Clustering会添加了一种新的REPLACE操作类型,该操作类型将在Hudi元数据时间轴中标记Clustering操作。 Clustering服务基于Hudi的MVCC设计,允许继续插入新数据,而Clustering操作在后台运行以重新格式化数据布局,从而确保并发读写者之间的快照隔离。 总体而言Clustering分为两个部分: 调度Clustering:使用可插拔的Clustering策略创建Clustering计划。 识别符合Clustering条件的文件:根据所选的Clustering策略,调度逻辑将识别符合Clustering条件的文件。 根据特定条件对符合Clustering条件的文件进行分组。每个组的数据大小应为targetFileSize的倍数。分组是计划中定义的"策略"的一部分。此外还有一个选项可以限制组大小,以改善并行性并避免混排大量数据。 将Clustering计划以avro元数据格式保存到时间线。 执行Clustering:使用执行策略处理计划以创建新文件并替换旧文件。 读取Clustering计划,并获得ClusteringGroups,其标记了需要进行Clustering的文件组。 对于每个组使用strategyParams实例化适当的策略类(例如:sortColumns),然后应用该策略重写数据。 创建一个REPLACE提交,并更新HoodieReplaceCommitMetadata中的元数据。
  • 配置描述 参考修改集群服务配置参数进入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中,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作业保留
  • 前提条件 集群已安装CDL、Hudi服务且运行正常。 ThirdKafka数据库的Topic需要能被MRS集群消费,操作步骤请参考ThirdPartyKafka前置准备。 在FusionInsight Manager中创建一个人机用户,例如“cdluser”,加入用户组cdladmin、hadoop、kafka、supergroup,主组选择“cdladmin”组,关联角色“System_administrator”。
  • 使用方法 在使用Flink SQL时,该特性通过hints方法指定Join的左表或右表为广播表,另一张表为rebalance表,SQL语句实例如下,分别以A\C作为小表实例: 以A表作为广播表 使用Join方式 SELECT /*+ BROADCAST(A) */ a2, b2 FROM A JOIN B ON a1 = b1 使用Where方式 SELECT /*+ BROADCAST(A) */ a2, b2 FROM A, B WHERE a1 = b1 以A和C表作为广播表 SELECT /*+ BROADCAST(A, C) */ a2, b2, c2 FROM A JOIN B ON a1 = b1 JOIN C ON a1 = c1 支持通过“/*+ BROADCAST(smallTable1, smallTable2) */”方式使用该特性,兼容开源双流Join逻辑。 不支持开源双流Join和该特性的切换,因为该特性会将数据广播到每个Join算子。 不支持LEFT JOIN时小表为左表,RIGHT JOIN时小表为右表。
  • 集群外节点安装客户端 根据在集群外节点安装客户端前提条件,创建一个满足要求的弹性云服务器。 执行ntp时间同步,使集群外节点的时间与MRS集群时间同步。 执行vi /etc/ntp.conf命令编辑NTP客户端配置文件,并增加MRS集群中Master节点的IP并注释掉其他server的地址。 server master1_ip prefer server master2_ip 图2 增加Master节点的IP 执行service ntpd stop命令关闭NTP服务。 执行如下命令,手动同步一次时间: /usr/sbin/ntpdate 192.168.10.8 192.168.10.8为主Master节点的IP地址。 执行service ntpd start或systemctl restart ntpd命令启动NTP服务。 执行ntpstat命令查看时间同步结果。 参考以下步骤,从FusionInsight Manager下载集群客户端软件包并复制到ECS节点后安装客户端。 访问集群Manager,参考集群内节点安装客户端下载集群客户端到主管理节点的指定目录。 使用root用户登录主管理节点,执行以下命令复制客户端安装包到待安装客户端的节点: scp -p /tmp/FusionInsight-Client/FusionInsight_Cluster_1_Services_Client.tar 待安装客户端节点的IP地址:/tmp 使用待安装客户端的用户登录待安装客户端节点。 执行以下命令安装客户端,如果当前用户无客户端软件包以及客户端安装目录的操作权限,需使用root用户进行赋权: cd /tmp tar -xvf FusionInsight_Cluster_1_Services_Client.tar tar -xvf FusionInsight_Cluster_1_Services_ClientConfig.tar cd FusionInsight_Cluster_1_Services_ClientConfig ./install.sh /opt/client 执行以下命令,切换到客户端目录并配置环境变量: cd /opt/client source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinitMRS集群用户 例如,kinit admin。 直接执行组件的客户端命令。 例如使用HDFS客户端命令查看HDFS根目录文件,执行hdfs dfs -ls /。
  • 在集群外节点安装客户端前提条件 已准备一个Linux弹性云服务器,主机操作系统及版本建议参见表1。 表1 参考列表 CPU架构 操作系统 支持的版本号 x86计算 Euler EulerOS 2.5 SUSE SUSE Linux Enterprise Server 12 SP4(SUSE 12.4) Red Hat Red Hat-7.5-x86_64(Red Hat 7.5) CentOS CentOS-7.6版本(CentOS 7.6) 鲲鹏计算(ARM) Euler EulerOS 2.8 CentOS CentOS-7.6版本(CentOS 7.6) 同时为弹性云服务分配足够的磁盘空间,例如“40GB”。 弹性云服务器的VPC需要与MRS集群在同一个VPC中。 弹性云服务器的安全组需要和MRS集群Master节点的安全组相同。 弹性云服务器操作系统已安装NTP服务,且NTP服务运行正常。 如果未安装,在配置了yum源的情况下,可执行yum install ntp -y命令自行安装。 需要允许用户使用密码方式登录Linux弹性云服务器(SSH方式)。 MRS集群安全组入方向将所有端口对客户端节点放开,具体操作请参考添加安全组规则。
  • 使用客户端 在已安装客户端的节点,执行sudo su - omm命令切换用户。执行以下命令切换到客户端目录: cd /opt/client 执行以下命令配置环境变量: source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinitMRS集群用户 例如,kinit admin。 启用Kerberos认证的MRS集群默认创建“admin”用户账号,用于集群管理员维护集群。 直接执行组件的客户端命令。 例如:使用HDFS客户端命令查看HDFS根目录文件,执行hdfs dfs -ls /。
共100000条