0

我已经开始了一个分析项目。用例是了解客户购买模式和数据源,如 Web 日志、关系数据库(包含产品主数据、客户主数据)。关系数据库团队,hadoop 团队是完全不同的。在架构讨论期间,讨论了主数据(产品、客户、)将是一次性加载,增量更新将是从 oracle 到 hdfs 的每日 sqoop,并且使用 Hive 需要生成当前视图(包含所有最新产品变化)。从产品详细信息开始。

  1. Oracle 端的产品主控大约为 10G。
  2. 每日增量从 5 MB 到 100 MB 不等。

根据我的理解,从长远来看,创建这样的小文件会对名称节点造成负担。

当有人遇到这样的解决方案时,你是如何处理它的?

4

1 回答 1

1

我还没有看到任何问题。如果您从一个大文件开始并每天添加 1 个文件,那么一年后您将得到大约 1000 个文件,这不是问题(至少对于名称节点来说不是)。
尽管如此,无论数量多少,在 HDFS 中保存小文件都不是最佳选择。
我建议您对此采取应用方法,并在经过足够的时间后合并文件,例如:

  1. 在您的表(产品主)上创建每月分区,每天将新文件插入表中,当月结束后,插入覆盖数据回到同一分区。
  2. 如果数据断言不是简单地通过插入完成,而是有更复杂的逻辑,则解决方案可能是创建主表,然后将增量数据复制到 HDFS 位置并在该位置创建外部表。
    结合使用union allin a 的这两个表view并创建一个加载过程,在可能的情况下不时将数据从 HDFS 加载到主表。

如果您确实遇到关于太多小文件的名称节点争用,您可以在此处阅读有关解决“小文件问题”的方法

于 2013-12-26T21:49:11.520 回答