云服务器内容精选

  • 背景 许多客户的Hive表数据在OBS或HDFS上,需要Doris对接Hive外表,且Hive集群分为安全集群与非安全集群,所以可以使用以下4种方式进行数据查询: 使用catalog连接非安全认证hive on hdfs。 使用catalog连接kerberos安全认证hive on hdfs。 使用catalog连接非安全认证hive on obs。 使用catalog连接kerberos安全认证hive on obs。
  • Kerberos介绍 Hadoop社区版本提供两种认证方式Kerberos认证(安全模式)和Simple认证(普通模式),在创建集群时,MRS支持配置是否启用Kerberos认证。 在安全模式下MRS集群统一使用Kerberos认证协议进行安全认证。 功能 使用Kerberos的系统在设计上采用“客户端/服务器”结构与AES等加密技术,并且能够进行相互认证(即客户端和服务器端均可对对方进行身份认证)。可以用于防止窃听、防止replay攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。 使用前提 需要Kerberos客户端、keytab路径、Kerberos认证用户名称、客户端配置krb5.conf文件。 原理结构图 Kerberos原理架构图如下图所示,详细介绍请参见MRS服务的安全认证原理以及认证机制章节。 图1 原理架构图 表1 参数说明 参数 说明 Application Client 应用客户端,通常是需要提交任务(或者作业)的应用程序。 Application Server 应用服务端,通常是应用客户端需要访问的应用程序。 Kerberos 提供安全认证的服务。 KerberosAdmin 提供认证用户管理的进程。 KerberosServer 提供认证票据分发的进程。
  • 下载安全证书 安全集群创建后,打开详情页面,下载证书。 下载证书后,自定义存放路径。 通过https协议执行样例sql。 curl -X POST -H 'Content-Type: text/plain' --cacert {path}/certificate.crt -uadmin https://host:port/api/query_schema/internal/test_db -d@1.sql 参数描述: certificate.crt:指下载的证书。 -uadmin:集群的用户名,默认admin。 host:port:host指的是内网地址,port指的是https协议端口。 test_db:指定数据库名称。 1.sql:指写入sql语句的文件。 path:证书存放的路径。
  • 连接客户端 安全集群创建后,打开详情页面,下载证书。 下载证书后,自定义存放路径。 连接集群。 mysql -uadmin -h集群内网地址 -P端口 --ssl-ca={path}/certificate.crt --ssl-mode=VERIFY_CA -p password 内网地址:所连接集群的内网地址。 path:证书存放的路径。 端口:FE上的mysql server端口9030。 password:指创建集群时设置的密码。 /root/certificate.crt:存放下载证书的路径。 开启https后需要使用mysql8及以上客户端。
  • 新建用户 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 单击左侧集群管理,显示当前集群列表,选择需要操作的集群,进入用户管理页面。 单击左上角的新建用户按钮,新建用户。 图1 新建用户 表1 参数说明 参数 说明 用户名 新建用户的名字。 密码 新建用户的密码。 说明: 设置密码规则: 8~16个字符。 至少包含以下字符中的4种:大写字母、小写字母、数字、特殊字符($@$!%*?&)。 不能与用户或倒序的用户名相同。 确认密码 确认密码。 检查后参数,确认无误,单击确定。
  • 查看权限 登录表格存储服务管理控制台。 单击管理控制台左上角的,选择区域。 单击左侧集群管理,显示当前集群列表,选择需要操作的集群,进入用户管理页面。 单击操作列“查看权限”,弹出用户权限页面。 表2 查看权限 参数 说明 用户名 新建的用户名。 全局权限 查询、插入、更改、创建、删除。 各级权限 数据库和表:创建的数据库和表。 高危权限:创建表、删除表。 普通权限:查询、插入、更改。 支持查看账户对数据库的操作权限。
  • BE节点支持的监控指标 BE节点监控指标如表2所示。 表2 BE节点支持的监控指标 指标名称 显示名称 含义 取值范围 监控周期(原始指标) doris_be_active_scan_context_count 由外部直接打开的scanner的个数 - ≥0 60s doris_be_add_batch_task_queue_size 接收batch的线程池的队列大小 - ≥0 60s doris_be_brpc_endpoint_stub_count 已创建的brpc stub的数量(BE) 这些stub用于BE之间的交互 ≥0 60s doris_be_brpc_function_endpoint_stub_count 已创建的brpc stub的数量(Remote RPC) 这些stub用于和Remote RPC之间交互 ≥0 60s doris_be_cache_usage_LastestSuccessChannelCache LRU ChannelCache使用率 LRU DataPageCache使用率 [0%,100%] 60s doris_be_cache_usage_ratio_DataPageCache LRU DataPageCache使用率 - [0%,100%] 60s doris_be_cache_usage_ratio_IndexPageCache LRU IndexPageCache使用率 - [0%,100%] 60s doris_be_cache_usage_ratio_SegmentCache LRU SegmentCache使用率 - [0%,100%] 60s doris_be_cache_hit_ratio_DataPageCache LRU DataPageCache命中率 数据Cache,直接影响查询效率 [0%,100%] 60s doris_be_cache_hit_ratio_IndexPageCache LRU IndexPageCache命中率 索引Cache,直接影响查询效率 [0%,100%] 60s doris_be_cache_hit_ratio_LastestSuccessChannelCache LRU ChannelCache命中率 - [0%,100%] 60s doris_be_cache_hit_ratio_SegmentCache LRU SegmentCache命中率 - [0%,100%] 60s doris_be_chunk_pool_local_core_alloc_count ChunkAllocator中,从绑定的core的内存队列中分配内存的次数 - ≥0 60s doris_be_chunk_pool_other_core_alloc_count ChunkAllocator中,从其他的core的内存队列中分配内存的次数 - ≥0 60s doris_be_chunk_pool_reserved_bytes ChunkAllocator中预留的内存大小 - ≥0 Byte 60s doris_be_chunk_pool_system_alloc_cost_ns SystemAllocator申请内存的耗时 累计值,通过斜率可以观测内存分配的耗时 ≥0 ns 60s doris_be_chunk_pool_system_alloc_count SystemAllocator申请内存的次数 - ≥0 60s doris_be_chunk_pool_system_free_cost_ns SystemAllocator释放内存的耗时累计值 通过斜率可以观测内存释放的耗时 ≥0 ns 60s doris_be_chunk_pool_system_free_count SystemAllocator释放内存的次数 - ≥0 60s doris_be_compaction_bytes_total_base Base Compaction的数据量 累计值 ≥0 Byte 60s doris_be_compaction_bytes_total_cumulative Cumulative Compaction的数据量 累计值 ≥0 60s doris_be_compaction_deltas_total_base Base Compaction处理的rowset个数 累计值 ≥0 60s doris_be_compaction_deltas_total_cumulative Cumulative Compaction处理的rowset个数 累计值 ≥0 60s doris_be_compaction_waitting_permits 正在等待Compaction令牌的数量 - ≥0 60s doris_be_data_stream_receiver_count 数据接收端Receiver的数量 - ≥0 60s doris_be_data_stream_receiver_count 数据接收端Receiver的数量 同doris_be_data_stream_receiver_count ≥0 60s doris_be_fragment_request_duration_us 所有fragment intance的执行时间 累计值,通过斜率观测 instance 的执行耗时 ≥0 us 60s doris_be_fragment_requests_total 执行过的fragment instance的数量 累计值 ≥0 60s doris_be_load_channel_count 当前打开的load channel个数 数值越大,说明当前正在执行的导入任务越多 ≥0 60s doris_be_mem_consumption_tablet_meta tablet_meta模块的当前总内存开销 - ≥0 60s doris_be_mem_consumption_load load模块的当前总内存开销 - ≥0 Byte 60s doris_be_memory_allocated_bytes TcMalloc占用的虚拟内存的大小 - ≥0 Byte 60s doris_be_memory_pool_bytes_total 所有MemPool当前占用的内存大小 - ≥0 Byte 60s doris_be_memtable_flush_duration_us memtable写入磁盘的耗时 累计值,通过斜率可以观测写入延迟 ≥0 us 60s doris_be_memtable_flush_total memtable写入磁盘的个数 累计值,通过斜率可以计算写入文件的频率 ≥0 60s doris_be_meta_request_duration_read 访问RocksDB中的meta的读取耗时 - ≥0 us 60s doris_be_meta_request_duration_write 访问RocksDB中的meta的写入耗时 - ≥0 us 60s doris_be_meta_request_total_read 访问RocksDB中的meta的读取次数 累计值 ≥0 60s doris_be_meta_request_total_write 访问RocksDB中的meta的写入次数 累计值 ≥0 60s doris_be_plan_fragment_count 当前已接收的fragment instance的数量 观测是否出现instance堆积 ≥0 60s doris_be_process_fd_num_limit_hard BE进程的文件句柄数硬限 - ≥0 60s doris_be_process_fd_num_limit_soft BE进程的文件句柄数软限 - ≥0 60s doris_be_process_fd_num_used BE进程已使用的文件句柄数 - ≥0 60s doris_be_process_thread_num BE进程线程数 - ≥0 60s doris_be_query_cache_memory_total_byte Query Cache占用字节数 - ≥0 Byte 60s doris_be_query_cache_partition_total_count 当前Partition Cache缓存个数 - ≥0 60s doris_be_query_cache_sql_total_count 当前SQL Cache缓存个数 - ≥0 60s doris_be_query_scan_bytes 读取数据量的累计值 只统计读取Olap表的数据量 ≥0 Byte 60s doris_be_query_scan_bytes_per_second 读取速率 - ≥0 Byte/s 60s doris_be_query_scan_rows 读取行数 累计值,只统计读取Olap表的数据量,通过斜率观测查询速率 ≥0 60s doris_be_result_block_queue_count 当前查询结果缓存中的fragment instance个数 该队列仅用于被外部系统直接读取时使用 ≥0 60s doris_be_result_buffer_block_count 当前查询结果缓存中的query个数 该数值反映当前BE中有多少查询的结果正在等待FE消费 ≥0 60s doris_be_routine_load_task_count 当前正在执行的routine load task个数 - ≥0 60s doris_be_rowset_count_generated_and_in_use 自上次启动后,新增的并且正在使用的rowset id个数 - ≥0 60s doris_be_scanner_thread_pool_queue_size 用于OlapScanner的线程池的当前排队数量 - ≥0 60s doris_be_segment_read_segment_read_total 读取的segment的个数 累计值 ≥0 60s doris_be_segment_read_segment_row_total 读取的segment的行数 累计值,该数值也包含了被索引过滤的行数 ≥0 60s doris_be_send_batch_thread_pool_queue_size 导入时用于发送数据包的线程池的排队个数 - ≥0 60s doris_be_send_batch_thread_pool_thread_num 导入时用于发送数据包的线程池的线程数 - ≥0 60s doris_be_small_file_cache_count 当前BE缓存的小文件数量 - ≥0 60s doris_be_streaming_load_current_processing 当前正在运行的stream load任务数 仅包含curl命令发送的任务 ≥0 60s doris_be_streaming_load_duration_ms 所有stream load任务执行时间的耗时 累计值 ≥0 60s doris_be_streaming_load_requests_total stream load任务数 累计值,通过斜率可观测任务提交频率 ≥0 60s doris_be_stream_load_pipe_count 当前stream load数据管道的个数 包括stream load和routine load任务 ≥0 60s doris_be_stream_load_load_rows stream load最终导入的行数 包括stream load和routine load任务 ≥0 60s doris_be_stream_load_receive_bytes stream load接收的字节数 包括stream load从http接收的数据,以及routine load从kafka 读取的数据 ≥0 Byte 60s doris_be_tablet_base_max_compaction_score 当前最大的Base Compaction Score 该数值实时变化,有可能丢失峰值数据;数值越高,表示compaction堆积越严重 ≥0 60s doris_be_tablet_cumulative_max_compaction_score 当前最大的Cumulative Compaction Score - ≥0 60s doris_be_thrift_connections_total_heartbeat 心跳服务的连接数 累计值 ≥0 60s doris_be_thrift_connections_total_backend BE服务的连接数 累计值 ≥0 60s doris_be_thrift_current_connections_heartbeat 心跳服务的当前连接数 - ≥0 60s doris_be_thrift_current_connections_backend BE服务的当前连接数 - ≥0 60s doris_be_timeout_canceled_fragment_count 因超时而被取消的fragment instance数量 这个值可能会被重复记录 ≥0 60s doris_be_stream_load_txn_request_begin stream load开始事务数 包括stream load和routine load任务 ≥0 60s doris_be_stream_load_txn_request_commit stream load执行成功的事务数 包括stream load和routine load任务 ≥0 60s doris_be_stream_load_txn_request_rollback stream load执行失败的事务数 包括stream load和routine load任务 ≥0 60s doris_be_unused_rowsets_count 当前已废弃的rowset的个数 这些rowset正常情况下会被定期删除 ≥0 60s doris_be_load_bytes 通过tablet sink发送的数量 累计值,可观测导入数据量 ≥0 Byte 60s doris_be_load_rows 通过tablet sink发送的行数 累计值,可观测导入数据量 ≥0 Byte 60s doris_be_fragment_thread_pool_queue_size 当前查询执行线程池等待队列的长度 - ≥0 60s doris_be_compaction_used_permits Compaction任务已使用的令牌数量 用于反映Compaction的资源消耗量 ≥0 60s doris_be_upload_total_byte rowset数据量累计值 - ≥0 60s
  • FE节点支持的监控指标 FE节点监控指标如表1所示。 表1 FE节点支持的监控指标 指标名称 显示名称 含义 取值范围 监控周期(原始指标) doris_fe_image_clean_failed 清理历史元数据镜像文件失败的次数 不应失败,如失败,需人工介入 ≥0 60s doris_fe_image_clean_success 清理历史元数据镜像文件成功的次数 - ≥0 60s doris_fe_image_push_success 将元数据镜像文件推送给其他FE节点的成功的次数 - ≥0 60s doris_fe_image_write_failed 生成元数据镜像文件失败的次数 不应失败,如失败,需人工介入 ≥0 60s doris_fe_image_write_success 生成元数据镜像文件成功的次数 - ≥0 60s doris_fe_max_journal_id 当前FE节点最大元数据日志ID 如果是Master FE,则是当前写入的最大ID,如果是非Master FE,则代表当前回放的元数据日志最大ID;用于观察多个FE之间的id是否差距过大,过大则表示元数据同步出现问题 ≥0 60s doris_fe_max_tablet_compaction_score 所有BE节点中最大的compaction score值 该值可以观测当前集群最大的 compaction score,以判断是否过高,如过高则可能出现查询或写入延迟 ≥0 60s doris_fe_qps 当前FE每秒查询数量(仅统计查询请求) QPS ≥0 60s doris_fe_query_err 错误查询的累积值 - ≥0 60s doris_fe_query_err_rate 每秒错误查询数 - ≥0 60s doris_fe_query_latency_ms_99 查询请求延迟的99分位的查询延迟 - ≥0 ms 60s doris_fe_query_latency_ms_999 查询请求延迟的999分位的查询延迟 - ≥0 ms 60s doris_fe_query_olap_table 查询内部表(OlapTable)的请求个数 - ≥0 60s doris_fe_query_total 所有查询请求数 - ≥0 60s doris_fe_report_queue_size BE的各种定期汇报任务在FE端的队列长度 该值反映了汇报任务在 Master FE 节点上的阻塞程度,数值越大,表示FE处理能力不足 ≥0 60s doris_fe_request_total 所有通过MySQL端口接收的操作请求(包括查询和其他语句) - ≥0 60s doris_fe_routine_load_error_rows 集群内所有Routine Load作业的错误行数总和 - ≥0 60s doris_fe_routine_load_receive_bytes 集群内所有Routine Load作业接收的数据量大小 - ≥0 Byte 60s doris_fe_routine_load_rows 集群内所有Routine Load作业接收的数据行数 - ≥0 60s doris_fe_rps 当前FE每秒请求数量(包含查询以及其他各类语句) 和 QPS 配合来查看集群处理请求的量 ≥0 60s doris_fe_scheduled_tablet_num Master FE节点正在调度的tablet数量 包括正在修复的副本和正在均衡的副本;该数值可以反映当前集群,正在迁移的 tablet 数量;如果长时间有值,说明集群不稳定 ≥0 60s doris_fe_tablet_status_count_added Master FE节点被调度过的tablet数量 - ≥0 60s doris_fe_tablet_status_count_in_sched Master FE节点被重复调度的tablet数量 - ≥0 60s doris_fe_tablet_status_count_not_ready Master FE节点未满足调度触发条件的tablet数量 - ≥0 60s doris_fe_tablet_status_count_total Master FE节点的被检查过的tablet数量 - ≥0 60s doris_fe_tablet_status_count_unhealthy Master FE节点累积的被检查过的不健康的tablet数量 - ≥0 60s doris_fe_txn_counter_begin 提交的事务数量 - ≥0 60s doris_fe_txn_counter_failed 失败的事务数量 - ≥0 60s doris_fe_txn_counter_reject 被拒绝的事务数量 如当前运行事务数大于阈值,则新的事务会被拒绝 ≥0 60s doris_fe_txn_counter_success 成功的事务数量 - ≥0 60s doris_fe_txn_exec_latency_ms_99 99分位的事务执行耗时 - ≥0 ms 60s doris_fe_txn_exec_latency_ms_999 999分位的事务执行耗时 - ≥0 ms 60s doris_fe_txn_publish_latency_ms_99 99分位的事务publish耗时 - ≥0 ms 60s doris_fe_txn_publish_latency_ms_999 999分位的事务publish耗时 - ≥0 ms 60s jvm_heap_size_bytes_max 最大堆内存 观测JVM内存使用情况 ≥0 Byte 60s jvm_heap_size_bytes_committed 已申请的堆内存 观测JVM内存使用情况 ≥0 Byte 60s jvm_heap_size_bytes_used 已使用的堆内存 观测JVM内存使用情况 ≥0 Byte 60s jvm_non_heap_size_bytes_committed 已申请的堆外内存 - ≥0 Byte 60s jvm_non_heap_size_bytes_used 已使用堆外内存 - ≥0 Byte 60s jvm_old_gc_coun 老年代GC次数 观测是否出现长时间的FullGC ≥0 60s jvm_old_gc_time 老年代GC耗时 观测是否出现长时间的FullGC ≥0 ms 60s jvm_old_size_bytes_used 老年代内存占用 - ≥0 Byte 60s jvm_old_size_bytes_peak_used 老年代内存占用峰值 - ≥0 Byte 60s jvm_old_size_bytes_max 老年代内存最大值 - ≥0 Byte 60s jvm_thread_new_count 线程数峰值 观测JVM线程数是否合理 ≥0 60s jvm_thread_new_count new状态的线程数 观测JVM线程数是否合理 ≥0 60s jvm_thread_runnable_count runnable状态的线程数 观测JVM线程数是否合理 ≥0 60s jvm_thread_blocked_count blocked状态的线程数 观测JVM线程数是否合理 ≥0 60s jvm_thread_waiting_count waiting状态的线程数 观测JVM线程数是否合理 ≥0 60s jvm_thread_terminated_coun terminated状态的线程数 观测JVM线程数是否合理 ≥0 60s jvm_young_gc_count 新生代GC次数 累计值 ≥0 60s jvm_young_gc_time 新生代GC耗时 累计值 ≥0 ms 60s jvm_young_size_bytes_used 新生代内存占用 - ≥0 Byte 60s jvm_young_size_bytes_peak_used 新生代内存占用峰值 - ≥0 Byte 60s jvm_young_size_bytes_max 新生代内存最大值 - ≥0 Byte 60s doris_fe_cache_added_partition 新增的Partition Cache数量 累计值 ≥0 60s doris_fe_cache_added_sql 新增的SQL Cache数量 累计值 ≥0 60s doris_fe_cache_hit_partition 命中Partition Cache数 - ≥0 60s doris_fe_cache_hit_sql 命中SQL Cache数 - ≥0 60s doris_fe_connection_total 当前FE的MySQL端口连接数 用于监控查询连接数。如果连接数超限,则新的连接将无法接入 ≥0 60s doris_fe_counter_hit_sql_block_rule 被SQL BLOCK RULE拦截的查询数量 - ≥0 60s doris_fe_edit_log_clean_failed 清理历史元数据日志失败的次数 不应失败,如失败,需人工介入 ≥0 60s doris_fe_edit_log_clean_success 清理历史元数据日志成功的次数 - ≥0 60s doris_fe_edit_log_read 元数据日志读取次数的计数 通过斜率观察元数据读取频率是否正常 ≥0 60s doris_fe_edit_log_write 元数据日志写入次数的计数 通过斜率观察元数据读取频率是否正常 ≥0 60s doris_fe_image_push_failed 将元数据镜像文件推送给其他FE节点的失败的次数 - ≥0 60s
  • Doris建表建议 单表物化视图不能超过6个,物化视图不建议嵌套,不建议数据写入时通过物化视图进行重型聚合和Join计算等ETL任务。 对于有大量历史分区数据,但是历史数据比较少,或者数据不均衡,或者数据查询概率较小的情况,可以创建历史分区(比如年分区,月分区),将所有历史数据放到对应分区里。 创建历史分区方式为:FROM ("2000-01-01") TO ("2022-01-01") INTERVAL 1 YEAR 1千万~2亿以内数据为了方便可以不设置分区(Doris内部有一个默认分区),直接用分桶策略即可。 如果分桶字段存在30%以上的数据倾斜,则禁止使用Hash分桶策略,改为使用Random分桶策略,相关命令为: Create table ... DISTRIBUTED BY RANDOM BUCKETS 10 ... 建表时第一个字段一定是最常查询使用的列,默认有前缀索引快速查询能力,选取最常查询且高基数的列作为前缀索引,默认将一行数据的前36个字节作为这行数据的前缀索引(varchar类型的列只能匹配20个字节,并且会匹配不足36个字节截断前缀索引) 。 超过亿级别的数据,如果有模糊匹配或者等值/in条件,可以使用倒排索引(Doris 2.x版本开始支持)或者Bloomfilter。如果是低基数列的正交查询适合使用bitmap索引(bitmap索引的基数在10000~100000之间效果较好)。 建表时需要提前规划将来要使用的字段个数,可以多预留几十个字段,类型包括整型、字符型等。避免将来字段不够使用,需要较高代价临时去添加字段。
  • Doris建表规则 在创建Doris表指定分桶buckets时,每个桶的数据大小应保持在100MB~3GB之间,单分区中最大分桶数量不超过5000。 表数据超过5亿条以上必须设置分区分桶策略。 表的分桶列不要设置太多,一般情况下设置1或2个列即可,同时需要兼顾数据分布均匀和查询吞吐均衡。 数据均匀是为了避免某些桶的数据存在倾斜影响数据均衡和查询效率。 查询吞吐利用查询SQL的分桶剪裁优化避免了全桶扫描,以提升查询性能。 分桶列的选取:优先考虑数据较为均匀且常用于查询条件的列作为分桶列。 可使用以下方法分析是否会导致数据倾斜: SELECT a, b, COUNT(*) FROM tab GROUP BY a,b; 命令执行后查看各个分组的数据条数是否相差不大,如果相差超过2/3或1/2,则需要重新选择分桶字段。 2千万以内数据禁止使用动态分区。动态分区会自动创建分区,而小表用户关注不到,会创建出大量不使用的分区分桶。 创建表时,排序键key不能太多,一般建议3~5个;太多key会导致数据写入较慢,影响数据导入性能。 不使用Auto Bucket,需按照已有的数据量来进行分区分桶,能更好的提升导入及查询性能。Auto Bucket会造成Tablet数量过多,最终导致有大量的小文件。 创建表时的副本数必须至少为2,默认是3,禁止使用单副本。
  • 语法格式 create table dorisSource ( attr_name attr_type (',' attr_name attr_type)* ) with ( 'connector' = 'doris', 'fenodes' = 'FE_IP:PORT,FE_IP:PORT,FE_IP:PORT', 'table.identifier' = 'database.table', 'username' = 'dorisUsername', 'password' = 'dorisPassword' );
  • 前提条件 该场景作业需要运行在DLI的独享队列上,因此要与HBase建立增强型跨源连接,且用户可以根据实际所需设置相应安全组规则。 如何建立增强型跨源连接,请参考《数据湖探索用户指南》中增强型跨源连接章节。 如何设置安全组规则,请参见《虚拟私有云用户指南》中“安全组”章节。 如果使用MRS Doris,请在增强型跨源的主机信息中添加MRS集群所有节点的主机ip信息。 详细操作请参考《数据湖探索用户指南》中的“修改主机信息”章节描述。 集群未启用Kerberos认证(普通模式) 使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。
  • 注意事项 创建Flink OpenSource SQL作业时,在作业编辑界面的“运行参数”处,“Flink版本”需要选择“1.15”,勾选“保存作业日志”并设置保存作业日志的OBS桶,方便后续查看作业日志。 认证用的username和password等硬编码到代码中或者明文存储都有很大的安全风险,建议使用DEW管理凭证。配置文件或者环境变量中密文存放,使用时解密,确保安全。Flink Opensource SQL使用DEW管理访问凭据 集群未启用Kerberos认证(普通模式) Doris的表名是区分大小写。 使用cloudTable的doris时,'fenodes'字段值的端口请用8030,如'xx:8030'。同时安全组请放开端口8030,8040,9030。 开启HTTPS后,需要在创建表的with子句中添加如下配置参数: 'doris.enable.https' = 'true' 'doris.ignore.https.ca' = 'true' 请在Flink“作业编辑”页面选择“运行参数配置”,选择“开启Checkpoint”,否则会导致Doris结果表无法写入数据。
  • 示例 该示例是从Datagen数据源中生成数据,并将结果写入到Doris结果表中。 参考增强型跨源连接,在DLI上根据Doris所在的虚拟私有云和子网分别创建相应的增强型跨源连接,并绑定所要使用的Flink弹性资源池。参考“修改主机信息”章节描述,在增强型跨源中增加MRS的主机信息。 设置Doris的安全组,添加入向规则使其对Flink的队列网段放通。分别根据Doris的地址测试队列连通性。如果能连通,则表示跨源已经绑定成功,否则表示未成功。 参考测试地址连通性。 参考MRS Doris使用指南,创建doris表,创建语句如下: CREATE TABLE IF NOT EXISTS dorisdemo ( `user_id` varchar(10) NOT NULL, `city` varchar(10), `age` int, `gender` int ) DISTRIBUTED BY HASH(`user_id`) BUCKETS 10 参考创建Flink OpenSource作业,创建flink opensource sql作业,输入以下作业脚本,并提交运行。该作业脚本将Datagen作为数据源,将数据写入到Doris作为结果表中。 create table student_datagen_source( `user_id` String NOT NULL, `city` String, `age` int, `gender` int ) with ( 'connector' = 'datagen', 'rows-per-second' = '1', 'fields.user_id.kind' = 'random', 'fields.user_id.length' = '7', 'fields.city.kind' = 'random', 'fields.city.length' = '7' ); CREATE TABLE dorisDemo ( `user_id` String NOT NULL, `city` String, `age` int, `gender` int ) with ( 'connector' = 'doris', 'fenodes' = 'FE_IP:PORT', 'table.identifier' = 'demo.dorisdemo', 'username' = 'dorisUser', 'password' = 'dorisPassword', 'sink.label-prefix' = 'demo', 'sink.enable-2pc' = 'true', 'sink.buffer-count' = '10' ); insert into dorisDemo select * from student_datagen_source 查看doris结果表是否已成功写入数据。 user_id city age gender 50aff04 93406c5 12 1 681a230 1f27d06 16 1 006eff4 3521ded 18 0
  • 处理步骤 登录安装了MySQL的节点,连接Doris数据库。 调用BE的check_tablet_segment_lost请求自动修复丢失的副本。 curl -X POST http://192.168.67.78:29986/api/check_tablet_segment_lost?repair=true ( 192.168.67.78为异常的BE节点IP地址,29986为BE的HTTP Server的服务端口,可在Manger的Doris配置界面搜索“webserver_port”查看。 执行以下命令,获取DetailCmd。 show tablet tabletId 执行DetailCmd,当异常节点的副本已经被移除时,再次进行业务查询正常即可。