HDFS是一个分布式文件系统,为您提供读取和写入HDFS双向通道的功能,本文为您介绍DataWorks的HDFS数据同步的能力支持情况。
支持的版本
目前不支持阿里云文件存储HDFS版。
使用限制
离线读
使用HDFS Reader时,请注意以下事项:
由于连通默认资源组到HDFS的网络链路比较复杂,建议您使用Serverless资源组(推荐)和独享数据集成资源组完成数据同步任务。您需要确保您的资源组具备HDFS的namenode和datanode的网络访问能力。
HDFS默认情况下,使用网络白名单进行数据安全。基于此种情况,建议您使用Serverless资源组(推荐)和独享数据集成资源组完成针对HDFS的数据同步任务。
您通过脚本模式配置HDFS同步作业,并不依赖HDFS数据源网络连通性测试通过,针对此类错误您可以临时忽略。
数据集成同步进程以admin账号启动,您需要确保操作系统的admin账号具备访问相应HDFS文件的读写权限,若无权限,可以转脚本模式,添加
"hdfsUsername": "有权限的用户"
。
HDFS Reader支持以下功能:
支持TextFile、ORCFile、rcfile、sequence file、csv和parquet格式的文件,且要求文件内容存放的是一张逻辑意义上的二维表。
支持多种类型数据读取(使用String表示),支持列裁剪,支持列常量。
支持递归读取、支持正则表达式
*
和?
。支持ORCFile数据压缩,目前支持SNAPPY和ZLIB两种压缩方式。
支持SequenceFile数据压缩,目前支持lZO压缩方式。
多个File可以支持并发读取。
CSV类型支持压缩格式有gzip、bz2、zip、lzo、lzo_deflate和snappy。
目前插件中Hive版本为1.1.1,Hadoop版本为2.7.1(Apache适配JDK1.6],在Hadoop 2.5.0、Hadoop 2.6.0和Hive 1.2.0测试环境中写入正常。
HDFS Reader暂不支持单个File多线程并发读取,此处涉及到单个File内部切分算法。
离线写
使用HDFS Writer时,请注意以下事项:
目前HDFS Writer仅支持TextFile、ORCFile和ParquetFile三种格式的文件,且文件内容存放的必须是一张逻辑意义上的二维表。
由于HDFS是文件系统,不存在schema的概念,因此不支持对部分列写入。
目前不支持DECIMAL、BINARY、ARRAYS、MAPS、STRUCTS和UNION等Hive数据类型。
对于Hive分区表目前仅支持一次写入单个分区。
对于TextFile,需要保证写入HDFS文件的分隔符与在Hive上创建表时的分隔符一致,从而实现写入HDFS数据与Hive表字段关联。
目前插件中的Hive版本为1.1.1,Hadoop版本为2.7.1(Apache为适配JDK1.7)。在Hadoop2.5.0、Hadoop2.6.0和Hive1.2.0测试环境中写入正常。
HDFS Writer仅支持使用独享数据集成资源组。
实现过程
HDFS Writer的实现过程如下所示:
根据您指定的path,创建一个HDFS文件系统上不存在的临时目录。
创建规则:path_随机。
将读取的文件写入这个临时目录。
全部写入后,将临时目录下的文件移动到您指定的目录(在创建文件时保证文件名不重复)。
删除临时目录。如果在此过程中,发生网络中断等情况造成无法与HDFS建立连接,需要您手动删除已经写入的文件和临时目录。
数据同步需要使用Admin账号,并且有访问相应文件的读写权限。
支持的字段类型
离线读
由于文件表的元数据信息由Hive维护,并存放在Hive自己维护的元数据库(如MySQL)中。目前HDFS Reader不支持对Hive元数据的数据库进行访问查询,因此您在进行类型转换时,必须指定数据类型。
RCFile、ParquetFile、ORCFile、TextFile和SequenceFile中的类型,会默认转为数据集成支持的内部类型,如下表所示。
类型分类 | 数据集成column配置类型 | Hive数据类型 |
整数类 | long | tinyint、smallint、int和bigint |
浮点类 | double | float和double |
字符串类 | string | string、char、varchar、struct、map、array、union和binary |
日期时间类 | date | date和timestamp |
布尔类 | boolean | boolean |
long:HDFS文件中的整型类型数据,例如123456789。
double:HDFS文件中的浮点类型数据,例如3.1415。
bool:HDFS文件中的布尔类型数据,例如true、false,不区分大小写。
date:HDFS文件中的时间类型数据,例如2014-12-31 00:00:00。
Hive支持的数据类型TIMESTAMP可以精确到纳秒级别,所以TextFile、ORCFile中TIMESTAMP存放的数据类似于2015-08-21 22:40:47.397898389
。如果转换的类型配置为数据集成的DATE,转换之后会导致纳秒部分丢失。所以如果需要保留纳秒部分的数据,请配置转换类型为数据集成的字符串类型。
离线写
HDFS Writer提供向HDFS文件系统指定路径中写入TextFile文件、 ORCFile文件以及ParquetFile格式文件,文件内容可以与Hive中的表关联。目前HDFS Writer支持大部分Hive类型,请注意检查您的数据类型。
HDFS Writer针对Hive数据类型的转换列表,如下所示。
column的配置需要和Hive表对应的列类型保持一致。
类型分类 | 数据库数据类型 |
整数类 | TINYINT、SMALLINT、INT和BIGINT |
浮点类 | FLOAT和DOUBLE |
字符串类 | CHAR、VARCHAR和STRING |
布尔类 | BOOLEAN |
日期时间类 | DATE和TIMESTAMP |
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
操作流程请参见通过向导模式配置离线同步任务、通过脚本模式配置离线同步任务。
脚本模式配置的全量参数和脚本Demo请参见下文的附录:脚本Demo与参数说明。
附录:脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。