通用批量导入服务

云原生多模数据库 Lindorm支持Bulkload(批量快速导入数据)功能,可以更快更稳定的导入数据。本文介绍批量快速导入数据操作。

功能特性

批量快速导入数据功能支持数据文件旁路加载,不需要经过数据API写入链路并且不需要占用实例计算资源,,批量快速导入数据与通过API导入数据相比有以下优势:

  • 导入数据更快,速度可以提升10倍以上。

  • 在线服务更稳定,不占用在线服务资源。

  • 资源使用更灵活,在离线资源中分开使用更加灵活。

  • 支持多种数据源导入,包括CSV、ORC、Parquet、MaxCompute等。

  • 使用简单。您无需开发任何代码就可以实现数据的批量快速旁路加载。

  • 成本低。LTS Bulkload基于Serverless Spark提供的云原生弹性能力,根据您的需求提供弹性计算资源按量收费,您无需经常配置计算资源,可以降低使用成本。

前提条件

支持的数据源

源数据源

目标数据源

MaxCompute Table

Lindorm宽表引擎

HDFS CSV或者OSS CSV

HDFS Parquet或者OSS Parquet

HDFS ORC或者OSS ORC

提交方式

快速导入数据任务支持以下方式提交。

通过LTS操作页面提交

  1. 登录LTS操作页面,具体操作参见开通并登录LTS

  2. 在左侧导航栏,选择数据源管理 > 添加数据源,添加以下数据源。

  3. 在左侧导航栏中,选择批量导入数据

  4. 单击创建任务,配置以下参数。

    配置项

    参数

    描述

    选择数据源

    源数据源

    选择添加的ODPS数据源或者HDFS数据源。

    目标数据源

    选择添加的Lindorm宽表数据源。

    插件配置

    Reader配置

    • 如果源数据源为ODPS数据源,读插件配置说明如下:

      • table:ODPS的表名。

      • column:需要导入的ODPS列名。

      • partition:非分区表为空,分区表配置分区信息。

      • numPartitions:读取时的并发度。

    • 如果源数据源为HDFS数据源,CSV文件的读插件配置说明如下:

      • filePath:CSV文件的所在目录。

      • header:CSV文件是否包含header行。

      • delimite:CSV文件分隔符。

      • column:CSV文件中列名以及对应类型。

    • 如果源数据源为HDFS数据源,Parquet文件的读插件配置说明如下:

      • filePath:Parquet文件的所在目录。

      • column:Parquet文件中的列名。

    说明

    读插件配置示例请参见配置示例

    Writer配置

    • namespace:Lindorm宽表的namespace。

    • lindormTable:Lindorm宽表名称。

    • compression:压缩算法,目前仅支持zstd,不使用压缩算法配置为none。

    • columns:根据导入至目标表类型填写。

      • 如果导入至Lindorm宽表,columns需要配置Lindorm SQL宽表的列名,和读配置中的column对应。

      • 如果导入至Lindorm兼容HBase表,columns需要配置HBase表标准的列名,和读配置中的column对应。

    • timestamp:数据在Lindorm宽表中的时间戳,支持以下类型:

      • 时间戳列为Long类型,值为13位。

      • 时间戳列为String类型,格式为yyyy-MM-dd HH:mm:ss或者yyyy-MM-dd HH:mm:ss SSS。

    说明

    写插件配置示例请参见配置示例

    作业运行参数配置

    Spark Driver规格

    选择Spark Driver规格。

    Spark Executor规格

    选择Spark Executor规格。

    Executor数量

    输入Executor的数量。

    spark配置

    输入Spark配置,可不填写。

  5. 单击创建

  6. Bulkload页面单击任务名查看快速导入数据任务。

    • 单击任务名,可以查看Spark任务的UI界面。

    • 单击详情,可以查看Spark任务的执行日志。

    任务详情页
    说明

    源数据源迁移到Lindorm宽表,在Lindorm宽表不同分区的数据均匀情况下 , 数据容量为100 GB(压缩比为1:4)压缩后导入大概需要1个小时,根据具体情况不同可能会有区别。

通过API接口提交

提交任务接口

  • 接口(POST):http://{BDSMaster}:12311/pro/proc/bulkload/create,BDSMaster需要修改为Lindorm实例的Master hostname,可以登录Lindorm实例的LTS,在集群信息页面的基本信息区域获取。获取页面

  • 参数说明:

    参数

    说明

    src

    源数据源名称。

    dst

    目标数据源名称。

    readerConfig

    读插件配置信息,文件类型为JSON,读插件配置示例请参见配置示例

    writerConfig

    写插件配置信息,文件类型为JSON,写插件配置示例请参见配置示例

    driverSpec

    Driver的规格,包括small、medium、large和xlarge四种规格,推荐配置为large。

    instances

    Executor的数量。

    fileType

    如果源数据源为HDFS,需要填写文件类型为CSV或者Parquet。

    sparkAdditionalParams

    扩展参数可以不填。

  • 示例:

    curl -d "src=hdfs&dst=ld&readerConfig={\"filePath\":\"parquet/\",\"column\":[\"id\",\"intcol\",\"doublecol\",\"stringcol\",\"string1col\",\"decimalcol\"]}&writerConfig={\"columns\":[\"ROW||String\",\"f:intcol||Int\",\"f:doublecol||Double\",\"f:stringcol||String\",\"f:string1col||String\",\"f:decimalcol||Decimal\"],\"namespace\":\"default\",\"lindormTable\":\"bulkload_test\",\"compression\":\"zstd\"}&driverSpec=large&instances=5&fileType=Parquet" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://{LTSMaster}:12311/pro/proc/bulkload/create

    返回内容如下,message为任务ID。

    {"success":"true","message":"proc-91-ff383c616e5242888b398e51359c****"}

