更新时间:2024-08-16 GMT+08:00

使用Loader导出MRS集群内数据

操作场景

该任务指导用户完成将数据从MRS导出到外部的数据源的工作。

一般情况下,用户可以手工在Loader界面管理数据导入导出作业。当用户需要通过shell脚本来更新与运行Loader作业时,必须对已安装的Loader客户端进行配置。

前提条件

  • 创建或获取该任务中创建Loader作业的业务用户和密码。
  • 确保用户已授权访问作业执行时操作的目录、HBase表和数据。
  • 获取外部数据源(SFTP服务器或关系型数据库)使用的用户和密码。
  • 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。
  • 使用Loader从HDFS/OBS导出数据时,确保HDFS/OBS数据源的输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。
  • 如果设置的任务需要使用指定Yarn队列功能,该用户需要已授权有相关Yarn队列的权限。
  • 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。

操作步骤

  1. 是否第一次从Loader导出数据到关系型数据库?

    • 是,执行2
    • 否,执行3

  2. 修改关系型数据库对应的驱动jar包文件权限。

    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服务。

  3. 登录“Loader WebUI”界面。

    1. 登录FusionInsight Manager系统,具体请参见访问集群Manager
    2. 选择“集群 > 服务 > Loader”。
    3. 单击“LoaderServer(节点名称,主)”打开“Loader WebUI”界面。
      图1 Loader WebUI界面

  4. 创建Loader数据导出作业,单击“新建作业”,在“1.基本信息”选择所需要的作业类型,然后单击“下一步”。

    1. “名称”输入作业的名称,“类型”选择“导出”即导出。
    2. “连接”选择一个连接。默认没有已创建的连接,单击“添加”创建一个新的连接,完成后单击“测试”,测试是否可用,待提示成功后单击“确定”。
      表1 连接配置参数一览表

      连接器类型

      参数名

      说明

      generic-jdbc-connector

      JDBC驱动程序类

      JDBC驱动类名。

      JDBC连接字符串

      JDBC连接字符串。

      用户名

      连接数据库使用的用户名。

      密码

      连接数据库使用的密码。

      JDBC连接属性

      JDBC连接属性,单击“添加”手动添加。

      • 名称:连接属性名
      • 值:连接属性值

      hdfs-connector

      -

      -

      oracle-connector

      JDBC连接字符串

      用户连接数据库的连接字符串。

      用户名

      连接数据库使用的用户名。

      密码

      连接数据库使用的密码。

      连接属性

      连接属性,单击“添加”手动添加。

      • 名称:连接属性名
      • 值:连接属性值

      mysql-fastpath-connector

      JDBC连接字符串

      JDBC连接字符串。

      用户名

      连接数据库使用的用户名。

      密码

      连接数据库使用的密码。

      连接属性

      连接属性,单击“添加”手动添加。

      • 名称:连接属性名
      • 值:连接属性值

      sftp-connector

      Sftp服务器的IP

      SFTP服务器的IP地址。

      Sftp服务器端口

      SFTP服务器的端口号。

      Sftp用户名

      访问SFTP服务器的用户名。

      Sftp密码

      访问SFTP服务器的密码。

      Sftp公钥

      Sftp服务器公钥。

      oracle-partition-connector

      JDBC驱动程序类

      JDBC驱动类名。

      JDBC连接字符串

      JDBC连接字符串。

      用户名

      连接数据库使用的用户名。

      密码

      连接数据库使用的密码。

      连接属性

      连接属性,单击“添加”手动添加。

      • 名称:连接属性名
      • 值:连接属性值
    3. “组”设置“作业”所属组,默认没有已创建的组,单击“添加”创建一个新的组,单击“确定”保存。
    4. “队列”设置Loader的任务在指定的Yarn队列中执行。默认值“root.default”表示任务在“default”队列中执行。
    5. “优先级”设置Loader的任务在指定的Yarn队列中的优先级。可选值为“VERY_LOW”、“LOW”、“NORMAL”、“HIGH”和“VERY_HIGH”。默认值为“NORMAL”。

  5. 在“2.输入设置”,设置数据来源,然后单击“下一步”。

    创建或者编辑Loader作业时,在配置SFTP路径、HDFS/OBS路径、SQL的Where条件等参数时,可以使用宏定义,具体请参考Loader算子配置项中使用宏定义章节。

    表2 输入配置参数一览表

    源文件类型

    参数名

    解释说明

    HDFS/OBS

    输入目录

    从HDFS/OBS导出时的输入路径。

    路径过滤器

    配置通配符对源文件的输入路径包含的目录进行过滤。输入路径“输入目录”不参与过滤。配置多个过滤条件时使用逗号隔开,配置为空时表示不过滤目录。不支持正则表达式过滤。

    文件过滤器

    配置通配符对源文件的输入文件名进行过滤。配置多个过滤条件时使用逗号隔开。不能配置为空。不支持正则表达式过滤。

    文件类型

    文件导入类型:

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

    文件分割方式

    选择按FILE文件或SIZE大小分割源文件成多份,作为数据导出的MapReduce任务中各个map的输入文件。

    Map数

    配置数据操作的MapReduce任务中同时启动的map数量。不可与“Map数据块大小”同时配置。参数值必须小于或等于“3000”。

    Map数据块大小

    配置数据操作的MapReduce任务中启动map所处理的数据大小,单位为MB。参数值必须大于或等于“100”,建议配置值为“1000”。不可与“Map数”同时配置。当使用关系型数据库连接器时,不支持“Map数据块大小”,请配置“Map数”。

    HBASE

    HBase实例

    在HBase作业中,Loader支持从集群可添加的所有HBase服务实例中选择任意一个。如果选定的HBase服务实例在集群中未添加,则此作业无法正常运行。

    个数

    配置数据操作的MapReduce任务中同时启动的map数量。参数值必须小于或等于“3000”。

    HIVE

    Hive实例

    在Hive作业中,Loader支持从集群可添加的所有Hive服务实例中选择任意一个。如果选定的Hive服务实例在集群中未添加,则此作业无法正常运行。

    个数

    配置数据操作的MapReduce任务中同时启动的map数量。参数值必须小于或等于“3000”。

    SPARK

    Spark实例

    仅支持SparkSQL存取Hive数据。在SparkSQL作业中,Loader支持从集群可添加的所有Spark服务实例中选择任意一个。如果选定的Spark服务实例在集群中未添加,则此作业无法正常运行。

    个数

    配置数据操作的MapReduce任务中同时启动的map数量。参数值必须小于或等于“3000”。

  6. 在“3.转换”设置数据传输过程中的转换操作。

    确认Loader创建的数据操作作业中,源数据的值是否满足直接使用需求而不进行转换,例如大小写转换、截取、拼接和分隔。

    • 满足需求,请单击“下一步”。
    • 不满足需求,请执行6.a6.d
    1. 默认没有已创建的转换步骤,可拖动左侧样例到编辑框,添加一个新的转换步骤。
    2. 完整的转换流程包含以下类型,每个类型请根据业务需要进行选择。
      1. 输入类型,第一个转换步骤,仅添加一种,任务涉及HBase或关系型数据库必须添加。
      2. 转换类型,中间转换步骤,可添加一种以上或不添加。
      3. 输出类型,最后一个转换步骤,仅添加一种,任务涉及HBase或关系型数据库必须添加。
        表3 样例一览表

        类型

        描述

        输入类型

        • CSV文件输入:CSV文件输入步骤,配置分隔符以转换生成多个字段。
        • 固定宽度文件输入:文本文件输入步骤,配置截取字符或字节的长度以转换生成多个字段。
        • 表输入:关系型数据输入步骤,配置数据库的指定列为输入的字段。
        • HBase输入:HBase表输入步骤,配置HBase表的列定义到指定字段。
        • HTML输入:HTML网页数据输入步骤,配置获取HTML网页文件目标数据到指定字段。
        • Hive输入:Hive表输入步骤,配置Hive表的列定义到指定字段。
        • Spark输入:SparkSQL表输入步骤,配置SparkSQL表的列定义到指定字段。仅支持存取Hive数据。

        转换类型

        • 长整型时间转换:长整型日期转换步骤,配置长整型数值与日期的转换。
        • 空值转换:空值转换步骤,配置指定值替换空值。
        • 随机值转换:随机数据生成步骤,配置新增值为随机数据的字段。
        • 增加常量字段:增加常量步骤,配置直接生成常量字段。
        • 拼接转换:拼接字段步骤,配置已生成的字段通过连接符连接,转换出新的字段。
        • 分隔转换:分隔字段步骤,配置已生成的字段通过分隔符分隔,转换出新的字段。
        • 取模转换:取模运算步骤,配置已生成的字段通过取模,转换出新的字段。
        • 剪切字符串:字符串截取步骤,配置已生成的字段通过指定位置截取,转换出新的字段。
        • EL操作转换:计算器,可以对字段值进行运算,目前支持的算子有:md5sum、sha1sum、sha256sum和sha512sum等。
        • 字符串大小写转换:字符串转换步骤,配置已生成的字段通过大小写变换,转换出新的字段。
        • 字符串逆序转换:字符串逆序步骤,配置已生成的字段通过逆序,转换出新的字段。
        • 字符串空格清除转换:字符串空格清除步骤,配置已生成的字段通过清除空格,转换出新的字段。
        • 过滤行转换:过滤行步骤,配置逻辑条件过滤掉含触发条件的行。
        • 更新域:更新域步骤,配置当满足某些条件时,更新指定字段的值。

        输出类型

        • 文件输出:文本文件输出步骤,配置已生成的字段通过分隔符连接并输出到文件。
        • 表输出:关系型数据库输出步骤,配置输出的字段对应到数据库的指定列。
        • HBase输出:HBase表输出步骤,配置已生成的字段输出到HBase表的列。
        • Hive输出:Hive表输出步骤,配置已生成的字段输出到Hive表的列。
        • Spark输出:SparkSQL表输出步骤,配置已生成的字段输出到SparkSQL表的列。仅支持存取Hive数据。

        编辑栏包括以下几种任务:

        • 重命令:重命名样例。
        • 编辑:编辑步骤转换,参考6.c
        • 删除:删除样例。

          也可使用快捷键“Del”删除。

    3. 单击“编辑”,编辑步骤转换信息,配置字段与数据。

      步骤转换信息中的具体参数设置请参考Loader算子帮助

      转换步骤配置不正确时,传输的数据将无法转换并成为脏数据,脏数据标记规则如下:

      • 任意输入类型步骤中,原数据包含字段的个数小于配置字段的个数,或者原数据字段值与配置字段的类型不匹配时,全部数据成为脏数据。
      • “CSV文件输入”步骤中,“验证输入字段”检验输入字段与值的类型匹配情况,检查不匹配时跳过该行,当前行成为脏数据。
      • “固定宽度文件输入”步骤中,“固定长度”指定字段分割长度,长度大于原字段值的长度则数据分割失败,当前行成为脏数据。
      • “HBase输入”步骤中,“HBase表名”指定HBase表名不正确,或者“主键”没有配置主键列,全部数据成为脏数据。
      • 任意转换类型步骤中,转换失败的行成为脏数据。例如“分隔转换”步骤中,生成的字段个数小于配置字段的个数,或者原数据不能转换为String类型,当前行成为脏数据。
      • “过滤行转换”步骤中,被筛选条件过滤的行成为脏数据。
      • “取模转换”步骤中,原字段值为“NULL”,当前行成为脏数据。
    4. 单击“下一步”。

  7. 在“4.输出设置”,设置数据保存目标位置,然后单击“保存”保存作业或“保存并运行”,保存作业并运行作业。

    表4 输出配置参数一览表

    连接类型

    参数名

    解释说明

    sftp-connector

    输出路径

    SFTP服务器中导出文件的路径或者文件名,如果连接器配置多个地址此处可对应使用分号分隔多个路径或者文件名,数量需要与连接器中服务器的数量一致。

    文件操作方式

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

    • “OVERRIDE”:直接覆盖旧文件。
    • “RENAME”:重命名新文件。无扩展名的文件直接增加字符串后缀,有扩展名的文件在文件名增加字符串后缀。字符串具有唯一性。
    • “APPEND”:在旧文件尾部合并新文件内容。合并操作只是简单的追加,不保证追加文件是否可以使用。例如文本文件可合并,压缩文件合并后可能无法使用。
    • “IGNORE”:保留旧文件,不复制新文件。
    • “ERROR”:转移过程中出现同名文件时任务将停止执行并报错,已转移的文件导入成功,同名的文件及未转移的文档导入失败。

    编码类型

    导出文件的编码格式,如UTF-8。导出文本文件时才能配置。

    压缩

    使用SFTP协议导数据时,是否开启压缩传输功能以减小带宽使用。“true”为开启压缩,“false”为关闭压缩。

    hdfs-connector

    输出路径

    导出文件在HDFS/OBS的输出目录或者文件名。

    文件格式

    文件导出类型:

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

    压缩格式

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

    自定义压缩格式

    自定义压缩格式类型的名称。

    generic-jdbc-connector

    架构名称

    数据库模式名。

    表名

    数据库表名,用于最终保存传输的数据。

    临时表

    数据库临时表的表名,用于临时保存传输过程中的数据,字段需要和“表名”配置的表一致。

    oracle-partition-connector

    架构名称

    数据库模式名。

    表名

    数据库表名,用于最终保存传输的数据。

    临时表

    数据库临时表的表名,用于临时保存传输过程中的数据,字段需要和“表名”配置的表一致。

    oracle-connector

    表名

    目标表,用于存储数据。

    列名

    指定要写入的列名,没有指定的列允许被设置为空值或者默认值。

    mysql-fastpath-connector

    架构名称

    数据库模式名。

    表名

    数据库表名,用于最终保存传输的数据。

    临时表名

    临时表名称,用于预存数据,作业执行成功后,再将数据转移到正式表。

  8. 已创建的作业可以在“Loader WebUI”界面上进行浏览,可进行启动、停止、复制、删除、编辑和查看历史信息操作。

    图2 查看Loader作业