将RDBMS中保存的非结构化数据卸载到Hadoop

时间:2019-01-23 12:45:08

标签: hadoop sqoop

我的组织正在考虑将作为Oracle数据库中表的一部分保存的文本,图像等非结构化数据卸载到Hadoop中。数据库的大小约为10 TB,并且还在不断增长。 CLOB / BLOB列的大小约为3 TB。现在,可以通过Web应用程序查询这些列以获取某些类型的报告。它们也被写入但不是很频繁。

我们可以采取哪种方法来实现适当的数据卸载,并确保已卸载的数据可供通过现有Web应用程序读取。

1 个答案:

答案 0 :(得分:1)

您可以在oracle博客(link)中获得部分答案。

如果需要通过sqoop在HDFS环境中提取数据,则必须首先阅读sqoop文档中的以下内容。

Sqoop以特定方式处理大型对象(BLOB和CLOB列)。如果此数据确实很大,则这些列不应该像大多数列一样在存储器中完全实现。而是以流方式处理其数据。大型对象可以与其余数据内联存储,在这种情况下,每次访问它们都会在内存中完全实现,或者可以将它们存储在链接到主数据存储的辅助存储文件中。默认情况下,大小小于16 MB的大型对象与其余数据一起内联存储。它们较大时,存储在导入目标目录的_lobs子目录中的文件中。这些文件以针对大型记录存储进行了优化的单独格式存储,每个文件最多可容纳2 ^ 63字节的记录。 lob溢出到单独文件中的大小由--inline-lob-limit参数控制,该参数接受一个参数,该参数指定要保持内联的最大lob大小(以字节为单位)。如果将内联LOB限制设置为0,则所有大对象都将放置在外部存储中。

如果您使用的是像Impala这样的MPP查询引擎,则可以通过Web应用程序进行读取,并且效果很好,并且是可用于生产的技术。我们大量使用复杂的Impala查询来呈现SpringBoot应用程序的内容。由于Impala在内存中运行所有内容,因此如果它是多租户Cloudera集群,则可能会出现运行缓慢或失败的情况。对于较小的用户组(1000-2000用户群),它可以很好地工作。

如果需要更多输入,请告诉我。

推荐将会

  1. 使用Cloudera发行版(read here
  2. 为Impala Deamons提供足够的内存
  3. 确保已针对基于计划(公平共享或优先级共享)的ETL负载与Web应用程序负载正确配置了YARN
  4. 如果需要,请使Impala守护程序远离YARN
  5. 为Impala内存定义内存配额,以便允许并发查询
  6. 平整您的查询,使Impala可以更快地运行,而无需联接和混洗。
  7. 如果您只阅读几列内容,请将其存储在Parquet中,它的运行速度非常快。