* [概述](#概述) * [部署](#部署) * [配置准备](#配置准备) * [主机规划](#主机规划) * [外部资源确认](#外部资源确认) * [Hadoop配置](#hadoop配置) * [外部组件部署](#外部组件部署) * [Victoria Metrics](#victoria-metrics) * [启动脚本](#启动脚本) * [采集配置](#采集配置) * [Loki](#loki) * [配置文件](#配置文件) * [Grafana](#grafana) * [数据源配置](#数据源配置) * [配置数据库](#配置数据库) * [部署配置](#部署配置) * [接口机目录规划](#接口机目录规划) * [脚本生成](#脚本生成) * [启动上传服务](#启动上传服务) * [编译打包项目](#编译打包项目) * [运维](#运维) * [命令行](#命令行) * [Web](#web) * [模块](#模块) * [Hudi 运行代码](#hudi-运行代码) * [sync](#sync) * [运维服务](#运维服务) * [部署工具](#部署工具) * [开发](#开发) # 概述 围绕Hudi同步和压缩流程建立了一整套的工具和流程。 # 部署 > 由于部份配置需要在源码增删,无法通过配置文件修改,**如果部署新集群,建议对master建立分支进行操作,避免配置混淆** ## 配置准备 ### 主机规划 通常来说,应用部署需要逻辑上规划有 - 一台**接口机**;用于操作脚本、存放jar包等。 - 一台**组件机**;用于部署应用配套的外部组件。 - 剩下的作为**应用机**;用于部署应用服务节点。 上述为逻辑规划,原则上对于机器配置没有特别要求,可以混用;如接口机上也用于部署外部组件,同时也作为服务节点部署服务。 组件机上规划有指标和日志汇聚,hudi任务多的情况下,对IO和磁盘有一定的负载要求,建议单独部署。 ### 外部资源确认 - Hadoop3 用于存放Hudi数据、Flink任务业务jar包等 - Yarn集群节点到HDFS的增删改查权限 - 应用部署主机到HDFS的增删改查权限 - Zookeeper 用于hudi同步压缩服务注册,通常可以使用Hadoop3集群附带的zookeeper - Yarn集群节点到zookeeper的网络连通 - 应用部署主机到zookeeper的网络连通 - Yarn 用于运行hudi同步压缩任务 - 应用部署主机提交任务的权限 - MySQL 配置数据库;目前和汇聚平台配置库耦合,不能改,只能直接使用汇聚配置数据库 - 应用部署节点到MySQL的访问连通 - Pulsar 数据源 - Yarn集群节点到pulsar的读取连通 - 应用部署主机到pulsar的client连通和admin连通 - 应用部署主机 部署配套应用服务 - JDK 1.8(实现OpenJDK标准即可) - Kerberos - 接口机到应用机的ssh免密(用于服务启停部署) #### Hadoop配置 在`config`目录下以「hudi数据所有集群名称+hudi同步运行集群名称」的格式建立配置文件夹,如`b2b12`,并将下列配置文件放在这里 - core-site.xml - hdfs-site.xml - yarn-site.xml - viewfs-mount-table.xml(如果需要使用联邦,core-site.xml也需要将引用改为相对路径引用) ### 外部组件部署 _组件安装包放在研发云制品库:[汇聚平台项目-制品库](https://www.srdcloud.cn/artifact/26151/project#generic)_ odcp-snapshot-generic-local/cluster-tools下面 #### Victoria Metrics Victoria Metrics是一款替代Prometheus的开源指标采集应用,支持分布式部署和指标主动推送,完全兼容Prometheus API,提供了接近数倍于Prometheus的性能。 _目前项目采用单节点模式部署,性能还有富裕,后期可根据性能需求,改为分布式部署。_ ``` victoria_metrics-1.98 ├── prometheus.yml 配置文件 ├── start_victoria_metrics.sh 启动脚本 ├── stop_victoria_metrics.sh 停止脚本 ├── version ├── victoria-metrics-prod-amd64 x86架构 └── victoria-metrics-prod-arm64 arm架构 ``` ##### 启动脚本 启动脚本需要根据部署的主机区分CPU架构,修改脚本内容,引用合适的可执行文件。 用户名为`EsCFVuNkiDWv7PKmcF`,密码为`Abf%x9ocS^iKr3tgrd`,用于保护Victoria Metrics的Web页面。 ```Bash nohup $current_path/victoria-metrics-prod-amd64 \ -search.maxQueryLen=1MB \ -promscrape.maxScrapeSize=100MB \ -loggerLevel=ERROR \ -storageDataPath=$current_path/data \ -retentionPeriod=7d \ -httpAuth.username=EsCFVuNkiDWv7PKmcF \ -httpAuth.password=Abf%x9ocS^iKr3tgrd \ -httpListenAddr=":35710" \ -promscrape.config=$current_path/prometheus.yml \ -promscrape.httpSDCheckInterval=15s \ > $current_path/victoria-metrics.log 2>&1 & ``` 启动完成后可以通过脚本指定的端口`35710`访问Web页面,即为启动成功。 ![](assets/victoria_metrics_web.png) ##### 采集配置 Victoria Metrics的配置文件完全兼容Prometheus,可以直接替换使用。 ```yaml global: scrape_interval: 15s scrape_timeout: 15s scrape_configs: # Victoria Metrics 本身的指标 - job_name: 'Victoria Metrics Single Cluster' metrics_path: '/metrics' basic_auth: username: EsCFVuNkiDWv7PKmcF password: Abf%x9ocS^iKr3tgrd static_configs: - targets: - '132.126.207.34:35710' # Loki日志采集 - job_name: 'Loki' metrics_path: '/metrics' static_configs: - targets: - '132.126.207.34:33100' # 集群主机管理,根据需要启用 - job_name: 'Node Exporter' metrics_path: '/metrics' static_configs: - targets: - '132.126.207.124:20110' # 应用服务的指标采集,部署Victoria Metrics的时候可以注释,等应用部署完成后再打开 - job_name: 'Service' metrics_path: '/actuator/prometheus' basic_auth: username: AxhEbscwsJDbYMH2 password: cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4 # 可以通过service-cloud-query模块动态获取各个服务节点的IP http_sd_configs: - url: http://132.126.207.34:35690/hudi_services/service_cloud_query/cloud/targets basic_auth: username: AxhEbscwsJDbYMH2 password: cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4 ``` #### Loki Loki是一款日志汇聚工具,Grafana公司出品,可以通过Grafana直接查询日志,相比ELK更为轻量级,不需要额外的日志采集组件,支持应用直接推送日志,对简单的分布式应用更友好。 _根据规划,Loki分为服务日志和Hudi日志,选择两台机器分别部署;Hudi日志较多,如果所有日志划分到一个Loki,可能会影响服务日志查询_ ``` loki-2.9 ├── stop_loki.sh 停止脚本 ├── version ├── loki-linux-amd64 x86架构 ├── loki-linux-arm64 arm架构 ├── loki-config.yml 配置文件 ├── start_loki.sh 启动脚本 └── logs ``` ##### 配置文件 ```yaml # Loki不支持直接配置访问控制,官方建议使用Nginx来实现 auth_enabled: false query_range: parallelise_shardable_queries: false server: # 日志推送端口 http_listen_port: 33100 grpc_listen_port: 39096 log_level: error grpc_server_max_recv_msg_size: 1572864000 grpc_server_max_send_msg_size: 1572864000 common: # 指向规划好的数据盘 path_prefix: /data/datalake/data/loki storage: filesystem: chunks_directory: /data/datalake/data/loki/chunks rules_directory: /data/datalake/data/loki/rules replication_factor: 1 ring: instance_addr: 127.0.0.1 kvstore: store: inmemory table_manager: retention_deletes_enabled: true retention_period: 72h schema_config: configs: - from: 2023-12-06 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h ``` #### Grafana 根据CPU架构选择`grafana-amd64-10.3`或者`grafana-arm64-10.3`部署包。 ``` grafana-amd64-10.3 ├── data ├── start_grafana.sh ├── stop_grafana.sh ├── npm-artifacts ├── packaging ├── plugins-bundled ├── public ├── bin ├── conf ├── storybook ├── tools ├── VERSION ├── LICENSE ├── NOTICE.md ├── README.md └── Dockerfile ``` ##### 数据源配置 根据部署的组件新增数据源,其中Loki区分服务日志和Hudi日志(如果没有部署两个,可以不区分)。 ![](assets/grafana_datasource.png) ### 配置数据库 在`database`路径下,有数据库初始化脚本,其中`tb_app_hudi_job_config`和`tb_app_yarn_job_config`两张表提供了预设配置。 _建议为每一个环境创建一个单独的database,避免不同集群的配置混在一起。_ ``` database ├── tb_app_collect_table_info.sql ├── tb_app_collect_table_version.sql ├── tb_app_flink_job_config.sql ├── tb_app_global_config.sql ├── tb_app_hudi_compaction_job.sql ├── tb_app_hudi_compaction_metrics.sql ├── tb_app_hudi_event.sql ├── tb_app_hudi_job_config.sql ├── tb_app_hudi_sync_state.sql └── tb_app_yarn_job_config.sql ``` ### 部署配置 以`service-cli/service-cli-runner/src/main/resources/application-b12.yml`为模版,补全应用部署信息 以`service-web/src/main/resources/static/common/info.js#commonInfo`为模板,补全web页面相关信息 ### 接口机目录规划 选择一个空白目录作为根目录(下文简称「根目录」),创建下列子目录。 ``` . ├── cloud 服务管理脚本 ├── command 应用命令行 ├── data 应用数据 ├── extra 外部组件 ├── logs 应用日志 └── uploader 上传服务 ``` ## 脚本生成 将`bin/generate` 脚本复制到根目录下,根据实际情况改动脚本中指向的一些目录、jdk和jar包路径,执行脚本;正常情况下,脚本将会为`cloud`、`command`、`uploader` 目录生成脚本。 ## 启动上传服务 _如果使用其他文件服务,如YTP,则不需要操作这一步,直接使用其他文件服务即可。_ ``` uploader ├── start.sh 启动脚本 ├── stop.sh 停止脚本 └── update.sh 更新脚本 ``` 执行`start.sh`启动上传服务,默认端口为`36800`。 ## 编译打包项目 将文件服务的url补充到`bin/library.sh`中,执行`bin/build-all.sh`,打包编译全部模块并上传到文件服务。 # 运维 ## 命令行 ## Web # 模块 模块主要分为三部分,包含 Hudi 运行代码、运维服务和部署工具。 ## Hudi 运行代码 ### sync sync 模块包含 Hudi 运行的全部业务逻辑,Hudi on flink 的运行模式为 ## 运维服务 ## 部署工具 # 开发