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

  • 在Oracle方面,产品主服务器约为10G。
  • 每日增量从5 MB到100 MB不等。

  • 根据我的理解,从长远来看,创建此类小文件将是对名称节点的负担。

    当有人遇到这种解决方案时,您将如何处理?

    最佳答案

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

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

  • 如果确实遇到有关太多小文件的名称节点争用,则可以阅读有关解决“小文件问题” here的方法。

    09-11 11:43
    查看更多