
# 使用Loader从关系型数据库导入数据到HDFS/OBS
#### 操作场景
该任务指导用户使用Loader将数据从关系型数据库导入到HDFS/OBS。
#### 前提条件
- 创建或获取该任务中创建Loader作业的业务用户和密码。
- 确保用户已授权访问作业执行时操作的HDFS/OBS目录和数据。
- 获取关系型数据库使用的用户和密码。
- 检查磁盘空间，确保没有出现告警且余量满足导入、导出数据的大小。
- 如果设置的作业需要使用指定YARN队列功能，该用户需要已授权有相关YARN队列的权限。
- 设置任务的用户需要获取该任务的执行权限，并获取该任务对应的连接的使用权限。
- 操作前需要进行如下配置：
  1. 获取关系型数据库对应的驱动jar包保存在Loader服务主备节点的lib路径："${BIGDATA_HOME}/FusionInsight_Porter_*xxx*/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib"。
  
  2. 使用root用户在主备节点分别执行以下命令修改权限： **cd** **${BIGDATA_HOME}/FusionInsight_Porter_*xxx*** **/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib**
     *chown omm:wheel* *jar包文件名*
     *chmod 600* *jar包文件名*
     
  
  3. 登录FusionInsight Manager系统，选择"集群 \> 服务 \> Loader \> 更多 \> 重启服务"，输入管理员密码重启Loader服务。
   
 
#### 操作步骤
**设置作业基本信息**
1. 登录"Loader WebUI"界面。 
   1. 登录FusionInsight Manager系统，具体请参见[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   2. 选择"集群 \> 服务 \> Loader"。
   
   3. 单击"LoaderServer(*节点名称* ，主)"打开"Loader WebUI"界面。
      图1Loader WebUI界面   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724866733.png "点击放大") 
   
   
   
   
2. 单击"新建作业"，进入"基本信息"界面，创建作业基本信息。 
   图2"基本信息"界面   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724747845.png "点击放大")
   1. 在"名称"中输入作业的名称。
   
   2. 在"类型"中选择"导入"。
   
   3. 在"组"中设置作业所属组，默认没有已创建的组，单击"添加"创建一个新的组，输入组的名称，单击"确定"保存。
   
   4. 在"队列"中选择执行该作业的YARN队列。默认值"root.default"。
   
   5. 在"优先级"中选择执行该作业的YARN队列优先级。默认值为"NORMAL"。可选值为"VERY_LOW"、"LOW"、"NORMAL"、"HIGH"和"VERY_HIGH"。
   
   
   
   
3. 在"连接"区域，单击"添加"新建一个连接，在"连接器"中选择"generic-jdbc-connector"或者专用数据库连接器（oracle-connector、oracle-partition-connector、mysql-fastpath-connector），输入配置连接参数，单击"测试"验证连接是否可用，待提示"测试成功"后单击"确定"。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 与关系数据库连接时，可以选择通用数据库连接器（generic-jdbc-connector）或者专用数据库连接器（oracle-connector、oracle-partition-connector、mysql-fastpath-connector），专用数据库连接器特别针对具体数据库类型进行优化，相对通用数据库连接器来说，导出、导入速度更快。
   
   - 使用mysql-fastpath-connector时，要求在NodeManager节点上有MySQL的**mysqldump** 和**mysqlimport** 命令，并且此两个命令所属MySQL客户端版本与MySQL服务器版本兼容，如果没有这两个命令或版本不兼容，请参考<https://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html>，安装MySQL client applications and tools。
    
   表1"generic-jdbc-connector"连接参数 
   | 参数名       | 说明                                                                                                                                                                                                                                                                                                                                                 | 示例                                                                                                                                                                                                                                                                                |
   |:---|:---|:---|
   | 名称        | 关系型数据库连接的名称。                                                                                                                                                                                                                                                                                                                                       | dbName                                                                                                                                                                                                                                                                            |
   | JDBC驱动程序类 | JDBC驱动类名。                                                                                                                                                                                                                                                                                                                                          | oracle.jdbc.driver.OracleDriver                                                                                                                                                                                                                                                   |
   | JDBC连接字符串 | JDBC连接字符串。                                                                                                                                                                                                                                                                                                                                         | jdbc:oracle:thin:@//10.16.0.1:1521/oradb                                                                                                                                                                                                                                          |
   | 用户名       | 连接数据库使用的用户名。                                                                                                                                                                                                                                                                                                                                       | omm                                                                                                                                                                                                                                                                               |
   | 密码        | 连接数据库使用的密码。                                                                                                                                                                                                                                                                                                                                        | xxxx                                                                                                                                                                                                                                                                              |
   | JDBC连接属性  | JDBC连接属性，单击"添加"手动添加。 - 名称：连接属性名  - 值：连接属性值   | - 名称：socketTimeout  - 值：20   |
      
   **设置数据源信息**
   
   
