更新时间:2024-05-11 GMT+08:00

使用Loader导入数据

操作场景

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

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

前提条件

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

操作步骤

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

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

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

    1. 登录Loader服务的主备管理节点,获取关系型数据库对应的驱动jar包保存在Loader服务主备节点的lib路径:“${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib”。

      此处版本号8.1.0.1为示例,具体以实际环境的版本号为准。

    2. 使用root用户在Loader服务主备节点分别执行以下命令修改权限:

      cd ${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/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系统,具体请参见访问FusionInsight Manager(MRS 3.x及之后版本)
    2. 选择“集群 > 待操作集群名称 > 服务 > Loader”。
    3. 单击“LoaderServer(节点名称,主)”打开“Loader WebUI”界面。
      图1 Loader WebUI界面

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

    1. “名称”输入作业的名称,“类型”选择“导入”。
    2. “连接”选择一个连接。默认没有已创建的连接,单击“添加”创建一个新的连接,完成后单击“测试”,测试是否可用,待提示成功后单击“确定”。
      MRS与外部数据源交换数据和文件时需要连接数据源,“连接”表示连接数据源时的连接参数集合。
      表1 连接配置参数一览表

      连接器类型

      参数名

      说明

      generic-jdbc-connector

      JDBC驱动程序类

      JDBC驱动类名。

      JDBC连接字符串

      JDBC连接字符串。

      用户名

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

      密码

      连接数据库使用的密码。

      JDBC连接属性

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

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

      ftp-connector

      FTP服务器的IP

      FTP服务器的IP地址。

      FTP服务器端口

      FTP服务器的端口号。

      FTP用户名

      访问FTP服务器的用户名。

      FTP密码

      访问FTP服务器的密码。

      FTP模式

      设置FTP访问模式,“ACTIVE”表示主动模式,“PASSIVE”表示被动模式。不指定参数值,默认为被动模式。

      FTP协议

      设置FTP传输协议:

      • “FTP”:FTP协议。
      • “SSL_EXPLICIT”:显式SSL协议。
      • “SSL_IMPLICIT”:隐式SSL协议。
      • “TLS_EXPLICIT”:显式TLS协议。
      • “TLS_IMPLICIT”:隐式TLS协议。

      不指定参数值,默认为FTP协议。

      文件名编码类型

      填写FTP服务器支持的文件名、文件路径编码格式,不填写时使用系统默认格式“UTF-8”。

      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支持常见的字段数据类型,如Char、VarChar、Boolean、Binary、SmallInt、Int、BigInt、Decimal、Float、Double、Date、Time、TimeStamp、String等,具体支持类型根据数据来源的不同可能会有所变化,具体支持的类型可以参考Loader界面中相应输入算子(如表输入等)的字段数据类型下拉框中的内容。一些数据库的特有字段可能不被支持,例如Loader不支持oracle中的CLOB和XMLType、BLOB字段。
    表2 输入配置参数一览表

    源文件类型

    参数名

    解释说明

    sftp-connector或ftp-connector

    输入路径

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

    文件分割方式

    选择按文件或大小分割源文件,作为数据导入的MapReduce任务中各个map的输入文件。选择“FILE”表示每个map处理1个或多个完整的源文件,同一个源文件不可分配至不同map,数据保存至输出目录时将保留输入路径的目录结构;选择“SIZE”表示每个map处理一定大小的输入文件,同一个源文件可分割至多个map,数据保存至输出目录时保存的文件数与map数量相同,文件名格式为“import_part_xxxx”,“xxxx”为系统生成的随机数,具有唯一性。

    过滤器类型

    选择文件过滤的条件。“WILCARD”表示使用通配符过滤,“REGEX”表示使用正则表达式匹配。与“路径过滤器”和“文件过滤器”配合使用。不选择值时默认为通配符过滤。

    路径过滤器

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

    文件过滤器

    与“过滤器类型”配合使用,配置通配符或正则表达式对源文件的输入文件名进行过滤。配置多个过滤条件时使用逗号隔开。不能配置为空。

    编码类型

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

    后缀名

    源文件导入成功后对输入文件增加的后缀值。该值为空,表示不加后缀。

    压缩

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

    hdfs-connector

    输入路径

    HDFS中源文件的输入路径。

    路径过滤器

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

    文件过滤器

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

    编码类型

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

    后缀名

    源文件导入成功后对输入文件增加的后缀值。该值为空,表示不加后缀。

    generic-jdbc-connector

    架构名称

    “表方式”模式下存在,数据库模式名。

    表名

    “表方式”模式下存在,数据库表名。

    SQL语句

    “SQL方式”模式下存在,配置要查询的SQL语句,使Loader可通过SQL语句查询结果并作为导入的数据。SQL语句需要有查询条件“WHERE ${CONDITIONS}”,否则无法正常工作。例如,“select * from TABLE WHERE A>B and ${CONDITIONS}”。如果同时配置“表列名”,SQL语句中查询的列将被“表列名”配置的列代替。不能和“架构名称”、“表名”同时配置。

    表列名

    配置要导入的列,使Loader将列的内容全部导入。配置多个字段时使用逗号分隔。

    分区列名

    指定数据库表的一列,根据该列来划分要导入的数据,在map任务中用于分区。建议配置主键字段。

    说明:
    • 分区列必选有索引,如果没有索引,请不要指定分区列,指定没有索引的分区列会导致数据库服务器磁盘I/O繁忙,影响其他业务访问数据库,并且导入时间长。
    • 在有索引的多个字段中,选择字段值最离散的字段作为分区列,不离散的分区列会导致多个导入MR任务负载不均衡。
    • 分区列的排序规则必须支持大小写敏感,否则在数据导入过程中,可能会出现数据丢失。
    • 不建议分区列选择类型为float或double的字段,因为精度问题,可能导致分区列字段的最小值、最大值所在记录无法导入。

    分区列空值

    配置对数据库列中为null值记录的处理方式。值为“true”时,分区列的值为null的数据会被处理;值为“false”时,分区列的值为null的数据不会被处理。

    是否指定分区列

    是否指定分区列。

    oracle-connector

    表名

    表名。

    列名

    列名。

    查询条件

    SQL语句中的查询条件。

    切分方式

    指定数据的切分方式,有“ROWID”和“PARTITION”两种。

    表分区名

    表分区名,使用逗号分隔不同的分区。

    数据块分配方式

    指定数据切分后,如何分配。

    读取大小

    指定每次读取多大的数据量。

    mysql-fastpath-connector

    架构名称

    数据库模式名。

    表名

    数据库表名。

    查询条件

    指定表的查询条件。

    分区列名

    指定数据库表的一列,根据该列来划分要导入的数据,在map任务中用于分区。建议配置主键字段。

    说明:
    • 分区列必选有索引,如果没有索引,请不要指定分区列,指定没有索引的分区列会导致数据库服务器磁盘I/O繁忙,影响其他业务访问数据库,并且导入时间长。
    • 在有索引的多个字段中,选择字段值最离散的字段作为分区列,不离散的分区列会导致多个导入MR任务负载不均衡。
    • 不建议分区列选择类型为float或double的字段,因为精度问题,可能导致分区列字段的最小值、最大值所在记录无法导入。

    分区列空值

    配置对数据库列中为null值记录的处理方式。值为“true”时,分区列的值为null的数据会被处理;值为“false”时,分区列的值为null的数据不会被处理。

    是否指定分区列

    是否指定分区列。

    oracle-partition-connector

    架构名称

    数据库模式名。

    表名

    分区表名。

    查询条件

    SQL语句中的查询条件。

    表列名

    配置要导入的列,使Loader将列的内容全部导入。配置多个字段时使用逗号分隔。

  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表的列定义到指定字段。仅支持SparkSQL存取Hive数据。

        转换类型

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

        输出类型

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

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

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

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

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

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

      • 使用sftp-connector或ftp-connector导入数据时,在数据转换步骤中,需要将原数据中时间类型数值对应的字段,设置为字符串类型,才能精确到毫秒并完成导入。数据中包含比毫秒更精确的部分不会被导入。
      • 使用generic-jdbc-connector导入数据时,在数据转换步骤中,建议“CHAR”或“VARCHAR”类型字段设置数据长度为“-1”,使全部数据正常导入,避免实际数据字符太长时被部分截取,出现缺失。
      • 使用generic-jdbc-connector导入数据时,在数据转换步骤中,需要将原数据中时间类型数值对应的字段,设置为时间类型,才能精确到秒并完成导入。数据中包含比秒更精确的部分不会被导入。
      • 导入到Hive分区表内表时,Hive默认不会扫描新导入的数据,需要执行如下HQL修复表才可以查询到新导入数据:

        MSCK REPAIR TABLE table_name;

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

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

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

    表4 输出配置参数一览表

    存储类型

    参数名

    解释说明

    HDFS

    文件类型

    在下拉菜单中选择数据导入HDFS后保存文件的文件类型。

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

      文件类型选择“TEXT_FILE”或“SEQUENCE_FILE”导入时,Loader会自动根据文件的后缀选择对应的解压方法,对文件进行解压。

    压缩格式

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

    输出目录

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

    文件操作方式

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

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

    Map数

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

    Map数据块大小

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

    HBASE_BULKLOAD

    HBase实例

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

    导入前清理数据

    导入前清空原表的数据。“true”为执行清空,“false”为不执行。不配置此参数则默认不执行清空。

    Map数

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

    Map数据块大小

    HBase不支持此参数,请配置“Map数”。

    HBASE_PUTLIST

    HBase实例

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

    Map数

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

    Map数据块大小

    HBase不支持此参数,请配置“Map数”。

    HIVE

    输出目录

    数据导入到Hive里存储的保存目录。

    Map数

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

    Map数据块大小

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

    SPARK

    输出目录

    仅支持SparkSQL存取Hive数据,制定数据导入到Hive里存储的保存目录。

    Map数

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

    Map数据块大小

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

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

    图2 查看Loader作业