
# 使用多级agent串联从本地采集静态日志保存到HDFS
#### 操作场景
该任务指导用户使用Flume从本地采集静态日志保存到HDFS上如下目录"/flume/test"。
本章节适用于MRS 3.x及之后版本。
#### 前提条件
- 已成功安装集群、HDFS及Flume服务、Flume客户端。
- 已创建用户**flume_hdfs**并授权验证日志时操作的HDFS目录和数据。
 
#### 操作步骤
1. 分别生成Flume角色服务端和客户端的证书和信任列表。 
   1. 以**omm** 用户登录Flume服务端所在节点。进入"${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Flume-1.9.0/flume/bin"目录。
      **cd ${BIGDATA_HOME}/FusionInsight_Porter_** **8.1.0.1** **/install/FusionInsight-Flume-1.9.0/flume/bin**
      
   
   2. 执行以下命令，生成并导出Flume角色服务端、客户端证书。 **sh geneJKS.sh -f** *密码* **-g** *密码*
      生成的证书在"${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Flume-1.9.0/flume/conf"路径下。其中：
      - "flume_sChat.jks"是Flume角色服务端的证书库，"flume_sChat.crt"是"flume_sChat.jks"证书的导出文件，"-f"配置项是证书和证书库的密码；
      
      - "flume_cChat.jks"是Flume角色客户端的证书库，"flume_cChat.crt"是"flume_cChat.jks"证书的导出文件，"-g"配置项是证书和证书库的密码；
      
      - "flume_sChatt.jks"和"flume_cChatt.jks"分别为Flume服务端、客户端SSL证书信任列表。
      
      
      ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
      本章节涉及到所有的用户自定义密码，需满足以下复杂度要求：
      - 至少包含大写字母、小写字母、数字、特殊符号4种类型字符
      
      - 至少8位，最多64位
      
      - 出于安全考虑，建议用户定期更换自定义密码（例如三个月更换一次），并重新生成各项证书和信任列表。
        
   
   
   
   
