建议在配置子账号授权数据的读写权限的同时,追加 QcloudCOSBucketConfigRead、QcloudCOSDataFullControl 两项策略权限。因为 Spark 在操作 COS 文件时部分情况下需要 headBucket 权限。
相关产品
数据开发治理平台 WeData 产品页,含版本规格、价格与购买入口。
一、COS 离线单表读取节点配置
| 参数 |
说明 |
| 数据来源 |
选择当前项目中可用的 COS 数据源。 |
| 同步方式 |
COS支持两种同步方式:数据同步:解析结构化数据内容,按字段关系进行数据内容映射与同步。文件传输:不做内容解析传输整个文件,可应用于非结构化数据同步。注意:文件传输仅支持来源端、目标端均为文件类型(COS/HDFS/SFTP/FTP)的数据源,且来源端、目标端同步方式均需要为文件传输 |
| 文件路径 |
COS文件路径需带上桶名称,如 cosn://bucket_name。说明:文件路径能够根据通配符*实现部分匹配,支持匹配以xxxx开头的文件夹/文件、以xxxx结尾的文件夹/文件如cosn://bucket_name/*.txt |
| 文件格式 |
COS 支持五种文件类型:TXT 、ORC 、PARQUET、CSV、JSON。TXT:表示 TextFile 文件格式。ORC:表示 ORCFile 文件格式。PARQUET:表示普通 Parquet 文件格式。CSV:表示普通 HDFS 文件格式(逻辑二维表)。JSON:表示 JSON 文件格式。 |
| 压缩格式 |
文件压缩方式,目前支持:none、deflate、gzip、bzip2、lz4、snappy。说明:由于 snappy 目前没有统一的 stream format,数据集成目前仅支持最主流的 hadoop-snappy(hadoop 上的 snappy stream format)和 framing-snappy(google 建议的 snappy stream format)。 |
| 字段分隔符 |
读取的字段分隔符,当文件格式为 TXT 或 CSV 时,需要指定字段分隔符,如果不指定默认为逗号(,)。其他可用分隔符:' \\t ' 、' \\u001 ' 、' | '、' 空格 ' 、 ' ;' ' , '。如果你想将每一行作为目的端的一列,分隔符请使用行内容不存在的字符。例如,不可见字符\\u0001。说明:仅文件格式为 TXT 、CVS 支持填写行分割符。 |
| 行分割符 |
当文件格式为 TXT 或 CSV 时,可以填写行分割符。linux 默认是 \\n , windows 默认是 \\r\\n,手填支持单个字符作为行分割符。说明:仅文件格式为 TXT 、CVS 支持填写行分割符。 |
| 编码 |
读取文件的编码配置。支持 utf8 和 gbk 两种编码。 |
| 空值转换 |
读取时,将指定字符串转为 NULL。 |
| 跳过表头 |
否:读取时不包含表头。是:读取时包含表头。说明:仅文件格式为 TXT 、CVS 支持填写。当来源端包含表头,且选择不跳过表头时,目标端建议选择不包含表头,否则可能导致表头数据重复。 |
二、COS 离线单表写入节点配置
| 参数 |
说明 |
| 数据去向 |
选择当前项目中可用的 COS 数据源。 |
| 同步方式 |
COS支持两种同步方式:数据同步:解析结构化数据内容,按字段关系进行数据内容映射与同步。文件传输:不做内容解析传输整个文件,可应用于非结构化数据同步。注意:文件传输仅支持来源端、目标端均为文件类型(COS/HDFS/SFTP/FTP)的数据源,且来源端、目标端同步方式均需要为文件传输。 |
| 文件路径 |
COS 文件路径需带上桶名称,如 cosn://bucket_name。说明:文件路径能够根据通配符*实现部分匹配,支持匹配以 xxxx 开头的文件夹/文件、以 xxxx 结尾的文件夹/文件。如cosn://bucket_name/*.txt |
| 写入模式 |
COS 支持三种写入模式:append:写入前不做任何处理,直接使用 filename 写入,保证文件名不冲突 。nonConflict:文件名重复时报错 。overwrite:写入前清理以文件名为前缀的所有文件,例如,"fileName": "abc",将清理对应目录所有 abc 开头的文件。 |
| 文件格式 |
COS 支持四种文件类型:TXT、CSV、ORC、PARQUETTXT:表示 TextFile 文件格式。CSV:表示普通 HDFS 文件格式(逻辑二维表)。ORC:表示 ORCFile 文件格式。PARQUET:表示普通 Parquet 文件格式。 |
| 压缩格式 |
文件压缩方式,目前支持:none、deflate、gzip、bzip2、lz4、snappy。说明:由于 snappy 目前没有统一的 stream format,数据集成目前仅支持最主流的 hadoop-snappy(hadoop上的snappy stream format)和 framing-snappy(google 建议的 snappy stream format)。 |
| 字段分隔符 |
当文件格式为 TXT 或 CSV 时,选择或手动输入读取的字段分隔符。COS 写入时的字段分隔符,需要你保证与创建的 COS表的字段分隔符一致,否则无法在 COS 表中查到数据。可选:' \\t ' 、' \\u001 ' 、' | '、' 空格 ' 、 ' ;' ' , '。说明:仅文件格式为 TXT 、CVS 支持填写行分割符。 |
| 行分割符 |
当文件格式为 TXT 或 CSV 时,可以填写行分割符。linux 默认是 \\n , windows 默认是 \\r\\n,手填支持单个字符作为行分割符。说明:仅文件格式为 TXT 、CVS 支持填写行分割符。 |
| 编码 |
写入文件的编码配置。支持 utf8 和 gbk 两种编码。 |
| 空字符串处理 |
不做处理:写入时,不处理空字符串。处理为 NULL:写入时,将空字符串处理为 NULL。 |
| 空值转换 |
写入时,将 NULL 转为指定字符串。NULL 代表未知或不适用的值,不同于0、空字符串或其他数值说明:仅文件格式为 TXT 、CVS 支持选择。 |
| 是否包含表头 |
是:写入时,包含表头否:写入时,不包含表头说明:仅文件格式为 TXT 、CVS 支持选择是否包含表头。 |
| 标记完成文件 |
空白的.ok文件,标志任务传输完成。不生成:任务完成后,不生成空白的.ok文件。(默认选中)生成:任务完成后,生成空白的.ok文件 |
| 标记完成文件名称 |
填写时需包含完整文件路径、名称、后缀,默认在目标路径下按照目标文件名称及后缀生成.ok文件。支持在数据同步、文件传输模式下使用时间调度参数${yyyyMMdd}等;支持在文件传输模式下使用内置变量${filetrans_di_src}代表源文件名称。如:/user/test/${filetrans_di_src}_${yyyyMMdd}.ok。注意:在文件传输模式下「目标文件名称」中如果使用${filetrans_di_src}引用源文件名称,并且标记完成文件按照目标文件名称及后缀生成.ok文件时,生成的标记完成文件个数取决于来源端的文件数量。 |
| 高级设置(选填) |
可根据业务需求配置参数。 |
三、数据类型转换支持(数据同步方式)
COS Select 通过 CAST 函数确定你输入数据的数据类型,一般而言,如果你未通过 CAST 函数进行数据类型指定,COS Select 将把输入数据类型视为 string 类型。
四、读取
| COS 数据类型 |
内部类型 |
| INTEGER |
LONG |
| FLOAT、DECIMAL |
DOUBLE |
| STRING |
STRING |
| TIMESTAMP |
DATE |
| BOOL |
BOOLEAN |
五、写入
| 内部类型 |
COS 数据类型 |
| LONG |
INTEGER |
| Double |
FLOAT、DECIMAL |
| STRING |
STRING |
| DATE |
TIMESTAMP |
| BOOLEAN |
BOOL |
六、COS 脚本 Demo
如果你配置离线任务时,使用脚本模式的方式进行配置,你需要在任务脚本中,按照脚本的统一格式要求编写脚本中的 reader 参数和 writer 参数。
"job": { "content": [ { "reader": { "parameter": { "path": "/", "nullFormat": "null", //空值转换 "compress": "gzip", //压缩格式 "lineDelimiter": "\\n", //行分隔符 "hadoopConfig": { "fs.defaultFS": "cosn://source-bucket", "fs.cosn.userinfo.secretId": "******", "fs.cosn.tmp.dir": "/tmp/hadoop_cos", "fs.cosn.trsf.fs.ofs.tmp.cache.dir": "/tmp/", "fs.cosn.userinfo.secretKey": "******", "fs.cosn.bucket.region": "ap-beijing", "fs.cosn.impl": "org.apache.hadoop.fs.CosFileSystem", "fs.cosn.trsf.fs.ofs.bucket.region": "ap-beijing", "fs.cosn.trsf.fs.ofs.user.appid": "******" }, "column": [ "*" ], "defaultFS": "cosn://source-bucket", //源文件路径 "skipHeader": "false", //是否跳过表头 "fieldDelimiter": ",", //字段分割符 "encoding": "utf-8", //编码方式 "fileType": "text" //文件类型 }, "name": "hdfsreader" }, "transformer": [], "writer": { "parameter": { "path": "/", "fileName": "part", "nullFormat": "null", //空值转换 "compress": "gzip", //压缩格式 "hadoopConfig": { "fs.defaultFS": "cosn://sink-bucket", "fs.cosn.userinfo.secretId": "******", "fs.cosn.tmp.dir": "/tmp/hadoop_cos", "fs.cosn.trsf.fs.ofs.tmp.cache.dir": "/tmp/", "fs.cosn.userinfo.secretKey": "******", "fs.cosn.bucket.region": "ap-beijing", "fs.cosn.impl": "org.apache.hadoop.fs.CosFileSystem", "fs.cosn.trsf.fs.ofs.bucket.region": "ap-beijing", "fs.cosn.trsf.fs.ofs.user.appid": "******" }, "defaultFS": "cosn://sink-bucket", //目标文件路径 "emptyAsNull": false, "writeMode": "append", //写入模式 "suffix": "parquet", //文件后缀 "fieldDelimiter": ",", //字段分隔符 "encoding": "utf-8", //编码方式 "fileType": "parquet" //文件类型 }, "name": "hdfswriter" } } ], "setting": { "errorLimit": { //脏数据阈值 "record": 0 }, "speed": { "byte": -1, //不限制同步速度,正整数表示设置最大传输速度 byte/s "channel": 1 //并发数量 } }}