获取任务信息

  • 接口(GET):http://{LTSMaster}:12311/pro/proc/{procId}/info,LTSMaster需要修改为Lindorm实例的Master hostname,可以登录Lindorm实例的LTS,在集群信息页面的基本信息区域获取。

  • 参数说明:procId表示任务ID。

  • 示例:

    curl http://{LTSMaster}:12311/pro/proc/proc-91-ff383c616e5242888b398e51359c****/info

    返回内容如下:

    {
        "data":{
            "checkJobs":Array,
            "procId":"proc-91-ff383c616e5242888b398e51359c****",  //任务ID
            "incrJobs":Array,
            "procConfig":Object,
            "stage":"WAIT_FOR_SUCCESS",
            "fullJobs":Array,
            "mergeJobs":Array,
            "srcDS":"hdfs",    //源数据源
            "sinkDS":"ld-uf6el41jkba96****",  //目标数据源
            "state":"RUNNING",   //任务状态
            "schemaJob":Object,   
            "procType":"SPARK_BULKLOAD"   //任务类型
        },
        "success":"true"
    }

终止任务

  • 接口(GET):http://{LTSMaster}:12311/pro/proc/{procId}/abort,LTSMaster需要修改为Lindorm实例的Master hostname,可以登录Lindorm实例的LTS,在集群信息页面的基本信息区域获取。

  • 参数说明:procId表示任务ID。

  • 示例:

    curl http://{LTSMaster}:12311/pro/proc/proc-91-ff383c616e5242888b398e51359c****/abort

    返回内容如下:

    {"success":"true","message":"ok"}

重试任务

  • 接口(GET):http://{LTSMaster}:12311/pro/proc/{procId}/retry,LTSMaster需要修改为Lindorm实例的Master hostname,可以登录Lindorm实例的LTS,在集群信息页面的基本信息区域获取。

  • 参数说明:procId表示任务ID。

  • 示例:

    curl http://{LTSMaster}:12311/pro/proc/proc-91-ff383c616e5242888b398e51359c****/retry

    返回结果如下:

    {"success":"true","message":"ok"}

删除任务

  • 接口(GET):http://{LTSMaster}:12311/pro/proc/{procId}/delete,LTSMaster需要修改为Lindorm实例的Master hostname,可以登录Lindorm实例的LTS,在集群信息页面的基本信息区域获取。

  • 参数说明:procId表示任务ID。

  • 示例:

    curl http://{LTSMaster}:12311/pro/proc/proc-91-ff383c616e5242888b398e51359c****/delete

    返回结果如下:

    {"success":"true","message":"ok"}

配置示例

  • 读插件配置示例。

    • 源数据源为ODPS的读插件配置示例。

      {
        "table": "test",
        "column": [ 
          "id",
          "intcol",
          "doublecol",
          "stringcol",
          "string1col",
          "decimalcol"
        ],
        "partition": [
          "pt=1" 
        ],
        "numPartitions":10 
      }
    • 源数据源为HDFS,CSV文件的读插件配置示例。

      {
        "filePath":"csv/",
        "header": false,
        "delimiter": ",",
        "column": [
          "id|string",
          "intcol|int",
          "doublecol|double",
          "stringcol|string",
          "string1col|string",
          "decimalcol|decimal"
        ]
      }
    • 源数据源为HDFS,Parquet文件的读插件配置示例。

      {
        "filePath":"parquet/",
        "column": [   //parquet文件中的列名
          "id",
          "intcol",
          "doublecol",
          "stringcol",
          "string1col",
          "decimalcol"
        ]
      }
  • 写插件配置示例。

    • 导入到Lindorm SQL表格的写插件配置示例。

      {
        "namespace": "default",
        "lindormTable": "xxx",
        "compression":"zstd",
        "timestamp":"2022-07-01 10:00:00",
        "columns": [
             "id",
             "intcol",
             "doublecol",
             "stringcol",
              "string1col",
              "decimalcol"
        ]
      }
    • 导入到Lindorm兼容HBase表格的写插件配置示例。

      {
        "namespace": "default",
        "lindormTable": "xxx",
        "compression":"zstd",
        "timestamp":"2022-07-01 10:00:00",
        "columns": [
          "ROW||String",    //ROW代表rowkey,String表示类型
          "f:intcol||Int",  //列簇:列名||列类型
          "f:doublecol||Double",
          "f:stringcol||String",
          "f:string1col||String",
          "f:decimalcol||Decimal"
        ]
      }