2. 在FusionInsight Manager管理界面，选择"系统 \> 权限 \> 用户"，选择"更多 \> 下载认证凭据"下载用户**flume_hdfs**的kerberos证书文件并保存在本地。
3. 配置Flume角色的服务端参数，并将配置文件上传到集群。 
   1. 以**omm** 用户登录任意一个Flume角色所在的节点。执行以下命令进入"${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Flume-1.9.0/flume/bin"。
      **cd ${BIGDATA_HOME}/FusionInsight_Porter_** **8.1.0.1** **/install/FusionInsight-Flume-1.9.0/flume/bin**
      
   
   2. 执行以下命令，生成并得到Flume服务端密钥库密码、信任列表密码和keystore-password加密的私钥信息。连续输入两次密码并确认，该密码是*flume_sChat.jks* 证书库的密码。
      **./genPwFile.sh**
      **cat password.property**
      
   
   3. 使用FusionInsight Manager界面中的Flume配置工具来配置服务端参数并生成配置文件。
      1. 登录FusionInsight Manager，选择"集群 \> *待操作集群的名称* \> 服务 \> Flume \> 配置工具"。
         图1选择配置工具   
         ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001164314476.png) 
      
      2. "Agent名"选择"server"，然后选择要使用的source、channel以及sink，将其拖到右侧的操作界面中并将其连接。 采用SpoolDir Source、File Channel和HDFS Sink，如[图2]所示。
         图2Flume配置工具示例   
         ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001259912644.png) 
      
      3. 双击对应的source、channel以及sink，根据实际环境并参考[表1]设置对应的配置参数。
         ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
         - 如果对应的Flume角色之前已经配置过服务端参数，为保证与之前的配置保持一致，在FusionInsight Manager界面选择"集群 \> *待操作集群的名称* \> 服务 \> Flume \> 实例"，选择相应的Flume角色实例，单击"实例配置"页面"flume.config.file"参数后的"下载文件"按钮，可获取已有的服务端参数配置文件。然后选择"集群 \> *待操作集群的名称* \> 服务 \> Flume \> 配置工具 \> 导入"，将该文件导入后再修改加密传输的相关配置项即可。
         
         - 导入配置文件时，建议配置source/channel/sink的各自的个数都不要超过40个，否则可能导致界面响应时间过长。
         
         - 不同的File Channel均需要配置一个不同的checkpoint目录。
           
      
      4. 单击"导出"，将配置文件"properties.properties"保存到本地。配置文件中包含认证密码信息可能存在安全风险，建议当前场景执行完毕后删除相关配置文件或加强安全管理。
          表1Flume角色服务端所需修改的参数列表 
         | 参数名称                   | 参数值填写规则                                                                                                                                                                                                                                                                                                                                                                                                                                   | 参数样例                                                                                                                                                                                                                             |
         |:---|:---|:---|
         | 名称                     | 不能为空，必须唯一。                                                                                                                                                                                                                                                                                                                                                                                                                                | test                                                                                                                                                                                                                             |
         | bind                   | avro source绑定的ip地址，此参数不能为空。须配置为服务端配置文件即将要上传的主机IP。                                                                                                                                                                                                                                                                                                                                                                                         | 192.168.108.11                                                                                                                                                                                                                   |
         | port                   | avro source监测的端口,此参数不能为空。须配置为未被使用的端口。                                                                                                                                                                                                                                                                                                                                                                                                     | 21154                                                                                                                                                                                                                            |
         | ssl                    | 是否启用SSL认证（基于安全要求，建议用户启用此功能）。 只有"Avro"类型的Source才有此配置项。 - true表示启用。  - false表示不启用。   | true                                                                                                                                                                                                                             |
         | keystore               | 服务端证书。                                                                                                                                                                                                                                                                                                                                                                                                                                    | ${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Flume-1.9.0/flume/conf/flume_sChat.jks                                                                                                                        |
         | keystore-password      | 密钥库密码，获取keystore信息所需密码。 输入[3.b]中获取的"password"值。                                                                                                                                                                                                                                                                                         | -                                                                                                                                                                                                                                |
         | truststore             | 服务端的SSL证书信任列表。                                                                                                                                                                                                                                                                                                                                                                                                                            | ${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Flume-1.9.0/flume/conf/flume_sChatt.jks                                                                                                                       |
         | truststore-password    | 信任列表密码，获取truststore信息所需密码。 输入[3.b]中获取的"password"值。                                                                                                                                                                                                                                                                                      | -                                                                                                                                                                                                                                |
         | dataDirs               | 缓冲区数据保存目录，默认为运行目录。配置多个盘上的目录可以提升传输效率，多个目录使用逗号分隔。如果为集群内，则可以指定在如下目录/srv/BigData/hadoop/dataX/flume/data，dataX为data1\~dataN。如果为集群外，则需要单独规划。                                                                                                                                                                                                                                                                                                   | /srv/BigData/hadoop/data1/flumeserver/data                                                                                                                                                                                       |
         | checkpointDir          | checkpoint 信息保存目录，默认在运行目录下。如果为集群内，则可以指定在如下目录/srv/BigData/hadoop/dataX/flume/checkpoint，dataX为data1\~dataN。如果为集群外，则需要单独规划。                                                                                                                                                                                                                                                                                                                 | /srv/BigData/hadoop/data1/flumeserver/checkpoint                                                                                                                                                                                 |
         | transactionCapacity    | 事务大小：即当前channel支持事务处理的事件个数。建议和Source的batchSize设置为同样大小，不能小于batchSize。                                                                                                                                                                                                                                                                                                                                                                      | 61200                                                                                                                                                                                                                            |
         | hdfs.path              | 写入HDFS的目录，此参数不能为空。                                                                                                                                                                                                                                                                                                                                                                                                                        | hdfs://hacluster/flume/test                                                                                                                                                                                                      |
         | hdfs.inUsePrefix       | 正在写入HDFS的文件的前缀。                                                                                                                                                                                                                                                                                                                                                                                                                           | TMP_                                                                                                                                                                                                                             |
         | hdfs.batchSize         | 一次写入HDFS的最大事件数目。                                                                                                                                                                                                                                                                                                                                                                                                                          | 61200                                                                                                                                                                                                                            |
         | hdfs.kerberosPrincipal | kerberos认证时用户，在安全版本下必须填写。安全集群需要配置此项，普通模式集群无需配置。                                                                                                                                                                                                                                                                                                                                                                                           | flume_hdfs                                                                                                                                                                                                                       |
         | hdfs.kerberosKeytab    | kerberos认证时keytab文件路径，在安全版本下必须填写。安全集群需要配置此项，普通模式集群无需配置。                                                                                                                                                                                                                                                                                                                                                                                   | /opt/test/conf/user.keytab 说明： user.keytab文件从下载用户**flume_hdfs**的kerberos证书文件中获取，另外，确保用于安装和运行Flume客户端的用户对user.keytab文件有读写权限。 |
         | hdfs.useLocalTimeStamp | 是否使用本地时间，取值为"true"或者"false"。                                                                                                                                                                                                                                                                                                                                                                                                              | true                                                                                                                                                                                                                             |
            
         
       
   
   4. 登录FusionInsight Manager，选择"集群 \> *待操作集群的名称* \> 服务 \> Flume"，在"角色"下单击"Flume"角色。
      图3单击Flume角色   
      ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001164154532.png) 
   
   5. 选择准备上传配置文件的节点行的"Flume"角色，单击"实例配置"页面"flume.config.file"参数后的"上传文件"，选择"properties.properties"文件完成操作。
      图4上传文件   
      ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001209714479.png)
      ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
      - 每个Flume实例均可以上传单独的服务端配置文件。
      
      - 更新配置文件需要按照此步骤操作，后台修改配置文件是不规范操作，同步配置时后台做的修改将会被覆盖。
        
   
   6. 单击"保存"，单击"确定"。
   
   7. 单击"完成"完成操作。
   
   
   
   
