我需要每天从DB2数据库中将数据提取到具有必要分区文件夹或配置单元分区的HDFS中。例如,基于业务线(LOB),状态,日期的分区。 DB2表包含一个存储GZip压缩XML的blob列。一旦数据被摄取,需求也是基于分区列和XML的一些值每天左右检索。查询或检索过程不需要基于所有分区列;它可以仅基于LOB和州,但不是基于日期。例如,基于状态检索的数据可能很大(压缩 - 160 GB,解压缩 - 1600 GB)。
需求摘要:
每天从DB2表中将数据提取到带有分区文件夹的HDFS中。
该表包含blob列(包含GZIP压缩XML)
将数据保存在HDFS中X年(可能约有40 TB的数据)
根据某些预定义查询(Hive / MR)检索数据
还必须定期转换XML,并且可能需要存储多个版本的XML。
我在想的解决方案:
摄入:
Sqoop作业每天以avro格式摄取数据以允许二进制导入 - 着陆区(在处理后清除)
将数据从登陆区域移动到具有必要分区的另一个hive表(动态分区移动) - 基表。这是一个Snappy压缩和avro格式的表。在此步骤中,着陆区中的压缩xml将解压缩并存储在基表中,但基表本身将被压缩。
对此有什么想法?
检索:
由于sqoop不支持二进制导出到DB2,我有这些导出选项
将数据作为文本文件导出到某个文件服务器(需要从HDFS到边缘节点再到文件服务器的数据移动)。
子选项:GZip压缩的文本文件。
以Avro格式导出,以便Hadoop之外的任何进程也可以处理它。
子选项:GZip压缩的Avro文件。
Sqoop将解压缩的XML(文本)导出到DB2表。
导出的数据可以是文本格式~2 TB解压缩,如果GZip压缩则为2 GB。我还没有用Avro测量过。
我不确定选择哪一个。首先,将这个卷导出是一个好主意吗?
注意:客户端也投资了Azure,以防万一它是导出选项(不确定安全策略是否允许)。