OSS-HDFS服务(JindoFS服务)是一款云原生数据湖存储产品,OSS-HDFS数据源为您提供读取和写入OSS-HDFS的双向通道,本文为您介绍DataWorks的OSS-HDFS数据同步的能力支持情况。
使用限制
离线读
- 使用OSS-HDFS Reader时,请注意以下事项: - 由于连通资源组到OSS-HDFS的网络链路比较复杂,建议您使用Serverless资源组(推荐)和独享数据集成资源组完成数据同步任务。您需要确保您的资源组具备OSS-HDFS的网络访问能力。 
- OSS-HDFS Reader支持以下功能: - 支持text、csv、orc和parquet格式的文件,且要求文件内容存放的是一张逻辑意义上的二维表。 
- 支持多种类型数据读取,支持列常量。 
- 支持递归读取、支持通配符 - *和- ?。
- 多个File可以支持并发读取。 
 
OSS-HDFS Reader暂不支持单个File多线程并发读取,此处涉及到单个File内部切分算法。
离线写
使用OSS-HDFS Writer时,请注意以下事项:
- 目前OSS-HDFS Writer仅支持text、orc和parquet三种格式的文件,且文件内容存放的必须是一张逻辑意义上的二维表。 
- 对于text类型,需要保证写入OSS-HDFS文件的分隔符与在Hive上创建表时的分隔符一致,从而实现写入OSS-HDFS数据与Hive表字段关联。 
实时写
- 支持实时写入的能力。 
- 支持实时写入Hudi格式版本:0.14.x。 
实现过程
OSS-HDFS Writer的实现过程如下所示:
- 根据您指定的path,创建一个OSS-HDFS文件系统上不存在的临时目录。 - 创建规则:path_随机。 
- 将读取的文件写入这个临时目录。 
- 全部写入后,将临时目录下的文件移动到您指定的目录(在创建文件时保证文件名不重复)。 
- 删除临时目录。如果在此过程中,发生网络中断等情况造成无法与OSS-HDFS建立连接,需要您手动删除已经写入的文件和临时目录。 
支持的字段类型
离线读
ParquetFile、ORCFile、TextFile、CsvFile中的类型,会默认转为数据集成支持的内部类型,如下表所示。
| 类型分类 | OSS-HDFS数据类型 | 
| 整数类 | TINYINT、SMALLINT、INT、BIGINT | 
| 浮点类 | FLOAT、DOUBLE、DECIMAL | 
| 字符串类 | STRING、CHAR、VARCHAR | 
| 日期时间类 | DATE、TIMESTAMP | 
| 布尔类 | BOOLEAN | 
- LONG:OSS-HDFS文件中的整型类型数据,例如123456789。 
- DOUBLE:OSS-HDFS文件中的浮点类型数据,例如3.1415。 
- BOOLEAN:OSS-HDFS文件中的布尔类型数据,例如true、false,不区分大小写。 
- DATE:OSS-HDFS文件中的时间类型数据,例如2014-12-31 00:00:00。 
离线写
OSS-HDFS Writer提供向OSS-HDFS文件系统指定路径中写入TextFile文件、 ORCFile文件以及ParquetFile格式文件。
OSS-HDFS支持的数据类型,如下表所示。
| 类型分类 | OSS-HDFS数据类型 | 
| 整数类 | TINYINT、SMALLINT、INT和BIGINT | 
| 浮点类 | FLOAT和DOUBLE | 
| 字符串类 | CHAR、VARCHAR和STRING | 
| 布尔类 | BOOLEAN | 
| 日期时间类 | DATE和TIMESTAMP | 
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
- 操作流程请参见通过向导模式配置离线同步任务、通过脚本模式配置离线同步任务。 
- 脚本模式配置的全量参数和脚本Demo请参见下文的附录:OSS-HDFS脚本Demo与参数说明。 
单表实时同步任务配置指导
操作流程请参见配置单表增量数据实时同步、DataStudio侧实时同步任务配置。
整库(实时)全增量同步配置指导
操作流程请参见数据集成侧同步任务配置。
附录:OSS-HDFS脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。
Reader脚本Demo
{
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "oss_hdfs",//插件名
            "parameter": {
                "path": "",//要读取的文件路径
                "datasource": "",//数据源
                "column": [
                    {
                        "index": 0,//序列号,index从0开始(下标索引从0开始计数),表示从本地文本文件第一列开始读取数据。
                        "type": "string"//字段类型
                    },
                    {
                        "index": 1,
                        "type": "long"
                    },
                    {
                        "index": 2,
                        "type": "double"
                    },
                    {
                        "index": 3,
                        "type": "boolean"
                    },
                    {
                        "format": "yyyy-MM-dd HH:mm:ss", //日期格式
                        "index": 4,
                        "type": "date"
                    }
                ],
                "fieldDelimiter": ",",//列分隔符
                "encoding": "UTF-8",//编码格式
                "fileFormat": ""//文本类型
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "stream",
            "parameter": {},
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": ""//错误记录数
        },
        "speed": {
            "concurrent": 3,//作业并发数
            "throttle": true //当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
            "mbps":"12"//限流,此处1mbps = 1MB/s。
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}Reader脚本参数
| 参数 | 描述 | 是否必选 | 默认值 | 
| path | 要读取的文件路径。 
 重要  
 | 是 | 无 | 
| fileFormat | 文件的类型,目前仅支持您配置为text、orc和parquet。 OSS-HDFS Reader能够自动识别文件的类型,并使用对应文件类型的读取策略。OSS-HDFS Reader在做数据同步前,会检查您配置的路径下所有需要同步的文件格式是否和fileFormat一致,如果不一致任务会失败。 fileFormat可以配置的参数值列表如下所示: 
 | 是 | 无 | 
| column | 要读取的字段列表。默认情况下,您可以全部按照STRING类型读取数据,配置为 您也可以指定column字段信息,配置如下。其中: 
 说明  文件数据列(index)和常量列(value)配置二选一。  | 是 | 无 | 
| fieldDelimiter | 读取的字段分隔符,OSS-HDFS Reader在读取TextFile数据时,需要指定字段分割符,如果不指定默认为逗号(,)。OSS-HDFS Reader在读取ORC/PARQUET时,您无需指定字段分割符。 | 否 | , | 
| encoding | 读取文件的编码配置。 | 否 | utf-8 | 
| nullFormat | 文本文件中无法使用标准字符串定义null(空指针),数据集成提供nullFormat定义哪些字符串可以表示为null。 例如您配置 | 否 | 无 | 
| compress | 目前仅支持gzip、bzip2和snappy压缩。 | 否 | 无 | 
Writer脚本Demo
{
    "type": "job",
    "version": "2.0",//版本号。
    "steps": [
        {
            "stepType": "stream",
            "parameter": {},
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "oss_hdfs",//插件名。
            "parameter": {
                "path": "",//存储到OSS-HDFS文件系统的路径信息。
                "fileName": "",//OSS-HDFS Writer写入时的文件名。
                "compress": "",//OSS-HDFS文件压缩类型。
                "datasource": "",//数据源。
                "column": [
                    {
                        "name": "col1",//字段名。
                        "type": "string"//字段类型。
                    },
                    {
                        "name": "col2",
                        "type": "int"
                    },
                    {
                        "name": "col3",
                        "type": "double"
                    },
                    {
                        "name": "col4",
                        "type": "boolean"
                    },
                    {
                        "name": "col5",
                        "type": "date"
                    }
                ],
                "writeMode": "",//写入模式。
                "fieldDelimiter": ",",//列分隔符。
                "encoding": "",//编码格式。
                "fileFormat": "text"//文本类型。
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": ""//错误记录数。
        },
        "speed": {
            "concurrent": 3,//作业并发数。
            "throttle": false //false代表不限流,下面的限流的速度不生效;true代表限流。
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}Writer脚本参数
| 参数 | 描述 | 是否必选 | 默认值 | 
| fileFormat | 文件的类型,目前仅支持您配置为text、orc和parquet。 
 | 是 | 无 | 
| path | 存储到OSS-HDFS文件系统的路径信息,OSS-HDFS Writer会根据并发配置在path目录下写入多个文件。 与Hive表关联时,请填写Hive表在OSS-HDFS上的存储路径。例如Hive上设置的数据仓库的存储路径。 | 是 | 无 | 
| fileName | OSS-HDFS Writer写入时的文件名,实际执行时会在该文件名后添加随机的后缀作为每个线程写入实际文件名。 | 是 | 无 | 
| column | 写入数据的字段,不支持对部分列写入。 与Hive中的表关联时,需要指定表中所有字段名和字段类型,其中name指定字段名,type指定字段类型。 您可以指定column字段信息,配置如下。  | 是(如果fileFormat为parquet,此项无需填写) | 无 | 
| writeMode | OSS-HDFS Writer写入前数据清理处理模式: 
 | 是 | 无 | 
| fieldDelimiter | OSS-HDFS Writer写入时的字段分隔符。 说明  仅支持单字符分隔符,如果输入多字符将导致运行时报错。 | 是(如果fileFormat为parquet,此项无需填写) | 无 | 
| compress | OSS-HDFS文件压缩类型,默认不填写,则表示没有压缩。 其中text类型文件支持gzip和bzip2压缩类型。 | 否 | 无 | 
| encoding | 写文件的编码配置。 | 否 | utf-8 | 
| parquetSchema | 写Parquet格式文件时的必填项,用来描述目标文件的结构,所以此项当且仅当fileFormat为parquet时生效,格式如下。 配置项说明如下: 
 说明  每行列设置必须以分号结尾,最后一行也要写上分号。 示例如下。  | 否 | 无 |