1

目前,我从 EDW(企业数据仓库)中将大约 10 个表带入 Hadoop,这些表与星型模式模型密切相关。我使用 Sqoop 将所有这些表放在一起,从而产生 10 个包含 csv 文件的目录。

在取消 MR 工作之前,我正在研究有哪些更好的方法来存储这些文件。在从事 MR 工作之前,我应该遵循某种模型还是构建聚合?我基本上是在研究如何将相关数据存储在一起。

我通过搜索发现的大多数东西都是存储琐碎的 csv 文件并使用 opencsv 读取它们。我正在寻找更多涉及的东西,而不仅仅是 csv 文件。如果转向另一种格式比 csv 效果更好,那没问题。

归结为:如何最好地将一堆相关数据存储在 HDFS 中以获得良好的 MR 体验。

4

3 回答 3

2

我建议花一些时间使用 Apache Avro。

使用 Sqoop v1.3 及更高版本,您可以使用自己设计的模式将关系数据源中的数据作为 Avro 文件导入。Avro 的优点在于它除了作为序列化格式之外还提供了许多功能......

它在同一个文件中为您提供数据+模式,但紧凑且高效,可快速序列化。它为您提供了版本控制功能,在引入具有不同模式的更新数据时非常有用。Hive 在读写上都支持它,Map Reduce 可以无缝地使用它。

它可以用作应用程序之间的通用交换格式(不仅适用于 Hadoop),使其成为在更广泛架构中用于数据交换的标准、跨平台格式的有趣选项。

于 2014-01-26T04:22:09.580 回答
1

将这些文件存储在 csv 中很好。因为您将能够使用文本输出格式处理这些文件,并且还可以使用特定分隔符通过配置单元读取它。如果您不喜欢逗号到管道(“|”),您可以更改分隔符,这是我大部分时间所做的。此外,您通常需要在 hadoop 中有大文件,但如果文件足够大,您可以对这些文件进行分区,并且每个文件分区的大小只有 100 gig,那么最好根据您的分区将这些文件分区到单独的目录中柱子。

此外,将大多数列放在单个表中比拥有许多规范化的小表更好。但这取决于您的数据大小。还要确保无论何时复制、移动或创建数据,都对应用程序进行所有约束检查,因为以后很难在表中进行小的更改,即使是很小的更改,您也需要修改完整的文件。

于 2013-03-12T02:30:36.750 回答
1

Hive Partitioning 和 Bucketing 概念可用于有效地将基于特定列的类似数据放在一起(不是在节点中,而是在文件和文件夹中)。这里有一些很好的PartitioningBucketing教程。

于 2013-03-18T02:18:48.320 回答