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

典型场景:从HDFS导出数据到MOTService

操作场景

在MOTService中需要根据表中数据版本字段对表进行更新操作,MOTService外部表不支持Upsert语句,您可以使用Loader将文件从HDFS导出到MOTService从而批量更新数据。

前提条件

  • 获取关系型数据库使用的用户和密码。
  • 输入的数据需为CSV格式文件。
  • 在FusionInsight Manager中创建一个人机用户,例如“Loaderuser”,加入用户组hive、hadoop,主组选择“hadoop”组,关联角色“Manager_administrator”。

操作步骤

准备操作

  1. 使用root用户登录RTDServer所在节点,获取关系型数据库对应的驱动Jar包,本场景需要获取“opengaussjdbc-V500R002C00.jar”。

    cd ${BIGDATA_HOME}/FusionInsight_FARMER_RTD_*/install/FusionInsight-RTD-*/RTD/rtdservice/WEB-INF/lib

  2. 1获取到的Jar包保存在Loader服务主备节点的lib路径“${BIGDATA_HOME}/FusionInsight_Porter_*/install/FusionInsight-Sqoop-*/FusionInsight-Sqoop-*/server/webapps/loader/WEB-INF/ext-lib”。
  3. 使用root用户在主备节点分别执行以下命令修改Jar包权限:

    cd ${BIGDATA_HOME}/FusionInsight_Porter_*/install/FusionInsight-Sqoop-*/FusionInsight-Sqoop-*/server/webapps/loader/WEB-INF/ext-lib

    chown omm:wheel jar包文件名

    chmod 600 jar包文件名

  4. 登录FusionInsight Manager系统,选择“集群 > 服务 > Loader > 更多 > 重启服务”,输入管理员密码重启Loader服务。
  5. 需要提前在MOTService中创建版本管控表并在表中增加特定字段用于版本管控,如果存在则不需要创建。所有MOT类型(全量或增量)作业共用一张表,参考命令如下:

    CREATE TABLE T_RTD_TBL_CUR_VER_INFO (

    TBL_NAME varchar NOT NULL,

    CUR_VER_FLAG tinyint DEFAULT '0' NOT NULL,

    CONSTRAINT PK_T_RTD_TBL_CUR_VER_INFO PRIMARY KEY (TBL_NAME)

    );

设置作业基本信息

  1. 登录“Loader WebUI”界面。

    1. 登录FusionInsight 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”,输入配置连接参数,单击“测试”验证连接是否可用,待提示“测试成功”后单击“确定”

    表1 “generic-jdbc-connector”连接参数

    参数名

    说明

    示例

    名称

    关系型数据库连接的名称。

    dbName

    JDBC驱动程序类

    JDBC驱动类名。

    com.xxx.opengauss.jdbc.Driver

    JDBC连接字符串

    JDBC连接字符串,格式为:

    jdbc:opengauss://数据库访问地址:数据库访问端口号/数据库名称

    jdbc:opengauss://10.10.10.10:15400/test

    用户名

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

    omm

    密码

    连接数据库使用的密码。

    xxxx

    JDBC连接属性

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

    • 名称:连接属性名
    • 值:连接属性值
    • 名称:socketTimeout
    • 值:20
      说明:

      登录FusionInsight Manager,选择“集群 > 服务 > MOTService > 配置 > 全部配置”,搜索参数“REQUIRE_SSL”如果参数值为“true”,此时需要添加名称为“ssl.enable”,值为“true”的JDBC连接属性,否则不需要添加此连接属性。

设置数据源信息

  1. 单击“下一步”,进入“输入设置”界面,在“源文件类型”中选择“HDFS”,设置数据源信息。

    表2 数据来源配置参数

    参数名

    解释说明

    示例

    输入目录

    从HDFS导出时的输入路径。

    说明:

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

    /user/test

    路径过滤器

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

    • “?”匹配单个字符。
    • “*”配置多个字符。
    • 在匹配条件前加“^”表示取反,即文件过滤。

    *

    文件过滤器

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

    • “?”匹配单个字符。
    • “*”配置多个字符。
    • 在匹配条件前加“^”表示取反,即文件过滤。

    *

    文件类型

    文件导入类型:

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

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

    TEXT_FILE

    文件分割方式

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

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

    FILE

    Map数

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

    20

    Map数据块大小

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

    -

设置数据转换

  1. 单击“下一步”,进入“转换”界面,设置数据传输过程中的转换操作。算子的选择和参数设置具体请参考算子帮助表3

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

    输入类型

    输出类型

    CSV文件输入

    表输出

    在“输入”中把“CSV文件输入”拖拽到网格中,在“输出”中把“表输出”拖拽到网格中,“输入”与“输出”之间用箭头进行连接。

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

  1. 单击“下一步”,进入“输出设置”界面参考下表填写参数。

    表4 输出设置参数

    参数名

    说明

    示例

    架构名称

    数据库模式名。

    dbo

    表名

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

    test

    临时表名

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

    db_test

    数据库类型

    数据库类型,分为MOT和其他可用JDBC连接的数据库。

    MOT

    MOT导入方式

    “数据库类型”选择“MOT”时存在,根据业务需要选择相应导入方式。

    说明:
    • 数据导入数据库的方式,有全量导入,增量导入,普通导入三种。

      TOTAL:全量导入,数据版本默认为0,新写入数据版本为1,新数据入库时更新相同主键的数据,插入不同主键的数据并删除版本为0的所有原有数据。下一次新写入数据版本为0,依次交替更新数据版本。

      INCREMENT:增量导入,更新相同主键的数据,插入不同主键的数据,保留原有数据。

      INSERT:普通导入,插入数据,主键重复会导致任务失败。

    • 在使用全量导入或增量导入方式时,需确保业务数据表有字段“CUR_VER_FLAG”用于版本管控,例如:

      CREATE TABLE F_ACCOUNT1 (

      ORG_NBR smallint NOT NULL,

      ACT_NBR varchar NOT NULL,

      CLT_NBR varchar NOT NULL,

      BRF_NAM varchar,

      CUR_VER_FLAG tinyint DEFAULT '0' NOT NULL,

      CONSTRAINT IDX_F_ACCOUNT1_PKEY PRIMARY KEY (CLT_NBR,ORG_NBR)

      );

    TOTAL

  2. 单击“保存并运行”,开始保存并运行作业。

查看作业完成情况

  1. 进入“Loader WebUI”界面,待“状态”显示“成功”则说明作业完成。