
# 配置Flink HistoryServer
#### 操作场景
Flink可以通过日志来分析作业失败原因、失败算子和CheckPoint运行情况，但是作业失败前的运行状态不太直观，可通过HistoryServer直观地看到作业失败前的运行情况，包括查看具体失败的算子、流量情况、执行计划和CheckPoint完成情况等。
对于已经完成的作业，HistoryServer也能清晰的看到数据流量等内容，有利于问题的定位和Flink作业的维护。
#### 约束与限制
- 本章节适用于MRS 3.6.0-LTS及以后版本。
- HistoryServer只展示作业的运行情况，不展示具体日志。

- HistoryServer只展示已归档且配置了归档路径（参考[启动Flink HistoryServer]配置）的作业，包括如下：
  - 运行失败的作业。
  
  - 通过Flink stop或者cancel命令停止的作业。
   
- HistoryServer不展示未归档的作业，包括如下：
  - 通过yarn application直接结束的作业。
  
  - 在FlinkServer UI上单击"停止"、"删除"的作业。
  
  - 运行中的作业。
   
 
 #### 启动Flink HistoryServer
1. 已安装集群客户端，例如安装目录为"/opt/hadoopclient"。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
2. 以客户端安装用户登录客户端所在节点，执行以下命令，切换到客户端安装目录。 
   ```
   cd /opt/hadoopclient
   ```
   
   
3. 执行以下命令配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
4. 如果当前集群已启用Kerberos认证（安全模式），执行以下命令认证用户。如果当前集群未启用Kerberos认证（普通模式），则无需执行此命令。 
   ```
   kinit 组件业务用户
   ```
   例如：
   ```
   kinit flinkuser
   ```
   
   
5. 执行如下命令初始化环境变量。 
   ```
   source /opt/hadoopclient/bigdata_env
   ```
   
   
6. 在HDFS上手动创建用于作业归档的目录，并赋予相应的权限。例如属主可以设置为flink，属组为hadoop，权限为770。
   
   创建HDFS目录：
   ```
   hdfs dfs -mkdir -p hdfs://hacluster/flink/history
   ```
   配置权限为770：
   ```
   hdfs dfs -chmod 770 hdfs://hacluster/flink/history
   ```
   配置属主为flink，属组为hadoop：
   ```
   hdfs dfs -chown flink:hadoop hdfs://hacluster/flink/history
   ```
   
   
7. 在"*客户端安装目录* /Flink/flink/conf/flink-conf.yaml"配置文件中新增如下参数并保存。
   
   表1HistoryServer必选参数说明 
   | 参数名称                         | 说明                                                                                                                     | 示例                             | 建议值                                                                                                 |
   |:---|:---|:---|:---|
   | historyserver.archive.fs.dir | 参考[6]创建目录，并以逗号分隔目录列表，用于获取存档作业。HistoryServer将监控这些目录中的存档作业。 | hdfs://hacluster/flink/history | -                                                                                                   |
   | historyserver.web.address    | HistoryServer WebUI地址。                                                                                                 | 192.168.x.x                    | 建议使用本节点IP                                                                                           |
   | historyserver.web.port       | HistoryServer WebUI端口。                                                                                                 | 32651                          | 32651-32661                                                                                         |
   | historyserver.web.tmpdir     | HistoryServer REST API用于临时文件的本地目录。                                                                                     | /tmp                           | 建议配置路径：/opt/Bigdata/tmp 以防止将/tmp路径空间占满 |
      
   表2作业必选参数 
   | 参数名称                      | 说明                                                                                                                                                                                                                                                                                                                                | 示例                             |
   |:---|:---|:---|
   | jobmanager.archive.fs.dir | 将已完成的作业信息上传到文件系统目录中。 只有配置了此参数，作业才会归档，没有配置的作业无法在HistoryServer查看。 值必须与historyserver.archive.fs.dir设置的值相同。 HistoryServer是根据该路径下归档的文件来获取作业状态的。 | hdfs://hacluster/flink/history |
      
   表3HistoryServer可选参数说明 
   | 参数名称                                      | 说明                                                                                                                                   | 默认值   | 建议值   |
   |:---|:---|:---|:---|
   | historyserver.archive.clean-expired-jobs  | 是否应清理不再存在于historyserver.archive.fs.dir的作业。                                                                                           | false | false |
   | historyserver.archive.fs.refresh-interval | 刷新存档工作目录的间隔（毫秒）。                                                                                                                     | 10000 | 10000 |
   | historyserver.archive.retained-jobs       | historyserver.archive.fs.dir定义的每个存档目录中要保留的作业的最大数量。如果设置为-1（默认），则存档数量没有限制。如果设置为0或小于-1，HistoryServer将抛出"IllegalConfigurationException"。 | -1    | -1    |
   | historyserver.log.jobmanager.url-pattern  | JobManager的日志URL配置。配置后可以通过URL跳转到JobManager日志，要求有日志归档服务，Flink本身并不提供已完成作业的日志收集功能。                                                      | -     | -     |
   | historyserver.log.taskmanager.url-pattern | 任务管理器的日志URL配置。配置后可以通过URL跳转到TaskManager日志，要求有日志归档服务，Flink本身并不提供已完成作业的日志收集功能。                                                          | -     | -     |
   | historyserver.web.refresh-interval        | HistoryServer网络前端的刷新间隔（毫秒）。                                                                                                          | 10000 | 10000 |
   | historyserver.web.ssl.enabled             | 启用HTTP访问HistoryServer网络前端。只有当全局SSL标志"security.ssl.enabled"设为"true"时才适用。                                                              | false | false |
      
   
   