4. 配置Flume角色客户端参数。 
   1. 执行以下命令将生成的客户端证书（flume_cChat.jks）和客户端信任列表（flume_cChatt.jks）复制到客户端目录下，如"/opt/flume-client/fusionInsight-flume-1.9.0/conf/"（要求已安装Flume客户端），其中**10.196.26.1** 为客户端所在节点业务平面的IP地址。
      **scp ${BIGDATA_HOME}/FusionInsight_Porter_** **8.1.0.1** **/install/FusionInsight-Flume-1.9.0/flume/conf/flume_cChat.jks user@10.196.26.1:/opt/flume-client/fusionInsight-flume-1.9.0/conf/**
      **scp ${BIGDATA_HOME}/FusionInsight_Porter_** **8.1.0.1** **/install/FusionInsight-Flume-1.9.0/flume/conf/flume_cChatt.jks user@10.196.26.1:/opt/flume-client/fusionInsight-flume-1.9.0/conf/**
      ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
      复制过程中需要输入客户端所在主机（如**10.196.26.1** ）**user**用户的密码。
      
   
   2. 以**user** 用户登录解压Flume客户端的节点。执行以下命令进入客户端目录"/opt/flume-client/fusionInsight-flume-1.9.0/bin"。
      **cd**opt/flume-client/fusionInsight-flume-1.9.0/bin
      
   
   3. 执行以下命令，生成并得到Flume客户端密钥库密码、信任列表密码和keystore-password加密的私钥信息。连续输入两次密码并确认，该密码是别名为*flumechatclient* 的证书和*flume_cChat.jks* 证书库的密码。
      **./genPwFile.sh**
      **cat password.property**
      ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
      若产生以下错误提示，可执行命令**export JAVA_HOME=** *JDK* *路径*进行处理。
      ```
      JAVA_HOME is null in current user,please install the JDK and set the JAVA_HOME
      ```
      
   
   4. 执行**echo $SCC_PROFILE_DIR** 检查SCC_PROFILE_DIR环境变量是否为空。
      - 是，执行**source .sccfile**。
      
      - 否，执行[4.e]。
       
   
   5. 使用FusionInsight Manager界面中的Flume配置工具来配置Flume角色客户端参数并生成配置文件。
      1. 登录FusionInsight Manager，选择"集群 \> *待操作集群的名称* \> 服务 \> Flume \> 配置工具"。
         图5选择配置工具   
         ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001163995984.png) 
      
      2. "Agent名"选择"client"，然后选择要使用的source、channel以及sink，将其拖到右侧的操作界面中并将其连接。 采用SpoolDir Source、File Channel和HDFS Sink，如[图6]所示。
         图6Flume配置工具示例   
         ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001260072720.png) 
      
      3. 双击对应的source、channel以及sink，根据实际环境并参考[表2]设置对应的配置参数。
         ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
         - 如果对应的Flume角色之前已经配置过客户端参数，为保证与之前的配置保持一致，可以到"*客户端安装目录* /fusioninsight-flume-1.9.0/conf/properties.properties"获取已有的客户端参数配置文件。然后登录FusionInsight Manager，选择"集群 \> *待操作集群的名称* \> 服务 \> Flume \> 配置工具 \> 导入"，将该文件导入后再修改加密传输的相关配置项即可。
         
         - 导入配置文件时，建议配置中source/channel/sink的各自的个数都不要超过40个，否则可能导致界面响应时间过长。
           
      
      4. 单击"导出"，将配置文件"properties.properties"保存到本地。
          表2Flume角色客户端所需修改的参数列表 
         | 参数名称                | 参数值填写规则                                                                                                                                                                                                                                                                                                                                                                                                                                   | 参数样例                                                              |
         |:---|:---|:---|
         | 名称                  | 不能为空，必须唯一。                                                                                                                                                                                                                                                                                                                                                                                                                                | test                                                              |
         | spoolDir            | 待采集的文件所在的目录路径，此参数不能为空。该路径需存在，且对flume运行用户有读写执行权限。                                                                                                                                                                                                                                                                                                                                                                                          | /srv/BigData/hadoop/data1/zb                                      |
         | trackerDir          | flume采集文件信息元数据保存路径。                                                                                                                                                                                                                                                                                                                                                                                                                       | /srv/BigData/hadoop/data1/tracker                                 |
         | batch-size          | Flume一次发送数据的最大事件数。                                                                                                                                                                                                                                                                                                                                                                                                                        | 61200                                                             |
         | dataDirs            | 缓冲区数据保存目录，默认为运行目录。配置多个盘上的目录可以提升传输效率，多个目录使用逗号分隔。如果为集群内，则可以指定在如下目录/srv/BigData/hadoop/dataX/flume/data，dataX为data1\~dataN。如果为集群外，则需要单独规划。                                                                                                                                                                                                                                                                                                   | /srv/BigData/hadoop/data1/flume/data                              |
         | checkpointDir       | checkpoint信息保存目录，默认在运行目录下。如果为集群内，则可以指定在如下目录/srv/BigData/hadoop/dataX/flume/checkpoint，dataX为data1\~dataN。如果为集群外，则需要单独规划。                                                                                                                                                                                                                                                                                                                  | /srv/BigData/hadoop/data1/flume/checkpoint                        |
         | transactionCapacity | 事务大小：即当前channel支持事务处理的事件个数，建议和Source的batchSize设置为同样大小，不能小于batchSize。                                                                                                                                                                                                                                                                                                                                                                      | 61200      |
         | hostname            | 要发送数据的主机名或者IP，此参数不能为空。须配置为与之相连的avro source所在的主机名或IP。                                                                                                                                                                                                                                                                                                                                                                                      | 192.168.108.11                                                    |
         | port                | avro sink监测的端口,此参数不能为空。须配置为与之相连的avro source监测的端口。                                                                                                                                                                                                                                                                                                                                                                                         | 21154                                                             |
         | ssl                 | 是否启用SSL认证（基于安全要求，建议用户启用此功能）。 只有"Avro"类型的Source才有此配置项。 - true表示启用。  - false表示不启用。   | true                                                              |
         | keystore            | 服务端生成的flume_cChat.jks证书。                                                                                                                                                                                                                                                                                                                                                                                                                  | /opt/flume-client/fusionInsight-flume-1.9.0/conf/flume_cChat.jks  |
         | keystore-password   | 密钥库密码，获取keystore信息所需密码。 输入[4.c]中获取的"password"值。                                                                                                                                                                                                                                                                                         | -                                                                 |
         | truststore          | 服务端的SSL证书信任列表。                                                                                                                                                                                                                                                                                                                                                                                                                            | /opt/flume-client/fusionInsight-flume-1.9.0/conf/flume_cChatt.jks |
         | truststore-password | 信任列表密码，获取truststore信息所需密码。 输入[4.c]中获取的"password"值。                                                                                                                                                                                                                                                                                   | -                                                                 |
            
         
       
   
   6. 将"properties.properties"文件上传到Flume客户端安装目录下的"flume/conf/"下。
   
   
   
   

5. 验证日志是否传输成功。 
   1. 以具有HDFS组件管理权限的用户登录FusionInsight Manager，具体请参见[访问FusionInsight Manager（MRS 3.x及之后版本）](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_2124.html)。在FusionInsight Manager界面选择"集群 \> *待操作集群的名称* \> 服务 \> HDFS"，单击"NameNode(*节点名称*，主)"对应的链接，打开HDFS WebUI，然后选择"Utilities \> Browse the file system"
   
   2. 观察HDFS上"/flume/test"目录下是否有产生数据。
      图7查看HDFS目录和文件   
      ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001087376587.png) 
   
   
   
   
 
