我需要每天将db2数据库中的数据摄取到hdfs中,并使用必要的分区、文件夹或配置单元分区。例如,基于业务线(lob)、状态和顺序中的日期的分区。db2表包含存储gzip压缩xml的blob列。一旦接收到数据,还需要根据分区列和xml中的某些值,每天进行检索。查询或检索过程不必基于所有分区列;它可以仅仅基于lob和state,而不是基于日期。例如,基于状态检索到的数据可能很大(压缩-160 gb,解压缩-1600 gb)。
需求概要:
每天将db2表中的数据摄取到带有分区文件夹的HDF中。
该表包含blob列(包含gzip压缩的xml)
在hdfs中保存数据x年(可能价值约40 tb的数据)
根据一些预定义的查询(hive/mr)检索数据
周期性地,xml也必须被转换,并且可能需要存储同一xml的多个版本。
我正在思考的解决方案:
摄入:
sqoop作业每天以avro格式接收数据,以允许二进制导入-登录区域(在处理后清除)
将数据从登录区域移动到另一个具有必要分区(动态分区移动)的配置单元表-基表。这是一个具有snappy压缩和avro格式的表。在这一步中,着陆区中的压缩xml将被解压缩并存储在基表中,但基表本身是压缩的。
选择avro是因为sqoop导入二进制作为序列文件格式将二进制存储为sqoop特定的格式,而avro使用的相同解压缩代码不适用于序列文件。orc是另一种选择,但我希望在mr中处理的灵活性,而不仅仅是Hive。
有什么想法吗?
检索:
由于sqoop不支持二进制导出到db2,所以我有以下导出选项
将数据作为文本文件导出到某个文件服务器(需要将数据从hdfs移动到边缘节点,然后再移动到文件服务器)。
子选项:gzip压缩的文本文件。
以avro格式导出,以便hadoop之外的任何进程也可以处理它。
子选项:gzip压缩的avro文件。
sqoop将解压缩的xml(文本)导出到db2表。
导出的数据可以是文本格式~ 2 tb解压缩,如果其gzip压缩,则为2 gb。我还没有用avro测量过。
我不知道该选哪一个。首先,把这本书出口是个好主意吗?
注意:客户还投资了azure,以防万一它是导出的一个选项(不确定安全策略是否允许)。
暂无答案!
目前还没有任何答案,快来回答吧!