4. 单击"下一步"，进入"输入设置"界面，设置数据源信息。 
   表2输入设置参数 
   | 参数名     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 示例                                                |
   |:---|:---|:---|
   | 架构名称    | "表方式"模式下存在，数据库模式名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | public                                            |
   | 表名      | "表方式"模式下存在，数据库表名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | test                                              |
   | SQL语句   | "SQL方式"模式下存在，配置要查询的SQL语句，使Loader可通过SQL语句查询结果并作为导入的数据。SQL语句需要有查询条件"WHERE ${CONDITIONS}"，否则无法正常工作。例如，"select \* from TABLE WHERE A\>B and ${CONDITIONS}"。如果同时配置"表列名"，SQL语句中查询的列将被"表列名"配置的列代替。不能和"架构名称"、"表名"同时配置。 说明： SQL Where语句可以使用宏定义，具体请参考[Loader算子配置项中使用宏定义](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1153.html)。                                                                                                                                                                                                                                                                                                                                  | select \* from TABLE WHERE A\>B and ${CONDITIONS} |
   | 表列名     | 配置要导入的列，使Loader将列的内容全部导入。配置多个字段时使用","分隔。 如果不配置，则导入所有列，同时"Select \*"的顺序作为列的位置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | id,name                                           |
   | 分区列名    | 指定数据库表的一列，根据该列来划分要导入的数据，在Map任务中用于分区。建议配置主键字段。 说明： - 分区列必须有索引，如果没有索引，请不要指定分区列，指定没有索引的分区列会导致数据库服务器磁盘I/O繁忙，影响其他业务访问数据库，并且导入时间长。  - 在有索引的多个字段中，选择字段值最离散的字段作为分区列，不离散的分区列会导致多个导入MR任务负载不均衡。  - 分区列的排序规则必须支持大小写敏感，否则在数据导入过程中，可能会出现数据丢失。  - 不建议分区列选择类型为float或double的字段，因为精度问题，可能导致分区列字段的最小值、最大值所在记录无法导入。   | id                                                |
   | 分区列空值   | 配置对数据库列中为null值记录的处理方式。 - 值为"true"时，分区列的值为null的数据会被处理；  - 值为"false"时，分区列的值为null的数据不会被处理。                                                                                                                                                                                                                                                                                                                                                                           | true                                              |
   | 是否指定分区列 | 是否指定分区列。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | true                                              |
      
   **设置数据转换**
   
   
5. 单击"下一步"，进入"转换"界面，设置数据传输过程中的转换操作。算子的选择和参数设置具体请参考[Loader算子帮助](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1119.html)及[表3]。
   
    表3算子输入、输出参数设置 
   | 输入类型 | 输出类型 |
   |:---|:---|
   | 表输入  | 文件输出 |
      
   图3算子操作方法示意   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724867713.png "点击放大")
   **设置数据保存信息并运行作业**
   
   
6. 单击"下一步"，进入"输出设置"界面，在"存储类型"中选择"HDFS"，设置数据保存方式。 
   表4输出设置参数 
   | 参数名                                                       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 示例         |
   |:---|:---|:---|
   | 文件类型                                                      | 文件导入后保存的类型： - "TEXT_FILE"：导入文本文件并保存为文本文件  - "SEQUENCE_FILE"： 导入文本文件并保存在"sequence file"文件格式  - "BINARY_FILE"：以二进制流的方式导入文件，可以导入任何格式的文件                                                                                                                                                                                                                                                                                                                                                                                                                          | TEXT_FILE  |
   | 压缩格式                                                      | 在下拉菜单中选择数据导入HDFS/OBS后保存文件的压缩格式，未配置或选择"NONE"表示不压缩数据。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | NONE       |
   | 输出目录                                                      | 数据导入到HDFS/OBS里存储的保存目录。 说明： 路径参数可以使用宏定义，具体请参考[Loader算子配置项中使用宏定义](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1153.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | /user/test |
   | 是否执行前删除文件 （适用于MRS 3.5.0及以后版本） | 作业运行前是否删除根据文件名标识生成的文件，以做到数据可以重入。 - false（默认值）：作业运行前不执行删除文件动作。  - true：作业运行前会删除指定文件名的文件，对应的"文件操作方式"为"OVERRIDE"直接覆盖旧文件。仅支持如下连接器： - generic-jdbc-connector  - oracle-connector  - mysql-fastpath-connector                                                                                                                                                                                                                                                                                                                                                             | false      |
   | 文件名标识 （适用于MRS 3.5.0及以后版本）    | 文件名标识，用来生成导入的文件名。 - 文件名格式：import_part_xxx_000000000。 - "xxx"为文件名标识。  - 取值范围：\[0-9\]，\[a-z\]，\[A-Z\]，中划线，下划线和点。  - 长度：\[1-255\]。    - "是否执行前删除文件"为"true"时必填。                                                                                                                                                                                                                                                                                                                                                                                              | 12         |
   | 文件操作方式                                                    | 数据导入时的操作行为。全部数据从输入路径导入到目标路径时，先保存在临时目录，然后再从临时目录复制转移至目标路径，任务完成时删除临时路径的文件。转移临时文件存在同名文件时有以下行为： - "OVERRIDE"：直接覆盖旧文件。  - "RENAME"：重命名新文件。无扩展名的文件直接增加字符串后缀，有扩展名的文件在文件名增加字符串后缀。字符串具有唯一性。  - "APPEND"：在旧文件尾部合并新文件内容。合并操作只是简单的追加，不保证追加文件是否可以使用。例如文本文件可合并，压缩文件合并后可能无法使用。  - "IGNORE"：保留旧文件，不复制新文件。  - "ERROR"：转移过程中出现同名文件时任务将停止执行并报错，已转移的文件导入成功，同名的文件及未转移的文档导入失败。   | OVERRIDE   |
   | Map数                                                      | 配置数据操作的MapReduce任务中同时启动的Map数量。不可与"Map数据块大小"同时配置。参数值必须小于或等于3000。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | -          |
   | Map数据块大小                                                  | 配置数据操作的MapReduce任务中启动Map所处理的数据大小，单位为MB。参数值必须大于或等于100，建议配置值为1000。不可与"Map数"同时配置。当使用关系型数据库连接器时，不支持"Map数据块大小"，请配置"Map数"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 1000       |
      
   
   
7. 单击"保存并运行"，开始保存并运行作业。 
   **查看作业完成情况**
   
   
8. 进入"Loader WebUI"界面，待"状态"显示"成功"则说明作业完成。 
   图4查看作业   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676908370.png "点击放大")
   
   
 