8. 在"/opt/hadoopclient/Flink/flink/bin"目录下执行如下命令启动HistoryServer。 
   ```
   ./historyserver.sh start
   ```
   
   
9. 执行以下命令通过日志查看HistoryServer是否启动成功。 
   ```
   cd /opt/hadoopclient/Flink/flink/log
   ```
   查看"flink-root-historyserver-xxx.log"日志，日志中无报错且可以看到打印"Web frontend listening at\[ip\]:port"说明HistoryServer启动成功。
   
   
10. 登录HistoryServer页面。在浏览器输入"http://*historyserver.web.address* :*historyserver.web.port*"登录HistoryServer页面，如"192.168.x.x:8082"。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
安全模式需要修改"*客户端安装目录*/Flink/flink/conf/flink-conf.yaml"配置文件中的"jobmanager.web.allow-access-address"的配置，添加要访问HistoryServer页面的机器IP，才能正常访问页面。
#### HistoryServer API调用介绍
HistoryServer启动后，提供了如下API请求，使用方法如下：
- API调用格式：
  ```
  http://hostname:port/jobs/<jobid>/请求类型
  ```
  
- API调用示例，如作业jobid为"7684be6004e4e955c2a558a9bc463f65"的exceptions请求：
  ```
  http://hostname:port/jobs/7684be6004e4e955c2a558a9bc463f65/exceptions
  ```
  
 
#### HistoryServer接口调用类型
可用接口：
- /config
- /jobs/overview
- /jobs/*\<jobid\>*
- /jobs/*\<jobid\>*/vertices
- /jobs/*\<jobid\>*/config
- /jobs/*\<jobid\>*/exceptions
- /jobs/*\<jobid\>*/accumulators
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>*
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>*/subtasktimes
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>*/taskmanagers
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>*/accumulators
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>*/subtasks/accumulators
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>* /subtasks/*\<subtasknum\>*
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>* /subtasks/*\<subtasknum\>* /attempts/*\<attempt\>*
- /jobs/*\<jobid\>* /vertices/*\<vertexid\>* /subtasks/*\<subtasknum\>* /attempts/*\<attempt\>*/accumulators
- /jobs/*\<jobid\>*/plan
- /jobs/*\<jobid\>*/jobmanager/config
- /jobs/*\<jobid\>*/jobmanager/environment
- /jobs/*\<jobid\>*/jobmanager/log-url
- /jobs/\<jobid\>/taskmanagers/*\<taskmanagerid\>*/log-url
 
