华为云用户手册

  • URI DELETE /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/users/{user_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定交换数据平台下连接器的ID。 获取方法请参考获取连接器ID。 user_id 是 String 用户ID。 参数校验规则:最小长度1,最大长度50,匹配字母、数字和符号-。
  • 响应示例 状态码: 200 OK 用户操作结果。 { "data" : { "headers" : { }, "body" : { "data" : "success", "total" : 0, "error_code" : null, "error_msg" : null }, "statusCodeValue" : 200, "statusCode" : "OK" }, "total" : 0, "error_code" : null, "error_msg" : null }
  • 响应参数 状态码: 200 表16 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 400 表17 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表18 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • 请求示例 点对点发送合约 POST /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/contracts/point-to-point { "contract_description" : "合约描述", "approver_id" : "9999900******", "contract_name" : "点对点发送合约", "file_assets" : [ { "artifact_ids" : [ "f21e5c1e-ec9b******" ], "data_resource_id" : "7da43bc2-c301******" } ], "connector_policies" : [ { "connector_id" : "2747e1be-dba2*****", "policy_json" : { "view" : { "enable" : true, "times" : 100, "app" : "321ac118-758e******" }, "modify" : { "enable" : false, "times" : "", "app" : "" }, "download" : { "enable" : true, "times" : 100, "app" : "234c118-758e******" }, "approval" : { "enable" : false }, "terminate" : { "enable" : true }, "use" : { "users" : "2******", "teams" : "", "timeInterval" : { "startTime" : "2023-12-11T16:25:27Z", "endTime" : "2024-01-10T16:25:27Z" } }, "database" : { "column" : "", "rows" : [ ] } } } ] }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token,通过调用 IAM 服务“获取用户Token”接口获取(响应消息头中X-Subject-Token的值)。 表3 请求Body参数 参数 是否必选 参数类型 描述 contract_name 是 String 合约名称。 参数校验规则:只能包含英文字母,数字,下划线,中文及-,并且只能以中文和英文开头,最小长度1,最大长度100。 contract_description 否 String 合约描述。 参数校验规则:最大长度500。 connector_policies 是 Array of ConnectorPolicyRequest objects 每个连接器对应的策略信息。 approver_id 是 String 点对点审批人。 参数校验规则:最小长度1,最大长度50,匹配字母、数字和符号-。 file_assets 是 Array of FileAssetRequest objects 多资产id。 表4 ConnectorPolicyRequest 参数 是否必选 参数类型 描述 connector_id 是 String 连接器ID。 policy_json 是 PolicyJsonRequest object 数据使用策略。 表5 PolicyJsonRequest 参数 是否必选 参数类型 描述 view 否 ViewDTO object 查看策略。 modify 否 ModifyDTO object 修改策略。 terminate 否 TerminateDTO object 终止策略。 approval 否 ApprovalDTO object 审批策略。 download 否 DownloadDTO object 下载策略。 use 否 UseDTO object 使用对象策略。 database 否 DatabaseDTO object 数据库策略。 表6 ViewDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许查看。 times 否 String 次数,仅当enable参数为true时生效。 app 否 String 应用,仅当enable参数为true时生效。 表7 ModifyDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许修改。 times 否 String 次数,仅当enable参数为true时生效。 app 否 String 应用,仅当enable参数为true时生效。 表8 TerminateDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许提供方提前终止合约。 表9 ApprovalDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否需要审批。 表10 DownloadDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许下载。 times 否 String 次数,仅当enable参数为true时生效。 app 否 String 应用,仅当enable参数为true时生效。 表11 UseDTO 参数 是否必选 参数类型 描述 users 否 String 使用人,与teams字段二选一填入 teams 否 String 使用团队,与users字段二选一填入 timeInterval 否 TimeIntervalDTO object 时间区间。 表12 TimeIntervalDTO 参数 是否必选 参数类型 描述 startTime 是 String 开始时间,需要与endTime配合生效。使用UTC时间格式。 endTime 是 String 结束时间,需要与startTime配合生效。使用UTC时间格式。 表13 DatabaseDTO 参数 是否必选 参数类型 描述 column 是 String 列过滤策略。 rows 是 Array of RowDTO objects 行过滤策略。 表14 RowDTO 参数 是否必选 参数类型 描述 column_name 否 String 参数名称,需要与condition、value配合生效。 condition 否 String 参数条件,需要与column_name、value配合生效。 value 否 String 参数条件值,需要与column_name、condition配合生效。 表15 FileAssetRequest 参数 是否必选 参数类型 描述 data_resource_id 是 String 数据资源ID。 file_path 否 String 文件路径。 artifact_ids 是 Array of strings 资源下的文件ID集合。
  • URI POST /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/contracts/point-to-point 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定交换数据平台下连接器的ID。 获取方法请参考获取连接器ID。
  • 响应参数 状态码: 200 表16 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 400 表17 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表18 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • 请求示例 上架offer POST /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/offers { "app_item_url" : "/approvalDetail?offerId=", "approver_id" : "99999000******", "data_resource_list" : [ { "data_resource_id" : "7da43bc2******", "data_artifact_id" : "" } ], "offer_description" : "", "offer_name" : "上架offer", "publish_type" : "SPECIFY_SPACE_EXPOSURE", "subscription_type" : "CONTROLLED_DATA", "target_ids" : [ "connector-1868" ], "policy_json" : { "view" : { "enable" : true, "times" : "", "app" : "321ac118******" }, "modify" : { "enable" : false, "times" : "", "app" : "" }, "download" : { "enable" : true, "times" : "", "app" : "234c118******" }, "approval" : { "enable" : false }, "terminate" : { "enable" : true }, "use" : { "users" : "", "timeInterval" : { "startTime" : "2023-12-11T16:09:33+08:00", "endTime" : "2024-01-10T16:09:33+08:00" } }, "database" : { "column" : "", "rows" : [ ] } } }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token,通过调用IAM服务“获取用户Token”接口获取(响应消息头中X-Subject-Token的值)。 表3 请求Body参数 参数 是否必选 参数类型 描述 data_resource_list 否 Array of DataSource objects 数据源列表。 approver_id 是 String 审批人ID。 publish_type 是 String 发布类型。 枚举值: FULL_PUBLIC SPECIFY_SPACE_EXPOSURE SPACE_GROUP_PUBLIC offer_name 是 String 邀约名称。 参数校验规则:只能包含英文字母,数字,下划线,中文及-,并且只能以中文和英文开头,最小长度1,最大长度100。 offer_description 否 String 邀约描述。 参数校验规则:最大长度500。 subscription_type 是 String 订阅类型。 枚举值: OPEN_DATA CONTROLLED_DATA policy_json 否 PolicyJsonRequest object 数据使用策略。 target_ids 否 Array of strings 目标ID列表。 表4 DataSource 参数 是否必选 参数类型 描述 data_resource_id 是 String 数据源ID。 参数校验规则:最小长度1,最大长度50,匹配字母、数字和符号-。 data_artifact_id 否 String 数据组件ID。 参数校验规则:最小长度1,最大长度50,匹配字母、数字和符号-。 mask_sensitive 否 Array of MaskSensitive objects 脱敏列信息。 表5 MaskSensitive 参数 是否必选 参数类型 描述 attribute_code 否 String 属性code。 reserve_head_len 否 Integer 首端保留长度。 最大值:5000 reserve_tail_len 否 Integer 尾端保留长度。 最大值:5000 表6 PolicyJsonRequest 参数 是否必选 参数类型 描述 view 否 ViewDTO object 查看策略。 modify 否 ModifyDTO object 修改策略。 terminate 否 TerminateDTO object 终止策略。 approval 否 ApprovalDTO object 审批策略。 download 否 DownloadDTO object 下载策略。 use 否 UseDTO object 使用对象策略。 database 否 DatabaseDTO object 数据库策略。 表7 ViewDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许查看。 times 否 String 次数,仅当enable参数为true时生效。 app 否 String 应用,仅当enable参数为true时生效。 表8 ModifyDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许修改。 times 否 String 次数,仅当enable参数为true时生效。 app 否 String 应用,仅当enable参数为true时生效。 表9 TerminateDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许提供方提前终止合约。 表10 ApprovalDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否需要审批。 表11 DownloadDTO 参数 是否必选 参数类型 描述 enable 是 Boolean 是否允许下载。 times 否 String 次数,仅当enable参数为true时生效。 app 否 String 应用,仅当enable参数为true时生效。 表12 UseDTO 参数 是否必选 参数类型 描述 users 否 String 使用人,与teams字段二选一填入 teams 否 String 使用团队,与users字段二选一填入 timeInterval 否 TimeIntervalDTO object 时间区间。 表13 TimeIntervalDTO 参数 是否必选 参数类型 描述 startTime 是 String 开始时间,需要与endTime配合生效。使用UTC时间格式。 endTime 是 String 结束时间,需要与startTime配合生效。使用UTC时间格式。 表14 DatabaseDTO 参数 是否必选 参数类型 描述 column 是 String 列过滤策略。 rows 是 Array of RowDTO objects 行过滤策略。 表15 RowDTO 参数 是否必选 参数类型 描述 column_name 否 String 参数名称,需要与condition、value配合生效。 condition 否 String 参数条件,需要与column_name、value配合生效。 value 否 String 参数条件值,需要与column_name、condition配合生效。
  • URI POST /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/offers 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定交换数据平台下连接器的ID。 获取方法请参考获取连接器ID。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 data String 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表6 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • URI POST /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/transfer 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定交换数据平台下连接器的ID。 获取方法请参考获取连接器ID。
  • 响应示例 状态码: 200 OK 合约操作结果 { "data" : { "contract_id" : "AGRTconnector-****3b53a05caccd4c53b509************", "contract_name" : "测试合约3", "result_code" : "SUC CES S", "result_description" : "Cancel contract success." }, "total" : 0, "error_code" : null, "error_msg" : null }
  • URI PUT /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/contracts/{contract_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定交换数据平台下连接器的ID。 获取方法请参考获取连接器ID。 contract_id 是 String 合约ID。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 data ContractResult object 合约操作结果。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 表4 ContractResult 参数 参数类型 描述 contract_id String 合约ID。 contract_name String 合约名称。 result_code String 操作结果返回码: SUCCESS:操作成功 FAILED:操作失败 枚举值: SUCCESS FAILED result_description String 操作结果描述。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表6 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • URI POST /v1/{project_id}/eds/instances/{instance_id}/domains 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 表2 Query参数 参数 是否必选 参数类型 描述 domain_id 是 String 租户ID。 参数校验规则:最大长度50。 domain_name 是 String 租户名称。 参数校验规则:最大长度100。 iam_user_id 是 String 主用户ID。 参数校验规则:最大长度50。 iam_user_name 是 String 主用户名称。 参数校验规则:最大长度100。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 data String 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表6 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • 请求示例 添加连接器用户。 POST https://{endpoint}/v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/users { "role_list" : [ "ROLE_CONNECTOR_ADMINISTRATOR", "ROLE_DATA_SENDER" ], "user_id" : "57125ads46e7cbcfa201************" }
  • 响应示例 状态码: 200 OK 用户操作结果。 { "data" : { "user_name" : "test_user", "user_id" : "f528b3337a724e0b9d7************", "result_code" : "SUCCESS", "result_description" : "success" }, "total" : 0, "error_code" : null, "error_msg" : null }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token,通过调用IAM服务“获取用户Token”接口获取(响应消息头中X-Subject-Token的值)。 表3 请求Body参数 参数 是否必选 参数类型 描述 user_id 是 String IAM用户ID。 role_list 是 Array of strings 角色列表: ROLE_SYSTEM_ADMINISTRATOR: 系统管理员 ROLE_CONNECTOR_ADMINISTRATOR: 连接器管理员 ROLE_BUSINESS_AUDIT: 连接器审计员 ROLE_DATA_APPROVER: 数据审批人 ROLE_RESOURCE_APPROVER: 资源审批人 ROLE_AGRT_APPROVER: 合约审批人 ROLE_TEAM_CREATOR: 团队创建人 ROLE_DATA_SENDER: 数据发送人 ROLE_RESOURCE_ADMINISTRATOR: 资源管理员 ROLE_DATA_CONSUMER: 数据消费者 ROLE_CONTRACT_ADMINISTRATOR: 合约管理员 ROLE_DATA_SOURCE_ADMINISTRATOR: 数据源管理员 枚举值: ROLE_SYSTEM_ADMINISTRATOR ROLE_CONNECTOR_ADMINISTRATOR ROLE_BUSINESS_AUDIT ROLE_DATA_APPROVER ROLE_RESOURCE_APPROVER ROLE_AGRT_APPROVER ROLE_TEAM_CREATOR ROLE_DATA_SENDER ROLE_RESOURCE_ADMINISTRATOR ROLE_DATA_CONSUMER ROLE_CONTRACT_ADMINISTRATOR ROLE_DATA_SOURCE_ADMINISTRATOR
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 data UserInfo object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 表5 UserInfo 参数 参数类型 描述 user_name String IAM用户名。 user_id String IAM用户ID。 result_code String 用户操作结果返回码。 枚举值: SUCCESS FAILED result_description String 用户操作结果描述。 状态码: 400 表6 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表7 响应Body参数 参数 参数类型 描述 data Object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • URI POST /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id}/users 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID。 获取方法请参考获取项目ID。 instance_id 是 String 实例ID,开通的交换数据平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定交换数据平台下连接器的ID。 获取方法请参考获取连接器ID。
  • SDK列表 在开始使用之前,请确保您安装的是最新版本的SDK。使用过时的版本可能会导致兼容性问题或无法使用最新功能。您可以在 SDK中心 查询版本信息。 表1提供了SecMaster服务支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导
  • 消费组 表3 消费组约束与限制 限制项 约束与限制 创建消费组的数量 消费组的数量根据产品规格确定,不支持修改。 当消费组的数量达到上限后,您无法继续创建消费组。 是否需要创建消费组、消费者、生产者 不需要单独创建消费组、生产者和消费者,在使用时自动生成,实例创建后,直接使用即可。 消费位点重置 支持重置消费2天内任意时间点的消息。 重置消费进度 重置消费进度可能会导致重复消费。 代理故障场景 实例中部分代理故障时,无法创建、修改和删除消费组,只能查询消费组。
  • 实例 表1 实例约束与限制 限制项 约束与限制 版本 实例创建后,不支持变更版本。建议服务端版本和客户端版本保持一致。 存储空间 磁盘类型创建完成后不可修改。 只支持扩大存储空间,不支持减小存储空间。 扩容存储空间有次数限制,最多扩容20次。 代理个数 只支持增加代理个数,不支持减小代理个数。 代理规格 支持扩容代理规格。 若实例Broker数为1,扩容期间会导致Broker主备切换,造成业务中断30秒以内。 若实例Broker数大于1,且Topic分布到多个Broker上,则扩容期间会发生秒级连接闪断。顺序消息可能会发生乱序,请谨慎评估业务影响,建议您在业务低峰期扩容。 修改VPC/子网/可用区 实例创建后,不支持修改VPC/子网/可用区。 Request-Reply机制 不支持此机制。 修改配置参数 不支持调用开源接口修改配置参数。
  • 规则 Hudi表必须设置合理的主键。 Hudi表提供了数据更新和幂等写入能力,该能力要求Hudi表必须设置主键,主键设置不合理会导致数据重复。主键可以为单一主键也可以为复合主键,两种主键类型均要求主键不能有null值和空值,可以参考以下示例设置主键: SparkSQL: -- 通过primaryKey指定主键,如果是复合主键需要用逗号分隔。 create table hudi_table ( id1 int, id2 int, name string, price double ) using hudi options ( primaryKey = 'id1,id2', preCombineField = 'price' ); SparkDatasource: --通过hoodie.datasource.write.recordkey.field指定主键。 df.write.format("hudi"). option("hoodie.datasource.write.table.type", COPY_ON_WRITE). option("hoodie.datasource.write.precombine.field", "price"). option("hoodie.datasource.write.recordkey.field", "id1,id2"). FlinkSQL: --通过hoodie.datasource.write.recordkey.field指定主键。 create table hudi_table( id1 int, id2 int, name string, price double ) partitioned by (name) with ( 'connector' = 'hudi', 'hoodie.datasource.write.recordkey.field' = 'id1,id2', 'write.precombine.field' = 'price') Hudi表必须配置precombine字段。 在数据同步过程中不可避免会出现数据重复写入、数据乱序问题,例如:异常数据恢复、写入程序异常重启等场景。通过设置合理precombine字段值可以保证数据的准确性,老数据不会覆盖新数据,也就是幂等写入能力。该字段可用选择的类型包括:业务表中更新时间戳、数据库的提交时间戳等。precombine字段不能有null值和空值,可以参考以下示例设置precombine字段: SparkSQL: --通过preCombineField指定precombine字段。 create table hudi_table ( id1 int, id2 int, name string, price double ) using hudi options ( primaryKey = 'id1,id2', preCombineField = 'price' ); SparkDatasource: --通过hoodie.datasource.write.precombine.field指定precombine字段。 df.write.format("hudi"). option("hoodie.datasource.write.table.type", COPY_ON_WRITE). option("hoodie.datasource.write.precombine.field", "price"). option("hoodie.datasource.write.recordkey.field", "id1,id2"). Flink: --通过write.precombine.field指定precombine字段。 create table hudi_table( id1 int, id2 int, name string, price double ) partitioned by (name) with ( 'connector' = 'hudi', 'hoodie.datasource.write.recordkey.field' = 'id1,id2', 'write.precombine.field' = 'price') 流式计算采用MOR表。 流式计算为低时延的实时计算,需要高性能的流式读写能力,在Hudi表中存在的MOR和COW两种模型中,MOR表的流式读写性能相对较好,因此在流式计算场景下采用MOR表模型。关于MOR表在读写性能的对比关系如下: 对比维度 MOR表 COW表 流式写 高 低 流式读 高 低 批量写 高 低 批量读 低 高 实时入湖,表模型采用MOR表。 实时入湖一般的性能要求都在分钟内或者分钟级,结合Hudi两种表模型的对比,因此在实时入湖场景中需要选择MOR表模型。 Hudi表名以及列名采用小写字母。 多引擎读写同一张Hudi表时,为了规避引擎之间大小写的支持不同,统一采用小写字母。
  • 建议 Spark批处理场景,对写入时延要求不高的场景,采用COW表。 COW表模型中,写入数据存在写放大问题,因此写入速度较慢;但COW具有非常好的读取性能力。而且批量计算对写入时延不是很敏感,因此可以采用COW表。 Hudi表的写任务要开启Hive元数据同步功能。 SparkSQL天然与Hive集成,无需考虑元数据问题。该条建议针对的是通过Spark Datasource API或者Flin写Hudi表的场景,通过这两种方式写Hudi时需要增加向Hive同步元数据的配置项;该配置的目的是将Hudi表的元数据统一托管到Hive元数据服务中,为后续的跨引擎操作数据以及数据管理提供便利。
  • 规则 有数据持续写入的表,24小时内至少执行一次compaction。 对于MOR表,不管是流式写入还是批量写入,需要保证每天至少完成1次Compaction操作。如果长时间不做compaction,Hudi表的log将会越来越大,这必将会出现以下问题: Hudi表读取很慢,且需要很大的资源。 这是由于读MOR表涉及到log合并,大log合并需要消耗大量的资源并且速度很慢。 长时间进行一次Compaction需要耗费很多资源才能完成,且容易出现OOM。 阻塞Clean,如果没有Compaction操作来产生新版本的Parquet文件,那旧版本的文件就不能被Clean清理,增加存储压力。 CPU与内存比例为1:4~1:8。 Compaction作业是将存量的parquet文件内的数据与新增的log中的数据进行合并,需要消耗较高的内存资源,按照之前的表设计规范以及实际流量的波动结合考虑,建议Compaction作业CPU与内存的比例按照1:4~1:8配置,保证Compaction作业稳定运行。当Compaction出现OOM问题,可以通过调大内存占比解决。
  • Spark加工Hudi表时其他参数优化 设置spark.sql.enableToString=false,降低Spark解析复杂SQL时候内存使用,提升解析效率。 设置spark.speculation=false,关闭推测执行,开启该参数会带来额外的cpu消耗,同时Hudi不支持启动该参数,启用该参数写Hudi有概率导致文件损坏。 配置项 集群默认值 调整后 --conf spark.sql.enableToString true false --conf spark.speculation false false
  • 初始化Hudi表时,可以使用BulkInsert方式快速写入数据 示例: set hoodie.combine.before.insert=true; --入库前去重,如果数据没有重复 该参数无需设置。 set hoodie.datasource.write.operation = bulk_insert; --指定写入方式为bulk insert方式。 set hoodie.bulkinsert.shuffle.parallelism = 4; --指定bulk_insert写入时的并行度,等于写入完成后保存的分区parquet文件数。 insert into dsrTable select * from srcTabble
共100000条