gpt4 book ai didi

hadoop - MapReduce 和 Hive 应用程序设计

转载 作者:可可西里 更新时间:2023-11-01 15:07:07 24 4
gpt4 key购买 nike

我有一个设计问题,在我的 CDH 4.1.2(Cloudera) 安装中,我将每日滚动日志数据转储到 HDFS 中。我有一些报告来计算每天的成功率和失败率。

我有两种方法

  1. 将每日日志数据加载到 Hive 表中并创建一个复杂的查询。
  2. 每天预先运行 MapReduce 作业以生成摘要(本质上是几行)并继续附加到一个 Hive 表的公共(public)文件。稍后在运行报告时,我可以使用一个简单的选择查询来获取摘要。

我正在尝试了解两者中哪种方法更好,或者是否有更好的方法。

第二种方法在合并文件方面增加了一些复杂性。如果不合并,我会有很多非常小的文件,这似乎是个坏主意。

感谢您的意见。

谢谢

最佳答案

Hive 似乎很适合这类任务,而且做起来应该相当简单:

  • 在 Hive 中创建一个 EXTERNAL 表,该表应按天分区。目标是您转储数据的目录将直接位于您的 Hive 表中。您可以在日常日志中指定字段的分隔符,如下所示,我使用逗号的地方:

    create external table mytable(...) partitioned by (day string) row format delimited keys terminated by ',' location '/user/hive/warehouse/mytable`
  • 当您将数据转储到 HDFS 中时,请确保将其转储到与 day= 相同的目录中,以便它可以被识别为一个配置单元分区。例如在 /user/hive/warehouse/mytable/day=2013-01-23

  • 然后您需要让 Hive 知道该表有一个新分区:

    alter table mytable add partition (day='2013-01-23')
  • 现在 Hive 元存储知道您的分区,您可以运行摘要查询。确保您仅通过指定 ... where day='2013-01-23'

  • 查询分区

您可以很容易地编写脚本让它每天在 cron 或其他东西中运行并获取当前日期(例如使用 shell date 命令)并在执行上述步骤的 shell 脚本中用变量替换它.

关于hadoop - MapReduce 和 Hive 应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com