华为云用户手册

  • 回答 使用当前可得的最近的tablestatus文件进行恢复,分为如下两个场景来进行恢复: 场景一:当前批次的CarbonData数据文件和.segment文件损坏无法恢复。 进入客户端节点,执行如下命令,查看HDFS对应表的tablestatus文件,找到最近的tablestatus版本号。 cd 客户端安装路径 source bigdata_env source Spark/component_env kinit 组件业务用户 (普通集群无需执行kinit命令) hdfs dfs -ls /user/hive/warehouse/hrdb.db/car01/Metadata 上图中,当前批次文件tablestatus_1669028899548损坏,需要使用tablestatus_1669028852132文件。 进入spark sql,执行如下命令来修改表属性latestversion为当前最近的版本号。 alter table car01 set SERDEPROPERTIES ('latestversion'='1669082252132'); 需要退出当前session,重新连接后执行查询。该方式已尽可能恢复客户数据,一般现网情况下,如断电场景segment数据文件也会存在不可恢复情况。 场景二:当前批次的Carbondata数据文件和.segment文件完整,可恢复。 使用TableStatusRecovery恢复工具,当前工具仅针对非分区表进行恢复。进入Spark客户端节点,执行如下命令: cd 客户端安装路径 source bigdata_env source Spark/component_env kinit 组件业务用户 (普通集群无需执行kinit命令) spark-submit --master yarn --class org.apache.carbondata.recovery.tablestatus.TableStatusRecovery Spark/spark/carbonlib/carbondata-spark_*.jar hrdb car01 参数说明:hrdb car01表名称。 TableStatusRecovery恢复工具限制: 合并后,如果tablestatus文件丢失或损坏,使用该工具无法恢复合并状态的segment,因为丢失或损坏的tablestatus文件才存在该segment合并信息。 Delete segment by Id/Date后,如果tablestatus文件丢失或损坏,则无法恢复已删除的segment信息,因为只有丢失或损坏的tablestatus文件才存在该segment的删除信息。 不支持在mv表上使用该工具。 由于最新的tablestatus文件存在问题,使用该工具恢复后无法正常查询时,可以移除最新的tablestatus文件,使用上一个tablestatus文件进行恢复。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 被截取的字段 配置被截取字段相关信息: 输入字段名:配置输入字段名,需填写上一个转换步骤生成的字段名。 输出字段名:配置输出字段名。 开始位置:截取开始位置,从序号1开始。 结束位置:截取结束位置,不确定字符串长度时,可指定为-1表示被截取字段的末尾。 输出字段类型:输出字段的类型。 输出字段长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“输出字段类型”为“CHAR”时实际长度不足则空格补齐,“输出字段类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 回答 Spark的表管理层次如图1所示,最底层是Spark的临时表,存储着使用DataSource方式的临时表,在这一个层面中没有数据库的概念,因此对于这种类型表,表名在各个数据库中都是可见的。 上层为Hive的MetaStore,该层有了各个DB之分。在每个DB中,又有Hive的临时表与Hive的持久化表,因此在Spark中允许三个层次的同名数据表。 查询的时候,Spark SQL优先查看是否有Spark的临时表,再查找当前DB的Hive临时表,最后查找当前DB的Hive持久化表。 图1 Spark表管理层次 当Session退出时,用户操作相关的临时表将自动删除。建议用户不要手动删除临时表。 删除临时表时,其优先级与查询相同,从高到低为Spark临时表、Hive临时表、Hive持久化表。如果想直接删除Hive表,不删除Spark临时表,您可以直接使用drop table DbName.TableName命令。
  • 回答 通常,HDFS执行Balance操作结束后,会自动释放“/system/balancer.id”文件,可再次正常执行Balance。 但在上述场景中,由于第一次的Balance操作是被异常停止的,所以第二次进行Balance操作时,“/system/balancer.id”文件仍然存在,则会触发append /system/balancer.id操作,进而导致Balance操作失败。 如果“/system/balancer.id”文件的释放时间超过了软租期60s,则第二次执行Balance操作的客户端的append操作会抢占租约,此时最后一个block处于under construction或者under recovery状态,会触发block的恢复操作,那么“/system/balancer.id”文件必须等待block恢复完成才能关闭,所以此次append操作失败。 append /system/balancer.id操作失败后,客户端发生RecoveryInProgressException异常: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.protocol.RecoveryInProgressException): Failed to APPEND_FILE /system/balancer.id for DFSClient because lease recovery is in progress. Try again later. 如果该文件的释放时间没有超过默认设置60s,原有客户端会继续持有该租约,则会发生AlreadyBeingCreatedException异常,实际上向客户端返回的是null,导致客户端出现如下异常: java.io.IOException: Cannot create any NameNode Connectors.. Exiting... 可通过以下方法避免上述问题: 方案1:等待硬租期超过1小时后,原有客户端释放租约,再执行第二次Balance操作。 方案2:执行第二次Balance操作之前删除“/system/balancer.id”文件。
  • 配置步骤 MRS 引入配置参数“dfs.pipeline.ecn”。当该配置启用时,DataNode会在写入通道超出负荷时从其中发出信号。客户端可以基于该阻塞信号进行退避,从而防止系统超出负荷。引入该配置参数的目的是为了使通道更加稳定,并减少不必要的取消或恢复操作。收到信号后,客户端会退避一定的时间(5000ms),然后根据相关过滤器调整退避时间(单次退避最长时间为50000ms)。 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 NameNode ECN配置 参数 描述 缺省值 dfs.pipeline.ecn 进行该配置后,DataNode能够向客户端发送阻塞通知。 false
  • 操作步骤 使用Ranger管理员用户rangeradmin登录Ranger管理页面,具体操作可参考登录Ranger WebUI界面。 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。 单击“Add New Policy”,添加OBS权限控制策略。 根据业务需求配置相关参数。 表1 OBS权限参数 参数名称 描述 Policy Name 策略名称,可自定义,不能与本服务内其他策略名称重复。 Policy Label 为当前策略指定一个标签,可以根据这些标签搜索报告和筛选策略。 Resource Path 资源路径,配置当前策略适用的OBS路径文件夹,可填写多个值,不支持使用通配符“*”。且配置的OBS路径文件夹必须是已存在的,否则会授权失败。 OBS默认开启权限的递归(且不支持修改),无任何权限的子目录会默认继承父目录所有的权限。 Description 策略描述信息。 Audit Logging 是否审计此策略。 Allow Conditions 策略允许条件,配置本策略内允许的权限。 “Select Group”列选择已创建好的需要授予权限的用户组(配置“Select Role”和“Select User”将不会生效) 单击“Add Permissions”,添加对应权限。 Read:读权限 Write:写权限 Select/Deselect All:全选/取消全选 如需添加多条权限控制规则,可单击按钮添加。如需删除权限控制规则,可单击按钮删除。 例如,为用户组“hs_group1”(该用户组仅由数字0~9、字母a~Z、下划线或#组成,且最大长度为52个字符,否则将导致策略添加失败)添加“obs://hs-test/user/hive/warehouse/o4”表的读写权限,配置如下: 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。 如果不再使用策略,可单击按钮删除策略。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 父标签 所有字段的上层HTML标签,用于限定搜索范围 string 是 无 文件名 自定义一个字段,以当前数据所在的文件名作为该字段值。 string 否 无 绝对文件名 配置“文件名”引用文件名环境,选中单选框时是带绝对路径的文件名;不选中单选框时是不带路径的文件名。 boolean 否 否 验证输入字段 是否检验输入字段与值的类型匹配情况,值为“NO”,不检查;值为“YES”,检查。如果不匹配则跳过该行。 enum 是 YES 输入字段 配置输入字段的相关信息: 位置:目标字段对应的位置,从1开始编号。 字段名:配置字段名。 字段所在的标签:字段的标签。 关键字:配置关键字,能够匹配标签所在的内容,支持通配符,例如标签内容为“姓名”,可配置关键字“*姓名*”。 类型:配置字段类型。 数据格式:字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他字段类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 数据处理规则 首先配置父标签,限定搜索范围,父标签要存在,否则取到的内容为空。 配置输入字段,子标签用于精确定位字段所在的标签,相同的标签再通过关键字来精确匹配。 关键字用于匹配字段的内容,配置方法类似于“输入设置”中的“文件过滤器”字段,支持“*”通配符,提供三种标记用于辅助定位,分别为: “#PART”标记,表示取被通配符“*”所匹配的值,如果存在多个“*”号,可以指定一个序号,按从左到右的顺序,取得对应序号的“*”所配置的内容。例如“#PART1”,表示取第1个“*”号匹配的值;“#PART8”,表示取第8个“*”号匹配的值。 “#NEXT”标记,表示取当前匹配的标签的下一个标签的值。 “#ALL”标记,表示取当前匹配的标签的所有内容作为值。 配置的标签有误时,取到的值为空,不会报错。
  • 相关概念 SparkSQL的语句在SparkSQL中进行处理,权限要求如表1所示。 表1 使用SparkSQL表、列或数据库场景权限一览 操作场景 用户需要的权限 CREATE TABLE “创建”, RWX+ownership(for create external table - the location) 说明: 按照指定文件路径创建datasource表时,需要path后面文件的RWX+ownership权限。 DROP TABLE “Ownership”(of table) DROP TABLE PROPERTIES “Ownership” DESCRIBE TABLE “查询” SHOW PARTITIONS “查询” ALTER TABLE LOCATION “Ownership”, RWX+ownership (for new location) ALTER PARTITION LOCATION “Ownership”, RWX+ownership (for new partition location) ALTER TABLE ADD PARTITION “插入”, RWX+ownership (for partition location) ALTER TABLE DROP PARTITION “删除” ALTER TABLE(all of them except the ones above) “Update”,“Ownership” TRUNCATE TABLE “Ownership” CREATE VIEW “查询”,“Grant Of Select”,“创建” ALTER VIEW PROPERTIES “Ownership” ALTER VIEW RENAME “Ownership” ALTER VIEW ADD PARTS “Ownership” ALTER VIEW AS “Ownership” ALTER VIEW DROPPARTS “Ownership” ANALYZE TABLE “查询”, “插入” SHOW COLUMNS “查询” SHOW TABLE PROPERTIES “查询” CREATE TABLE AS SELECT “查询”, “创建” SELECT “查询” 说明: 与表一样,对视图进行SELECT操作的时候需要有该视图的“查询”权限。 INSERT “插入”, “删除 (for overwrite)” LOAD “插入”, “删除”, RWX+ownership(input location) SHOW CREATE TABLE “查询”,“Grant Of Select” CREATE FUNCTION “管理” DROP FUNCTION “管理” DESC FUNCTION - SHOW FUNCTIONS - MSCK (metastore check) “Ownership” ALTER DATABASE “管理” CREATE DATABASE - SHOW DATABASES - EXPLAIN “查询” DROP DATABASE “Ownership” DESC DATABASE - CACHE TABLE “查询” UNCACHE TABLE “查询” CLEAR CACHE TABLE “管理” REFRESH TABLE “查询” ADD FILE “管理” ADD JAR “管理” HEALTHCHECK -
  • 操作步骤 SparkSQL表授权、列授权、数据库授权与Hive的操作相同,详情请参见Hive用户权限管理。 在权限管理中,为了方便用户使用,授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题,取消表的任意权限,系统不会自动取消数据库目录的HDFS权限,但对应的用户只能登录数据库和查看表名。 如果为角色添加或删除数据库的查询权限,数据库中的表也将自动添加或删除查询权限。此机制为Hive实现,SparkSQL与Hive保持一致。 Spark不支持struct数据类型中列名称含有特殊字符(除字母、数字、下划线外的其他字符)。如果struct类型中列名称含有特殊字符,在 FusionInsight Manager的“编辑角色”页面进行授权时,该列将无法正确显示。
  • ClickHouse通过MySQL引擎对接RDS服务 MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换。 MySQL引擎使用语法: CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') MySQL数据库引擎参数说明: host:port:RDS服务MySQL数据库实例IP地址和端口。 database:RDS服务MySQL数据库名。 user:RDS服务MySQL数据库用户名。 password:RDS服务MySQL数据库用户密码,命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 MySQL引擎使用示例: 连接到RDS服务的MySQL数据库。详细操作可以参考RDS服务MySQ L实例 连接。 在MySQL数据库上创建表,并插入数据。 创建表mysql_table: CREATE TABLE `mysql_table` ( `int_id` INT NOT NULL AUTO_INCREMENT, `float` FLOAT NOT NULL, PRIMARY KEY (`int_id`)); 插入表数据: insert into mysql_table (`int_id`, `float`) VALUES (1,2); 登录ClickHouse客户端安装节点。执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限,具体请参见创建ClickHouse角色章节,为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行本步骤。 如果是MRS 3.1.0版本集群,则需要先执行:export CLICKHOUSE_SECURITY_ENABLED=true kinit 组件业务用户 例如,kinit clickhouseuser。 使用客户端命令连接ClickHouse。 clickhouse client --host clickhouse实例IP --user 用户名 --password --port 端口号 输入用户密码 在ClickHouse中创建MySQL引擎的数据库,创建成功后自动与MySQL服务器交换数据。 CREATE DATABASE mysql_db ENGINE = MySQL('RDS服务MySQL数据库实例IP地址:MySQL数据库实例端口', 'MySQL数据库名', 'MySQL数据库用户名', 'MySQL数据库用户名密码'); 切换到新建的数据库mysql_db,并查询表数据。 USE mysql_db; 在ClickHouse中查询MySQL数据库表数据。 SELECT * FROM mysql_table; ┌─int_id─┬─float─┐ │ 1 │ 2 │ └─────┴──── ┘ 新增插入数据后也可以正常进行查询。 INSERT INTO mysql_table VALUES (3,4); SELECT * FROM mysql_table; ┌─int_id─┬─float─┐ │ 1 │ 2 │ │ 3 │ 4 │ └─────┴──── ┘
  • UDTF(User Defined Timeseries Generating Function) 编写一个UDTF需要继承“org.apache.iotdb.db.query.udf.api.UDTF”类,并至少实现“beforeStart”方法和一种“transform”方法。 表2是所有可供用户实现的接口说明。 表2 接口说明 接口定义 描述 是否必须 void validate(UDFParameterValidator validator) throws Exception 在初始化方法“beforeStart”调用前执行,用于检测“UDFParameters”中用户输入的参数是否合法。 否 void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) throws Exception 初始化方法,在UDTF处理输入数据前,调用用户自定义的初始化行为。用户每执行一次UDTF查询,框架就会构造一个新的UDF类实例,该方法在每个UDF类实例被初始化时调用一次。在每一个UDF类实例的生命周期内,该方法只会被调用一次。 是 void transform(Row row, PointCollector collector) throws Exception 该方法由框架调用。当在“beforeStart”中选择以“RowByRowAccessStrategy”的策略消费原始数据时,这个数据处理方法就会被调用。输入参数以“Row”的形式传入,输出结果通过“PointCollector”输出。需要在该方法内自行调用“collector”提供的数据收集方法,以决定最终的输出数据。 与“transform(RowWindow rowWindow, PointCollector collector) ”方法二选一 void transform(RowWindow rowWindow, PointCollector collector) throws Exception 该方法由框架调用。当在“beforeStart”中选择以“SlidingSizeWindowAccessStrategy”或者“SlidingTimeWindowAccessStrategy”的策略消费原始数据时,这个数据处理方法就会被调用。输入参数以“RowWindow”的形式传入,输出结果通过“PointCollector”输出。需要在该方法内自行调用“collector”提供的数据收集方法,以决定最终的输出数据。 与“transform(Row row, PointCollector collector)”方法二选一 void terminate(PointCollector collector) throws Exception 该方法由框架调用。该方法会在所有的“transform”调用执行完成后,在“beforeDestory”方法执行前被调用。在一个UDF查询过程中,该方法会且只会调用一次。需要在该方法内自行调用“collector”提供的数据收集方法,以决定最终的输出数据。 否 void beforeDestroy() UDTF的结束方法。此方法由框架调用,并且只会被调用一次,即在处理完最后一条记录之后被调用。 否 调用顺序: void validate(UDFParameterValidator validator) throws Exception void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) throws Exception void transform(Row row, PointCollector collector) throws Exception或者void transform(RowWindow rowWindow, PointCollector collector) throws Exception void terminate(PointCollector collector) throws Exception void beforeDestroy() 框架每执行一次UDTF查询,都会构造一个全新的UDF类实例,查询结束时,对应的UDF类实例即被销毁,因此不同UDTF查询(即使是在同一个SQL语句中)UDF类实例内部的数据都是隔离的。可以在UDTF中维护一些状态数据,无需考虑并发对UDF类实例内部状态数据的影响。 使用方法: void validate(UDFParameterValidator validator) throws Exception “validate”方法能够对用户输入的参数进行验证。 在该方法中限制输入序列的数量和类型,检查用户输入的属性或者进行自定义逻辑的验证。 void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) throws Exception “beforeStart”方法有以下作用: 帮助用户解析SQL语句中的UDF参数。 配置UDF运行时必要的信息,即指定UDF访问原始数据时采取的策略和输出结果序列的类型。 创建资源,比如建立外部链接,打开文件等。
  • UDFParameters UDFParameters的作用是解析SQL语句中的UDF参数(SQL中UDF函数名称后括号中的部分)。参数包括路径(及其序列类型)参数和字符串“key-value”对形式输入的属性参数。 例如: SELECT UDF(s1, s2, 'key1'='iotdb', 'key2'='123.45') FROM root.sg.d; 用法: void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) throws Exception { // parameters for (PartialPath path : parameters.getPaths()) { TSDataType dataType = parameters.getDataType(path); // do something } String stringValue = parameters.getString("key1"); // iotdb Float floatValue = parameters.getFloat("key2"); // 123.45 Double doubleValue = parameters.getDouble("key3"); // null int intValue = parameters.getIntOrDefault("key4", 678); // 678 // do something // configurations // ... }
  • 前提条件 在FusionInsight Manager创建一个角色,添加ClickHouse逻辑集群的管理权限以及Loader作业分组权限。创建Loader作业的业务用户,关联该角色和并添加用户组yarnviewgroup。 ClickHouse表已创建,确保用户已授权访问作业执行时操作该表的权限,参照ClickHouse客户端使用实践创建本地复制表和分布式表,导出时选择本地复制表。 确保没有出现ClickHouse相关告警。
  • 问题 当使用与Region Server相同的Linux用户(例如omm用户)但不同的kerberos用户(例如admin用户)时,为什么ImportTsv工具执行失败报“Permission denied”的异常? Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=admin, access=WRITE, inode="/user/omm-bulkload/hbase-staging/partitions_cab16de5-87c2-4153-9cca-a6f4ed4278a6":hbase:hadoop:drwx--x--x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:342) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:315) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:231) at com.xxx.hadoop.adapter.hdfs.plugin.HWAccessControlEnforce.checkPermission(HWAccessControlEnforce.java:69) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1789) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1773) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1756) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2490) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2425) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2308) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:745) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:434) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:973) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2260) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2256) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1781) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2254)
  • 回答 ImportTsv工具在“客户端安装路径/HBase/hbase/conf/hbase-site.xml”文件中“hbase.fs.tmp.dir”参数所配置的HBase临时目录中创建partition文件。因此客户端(kerberos用户)应该在指定的临时目录上具有rwx的权限来执行ImportTsv操作。“hbase.fs.tmp.dir”参数的默认值为“/user/${user.name}/hbase-staging”(例如“/user/omm/hbase-staging”),此处“$ {user.name}”是操作系统用户名(即omm用户),客户端(kerberos用户,例如admin用户)不具备该目录的rwx权限。 上述问题可通过执行以下步骤解决: 在客户端将“hbase.fs.tmp.dir”参数设置为当前kerberos用户的目录(如“/user/admin/hbase-staging”),或者为客户端(kerberos用户)提供已配置的目录所必须的rwx权限。 重试ImportTsv操作。
  • 使用HetuEngine查询容错执行能力须知 容错不适用于已损坏的查询或其他用户错误场景。例如:不会花费资源重试由于无法解析SQL而失败的查询任务。 不同数据源对SQL语句的容错支持能力存在差异: 所有数据源都支持读操作的容错执行。 Hive数据源支持写操作的容错执行。 容错能力非常适合大批量查询,如果用户在容错集群上同时运行大量短时间小查询,则可能会遇到延迟。因此,建议处理批处理操作时使用专用的容错计算实例,与进行交互式查询的更高查询量的计算实例分开。
  • HetuEngine查询容错执行能力介绍 当集群中的节点因网络、硬件或软件问题发生故障时,在故障节点上运行的所有查询任务都将丢失。这可能会严重影响集群生产力并造成资源浪费,尤其对于长时间运行的查询影响较大。HetuEngine提供一种故障恢复机制,即容错执行能力。集群可通过自动重新运行受影响的查询或其组件任务来降低查询失败概率。可降低人工干预并提高了容错性,但会延长总执行时间。 当前支持如下两种容错执行机制: QUERY级重试策略:开启QUERY级别容错不会进行中间数据落盘,如果查询任务失败,将自动重试该查询任务的所有task。当集群的大部分工作由小查询组成时建议使用此策略。 TASK级重试策略:开启TASK级别容错会默认配置HDFS作为交换区,将exchange中间数据落盘,如果查询任务失败,将重试失败的task。建议在执行大批量查询时使用此策略,集群可以更高效的重试查询中的小颗粒任务,而不是整个查询。 本示例介绍设置“TASK”重试策略容错执行机制。
  • 操作步骤 以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的路径请以实际路径为准。
  • 参数说明 表1 JobGateway参数说明 参数 参数说明 默认值 HTTP_INSTANCE_PORT JobServer服务http端口。 默认值:29973 取值范围:29970~29979 HTTPS_INSTANCE_PORT JobServer服务https端口。 默认值:29972 取值范围:29970~29979 JAVA_OPTS 用于JVM的gc参数。需确保GC_OPT设置正确,否则进程启动会失败。 见页面默认配置。 job.record.batch.delete.count 25 JobServer每一批老化数据的条数。 job.record.expire.count 500000 JobServer老化数据的条数。 job.record.expire.day 7 JobServer作业过期的时间。 logging.level.org.apache.tomcat JobServer服务端tomcat日志的日志级别。 默认值:INFO 取值范围:DEBUG、INFO、WARN、ERROR、FATAL root.level JobServer服务端日志的日志级别。 默认值:INFO 取值范围:DEBUG、INFO、WARN、ERROR、FATAL NGINX_PORT JobBalancer服务通信端口。 默认值:https默认端口29970 http默认端口29971 取值范围:29970~29979 client_body_buffer_size 设置读取客户端请求正文的缓冲区大小。如果请求主体大于缓冲区,则将整个主体或仅将其部分写入临时文件。 默认值:10240 取值范围:大于0 client_body_timeout 定义读取客户端请求正文的超时时间。超时仅针对两次连续读取操作之间的一段时间设置,而不是针对整个请求主体的传输。如果客户端在此时间内未传输任何内容,则请求将终止并出现408(请求超时)错误。单位:秒。 默认值:60 取值范围:[1,86400] client_header_buffer_size 设置读取客户端请求标头的缓冲区大小。对于大多数请求,1K字节的缓冲区就足够了。但是,如果请求包含长cookie,或者来自WAP客户端,则它可能不适合1K。如果请求行或请求头字段不适合此缓冲区,则分配由large_client_header_buffers指令配置的更大缓冲区。 默认值:1024 取值范围:大于0 client_header_timeout 定义读取客户端请求标头的超时时间。如果客户端没有在这段时间内传输整个标头,请求将终止并出现408(请求超时)错误。 默认值:60 取值范围:[1,86400] client_max_body_size http请求体最大值,单位mb。 默认值:80 取值范围:1~10240 keepalive_requests 设置可以通过一个保持活动连接提供服务的最大请求数。在发出最大请求数后,连接将关闭。定期关闭连接对于释放每个连接的内存分配是必要的。因此,使用过高的最大请求数可能会导致过多的内存使用,因此不推荐使用。 默认值:1000 取值范围:[1,100000] keepalive_time 限制可以通过一个保持活动连接处理请求的最长时间。达到此时间后,将在后续请求处理后关闭连接。单位:秒。 默认值:3600 取值范围:[1,86400] keepalive_timeout 设置一个超时时间,在此期间保持活动的客户端连接将在服务器端保持打开状态。零值禁用保持活动的客户端连接。单位:秒。 默认值:75 取值范围:[0,86400] large_client_header_buffers.size 设置用于读取大型客户端请求标头的缓冲区的最大数量(large_client_header_buffers.number)和大小。一个请求行不能超过一个缓冲区的大小,否则会向客户端返回414(Request-URI Too Large)错误。请求头字段也不能超过一个缓冲区的大小,否则返回400(Bad Request)错误给客户端。缓冲区仅按需分配。如果在请求处理结束后连接转换为保持活动状态,则释放这些缓冲区。 默认值:4096 取值范围:大于0 lb_limit_req_burst 当大量请求过来时,超过访问频次限制的请求将会放到缓冲区,超过缓冲区大小的请求会返回503错误。 默认值:50 取值范围:1~1000 lb_limit_zone_rate http请求表示允许相同标识的客户端的访问频次,单位r/s、r/m。例如:30r/s,表示允许每秒访问30次。 默认值:30r/s 取值范围:1-100r/s或1-6000r/m lb_limit_zone_size http内存缓冲区的大小,单位mb。 默认值:20 取值范围:1~10240 lb_req_timeout Nginx读写的超时时间。 默认值:60s 取值范围:1~3600s proxy_connect_timeout 定义与代理服务器建立tcp连接的超时时间。使用数字和单位组合,m表示分钟,s表示秒。 默认值:3m 取值范围:1-60m或1-3600s proxy_timeout 与代理服务器的tcp连接上两次连续读取或写入操作之间的超时。如果在此时间内没有数据传输,则连接关闭。使用数字和单位组合,m表示分钟,s表示秒。 默认值:3m 取值范围:1-60m或1-3600s
  • 配置描述 有关如何配置CPU隔离与安全的CGroups功能的详细信息,请参见Hadoop官网: MRS 3.2.0之前版本:http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html MRS 3.2.0及之后版本:https://hadoop.apache.org/docs/r3.3.1/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html 由于CGroups为Linux内核特性,是通过LinuxContainerExecutor进行开放。请参考官网资料对LinuxContainerExecutor进行安全配置。您可通过官网资料了解系统用户和用户组配置对应的文件系统权限。详情请参见: MRS 3.2.0之前版本:http://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/SecureMode.html#LinuxContainerExecutor MRS 3.2.0及之后版本:https://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-common/SecureMode.html#LinuxContainerExecutor 请勿修改对应文件系统中各路径所属的用户、用户组及对应的权限,否则可能导致本功能异常。 当参数“yarn.nodemanager.resource.percentage-physical-cpu-limit”配置过小,导致可使用的核不足1个时,例如4核节点,将此参数设置为20%,不足1个核,那么将会使用系统全部的核。Linux的一些版本不支持Quota模式,例如Cent OS。在这种情况下,可以使用CPUset模式。 配置cpuset模式,即YARN只能使用配置的CPU,需要添加以下配置。 表1 cpuset配置 参数 描述 默认值 yarn.nodemanager.linux-container-executor.cgroups.cpu-set-usage 设置为“true”时,应用以cpuset模式运行。 false 配置strictcpuset模式,即container只能使用配置的CPU,需要添加以下配置。 表2 CPU硬隔离参数配置 参数 描述 默认值 yarn.nodemanager.linux-container-executor.cgroups.cpu-set-usage 设置为“true”时,应用以cpuset模式运行。 false yarn.nodemanager.linux-container-executor.cgroups.cpuset.strict.enabled 设置为true时,container只能使用配置的CPU。 false 要从cpuset模式切换到Quota模式,必须遵循以下条件: 配置“yarn.nodemanager.linux-container-executor.cgroups.cpu-set-usage”=“false”。 删除“/sys/fs/cgroup/cpuset/hadoop-yarn/”路径下container文件夹(如果存在)。 删除“/sys/fs/cgroup/cpuset/hadoop-yarn/”路径下cpuset.cpus文件中设置的所有CPU。
  • 日志级别 Kafka提供了如表4所示的日志级别。 运行日志的级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表4 日志级别 级别 描述 ERROR ERROR表示系统运行的错误信息。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示记录系统及各事件正常运行状态信息。 DEBUG DEBUG表示记录系统及系统的调试信息。 如果您需要修改日志级别,请执行如下操作: 请参考修改集群服务配置参数,进入Kafka的“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”使配置生效。
  • 操作步骤 创建工作流,请参考使用Hue创建工作流。 在工作流编辑页面,选择“子Workflow”按钮,将其拖到操作区中。 在弹出的“Sub workflow”窗口中配置“Sub-workflow”的值,例如从下拉列表中选取“Java-Workflow”(这个值是已经创建好的工作流之一),然后单击“添加”。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“Subworkflow-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。
  • Loader数据导入简介 Loader是实现MRS与外部数据源如关系型数据库、SFTP服务器、FTP服务器之间交换数据和文件的ETL工具,支持将数据或文件从关系型数据库或文件系统导入到MRS系统中。 Loader支持如下数据导入方式: 从关系型数据库导入数据到HDFS/OBS 从关系型数据库导入数据到HBase 从关系型数据库导入数据到Phoenix表 从关系型数据库导入数据到Hive表 从SFTP服务器导入数据到HDFS/OBS 从SFTP服务器导入数据到HBase 从SFTP服务器导入数据到Phoenix表 从SFTP服务器导入数据到Hive表 从FTP服务器导入数据到HDFS/OBS 从FTP服务器导入数据到HBase 从FTP服务器导入数据到Phoenix表 从FTP服务器导入数据到Hive表 从同一集群内HDFS/OBS导入数据到HBase MRS与外部数据源交换数据和文件时需要连接数据源。系统提供以下连接器,用于配置不同类型数据源的连接参数: generic-jdbc-connector:关系型数据库连接器。 ftp-connector:FTP数据源连接器。 hdfs-connector:HDFS数据源连接器。 oracle-connector:Oracle数据库专用连接器,使用row_id作为分区列,相对generic-jdbc-connector来说,Map任务分区更均匀,并且不依赖分区列是否有创建索引。 mysql-fastpath-connector:MYSQL数据库专用连接器,使用MYSQL的mysqldump和mysqlimport工具进行数据的导入导出,相对generic-jdbc-connector来说,导入导出速度更快。 sftp-connector:SFTP数据源连接器。 oracle-partition-connector:支持Oracle分区特性的连接器,专门对Oracle分区表的导入导出进行优化。 使用FTP数据源连接器时不加密数据,可能存在安全风险,建议使用SFTP数据源连接器。 建议将SFTP服务器、FTP服务器和数据库服务器与Loader部署在独立的子网中,以保障数据安全地导入。 与关系数据库连接时,可以选择通用数据库连接器(generic-jdbc-connector)或者专用数据库连接器(oracle-connector、oracle-partition-connector、mysql-fastpath-connector),专用数据库连接器特别针对具体数据库类型进行优化,相对通用数据库连接器来说,导出、导入速度更快。 使用mysql-fastpath-connector时,要求在NodeManager节点上有MySQL的mysqldump和mysqlimport命令,并且此两个命令所属MySQL客户端版本与MySQL服务器版本兼容,如果没有这两个命令或版本不兼容,请参考http://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html,安装MySQL client applications and tools。 使用oracle-connector时,要求给连接用户赋予如下系统表或者视图的select权限: dba_tab_partitions、dba_constraints、dba_tables 、dba_segments 、v$version、dba_objects、v$instance、SYS_CONTEXT函数、dba_extents、 dba_tab_subpartitions。 使用oracle-partition-connector时,要求给连接用户赋予如下系统表的select权限:dba_objects、dba_extents。
  • Loader数据导出简介 Loader支持将数据或者文件从MRS系统中导出到关系型数据库或文件系统中,Loader支持如下数据导出方式: 从HDFS/OBS中导出数据到SFTP服务器 从HDFS/OBS中导出数据到关系型数据库 从HBase中导出数据到SFTP服务器 从HBase中导出数据到关系型数据库 从Phoenix表导出数据到SFTP服务器 从Phoenix表导出数据到关系型数据库 从Hive中导出数据到SFTP服务器 从Hive中导出数据到关系数据库 从同一集群内HBase导出数据到HDFS/OBS
  • 在Windows中调测Impala JDBC应用 运行样例。 导入和修改样例后,即可在开发环境中,右击“JDBCExample.java”,选择“Run 'JDBCExample.main()'”运行对应的应用程序工程。 使用Windows访问MRS集群来操作Impala,有如下两种方式。 方法一:申请一台Windows的E CS 访问MRS集群操作Impala,在安装开发环境后可直接运行样例代码。 在“现有集群”列表中,单击已创建的集群名称。 记录集群的“可用分区”、“虚拟私有云”,以及Master节点的“默认安全组”。 在弹性云服务管理控制台,创建一个新的弹性云服务器。 弹性云服务器的“可用分区”、“虚拟私有云”、“安全组”,需要和待访问集群的配置相同。 选择一个Windows系统的公共镜像。 其他配置参数详细信息,请参见自定义购买弹性云服务器。 方法二:使用本机访问MRS集群操作Impala,在安装开发环境后并完成以下步骤后再运行样例代码。 为任意一个Core节点绑定弹性公网IP,完成后将该IP地址配置在开发样例的client.properties下的impala-server配置项中,用于访问Impala服务、提交SQL语句。 在弹性云服务器页面申请并绑定弹性云服务器IP,具体请参考为弹性云服务器申请和绑定弹性公网IP。 为MRS集群开放安全组规则。在集群Master节点和Core节点的安全组添加安全组规则使弹性云服务器可以访问集群,具体请参考配置安全组规则。 修改导入样例的“krb5.conf”中"kdc"、"admin_server"和“kpasswd_server”三个参数的ip,使其对应于KrbServer服务中对应的弹性公网IP(Kerberos服务默认在Master节点上,此处取Master节点的公网IP)。 样例中的client.properties配置如下: auth = KERBEROS ##kerberos模式 principal = impala/node-ana-corexphm@10530B19_8446_4846_97BD_87880A2535DF.COM ##所要连接的impalad实例使用的principal impala-server = XX.XX.XX.XX:21050 ##指定要连接的impalad实例所在Core节点绑定的服务地址,方式二需要填写步骤1中绑定的弹性公网IP 查看结果。 查看样例代码中的Impala SQL所查询出的结果,运行成功结果会有如下信息。 JDBC客户端运行及结果查看。 Create table success! _c0 0 Delete table success! 父主题: 调测Impala应用
  • 在Windows中调测Impala JDBC应用 运行样例。 导入和修改样例后,即可在开发环境中,右击“ExampleMain.java”,选择“ExampleMain.main()”运行对应的应用程序工程。 使用Windows访问MRS集群来操作Impala,有如下两种方式。 方法一:申请一台Windows的ECS访问MRS集群操作Impala,在安装开发环境后可直接运行样例代码。 在“现有集群”列表中,单击已创建的集群名称。 记录集群的“可用分区”、“虚拟私有云”,以及Master节点的“默认安全组”。 在弹性云服务管理控制台,创建一个新的弹性云服务器。 弹性云服务器的“可用分区”、“虚拟私有云”、“安全组”,需要和待访问集群的配置相同。 选择一个Windows系统的公共镜像。 其他配置参数详细信息,请参见自定义购买弹性云服务器。 方法二:使用本机访问MRS集群操作Impala,在安装开发环境后并完成以下步骤后再运行样例代码。 为任意一个Core节点绑定弹性公网IP,完成后将该IP地址配置在开发样例的client.properties下的impala-server配置项中,用于访问Impala服务、提交SQL语句。 在弹性云服务器页面申请并绑定弹性云服务器IP,具体请参考为弹性云服务器申请和绑定弹性公网IP。 为MRS集群开放安全组规则。在集群Master节点和Core节点的安全组添加安全组规则使弹性云服务器可以访问集群,具体请参考配置安全组规则。 样例中的client.properties配置如下: impala-server = XX.XX.XX.XX:21050 ##指定要连接的impalad实例所在Core节点绑定的服务地址,方式二需要填写步骤1中绑定的弹性公网IP 查看结果。 查看样例代码中的Impala SQL所查询出的结果,运行成功结果会有如下信息。 ExampleMain运行及结果查看。 Create table success! _c0 0 Delete table success! 运行样例出错,出现如下提示: Error running 'ExampleMain': Command line is too long. Shorten command line for ServiceStarter or also for Application default configuration. 解决办法: 在Intellij中的配置Edit Configurations 中设置shorten command line 即可。 父主题: 调测Impala应用
  • 参考 为什么在创建数据连接的界面上MRS Hive集群不显示? 出现该问题的可能原因有: 创建MRS集群时未选择Hive/HBase组件。 创建MRS集群时所选择的企业项目与工作空间的企业项目不同。 创建MRS数据连接时所选择的 CDM 集群和MRS集群网络不互通。 CDM集群作为网络代理,与MRS集群需网络互通才可以成功创建基于MRS的数据连接。 为什么Hive数据连接突然无法获取数据库或表的信息? 可能是由于CDM集群被关闭或者并发冲突导致,您可以通过切换agent代理来临时规避此问题。
  • 检查变量 “变量”部分显示在当前堆栈帧(即在“调用堆栈”部分中选定的堆栈帧)中可访问的元素,并包含以下部分: 局部变量:列出局部变量。 全局变量:列出全局变量,包括特殊(带双下划线)的变量。 返回值:在调试会话期间,当方法被多次调用时,该部分显示方法在上一步返回的值。这允许您观察值在方法调用之间如何变化。 您可以通过在变量上右键单击并从上下文菜单中选择“设置值”来修改变量的值。此外,您还可以使用“复制值”操作来复制变量的值,或者使用“复制为表达式”操作来复制一个用于访问该变量的表达式。 您还可以在“运行和调试”视图的“监视”部分中评估和监视变量和表达式。 您还可以在CodeArts IDE代码编辑器中直接评估和检查表达式的值。做法是当程序处于暂停状态时,将鼠标悬停在所需的表达式、变量或方法调用上。 父主题: 检查暂停的程序
  • 从代码编辑器启动调试会话 如果您不打算向您的程序传递任何参数,可以直接从代码编辑器开始一个调试会话。 在Python文件的代码编辑器中,单击编辑器边缘中的运行按钮(),并从弹出菜单中选择“调试”。或者,您可以右键单击代码编辑器,从上下文菜单中选择“调试 Python 文件”。Python 文件启动配置将被创建并自动运行。 创建的启动配置会自动保存,之后你可以在任何时候从CodeArts IDE主工具栏上的配置列表中选择它。 父主题: 在调试模式下运行程序
共100000条