更新时间:2024-10-21 GMT+08:00
分享

使用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
    2. 选择“集群 > 服务 > Loader”。
    3. 单击“LoaderServer(节点名称,主)”打开“Loader WebUI”界面。
      图1 Loader WebUI界面

  2. 单击“新建作业”,进入“基本信息”界面,创建作业基本信息。

    图2 “基本信息”界面
    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),输入配置连接参数,单击“测试”验证连接是否可用,待提示“测试成功”后单击“确定”

    • 与关系数据库连接时,可以选择通用数据库连接器(generic-jdbc-connector)或者专用数据库连接器(oracle-connector、oracle-partition-connector、mysql-fastpath-connector),专用数据库连接器特别针对具体数据库类型进行优化,相对通用数据库连接器来说,导出、导入速度更快。
    • 使用mysql-fastpath-connector时,要求在NodeManager节点上有MySQL的mysqldumpmysqlimport命令,并且此两个命令所属MySQL客户端版本与MySQL服务器版本兼容,如果没有这两个命令或版本不兼容,请参考http://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算子配置项中使用宏定义

    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算子帮助表3

    表3 算子输入、输出参数设置

    输入类型

    输出类型

    表输入

    文件输出

    图3 算子操作方法示意

    设置数据保存信息并运行作业

  6. 单击“下一步”,进入“输出设置”界面,在“存储类型”中选择“HDFS”,设置数据保存方式。

    表4 输出设置参数

    参数名

    说明

    示例

    文件类型

    文件导入后保存的类型:

    • “TEXT_FILE”:导入文本文件并保存为文本文件
    • “SEQUENCE_FILE”: 导入文本文件并保存在“sequence file”文件格式
    • “BINARY_FILE”:以二进制流的方式导入文件,可以导入任何格式的文件

    TEXT_FILE

    压缩格式

    在下拉菜单中选择数据导入HDFS/OBS后保存文件的压缩格式,未配置或选择“NONE”表示不压缩数据。

    NONE

    输出目录

    数据导入到HDFS/OBS里存储的保存目录。

    说明:

    路径参数可以使用宏定义,具体请参考Loader算子配置项中使用宏定义

    /user/test

    文件操作方式

    数据导入时的操作行为。全部数据从输入路径导入到目标路径时,先保存在临时目录,然后再从临时目录复制转移至目标路径,任务完成时删除临时路径的文件。转移临时文件存在同名文件时有以下行为:

    • “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 查看作业

相关文档