2013-03-12 52 views
1

目前,我正在从EDW(企业数据仓库)的10个表中引入Hadoop,这些表格与Star Schema模型密切相关。我喜欢Sqoop将所有这些表放在一起,导致包含csv文件的10个目录。在Hadoop中建模数据

我正在看什么是一些更好的方法来存储这些文件,然后再关闭MR作业。在开展MR工作之前,我应该遵循某种模式还是建立一个聚合体?我基本上在考虑如何将相关数据存储在一起。

我通过搜索发现的大部分内容都是存储简单的csv文件并使用opencsv读取它们。我正在寻找一些更多的参与,而不仅仅是为了CSV文件。如果转向另一种格式比csv更好,那么这没有问题。

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

回答

1

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

此外,将单个表中的大多数列设置为具有许多标准化小表格会更好。但是,这取决于您的数据大小。此外,请确保在复制,移动或创建数据时,对应用程序执行所有约束检查,因为稍后很难对表格进行小的更改,您将需要修改完整文件以进行小改动。

1

Hive分区和Bucketing概念可用于有效地用于基于特定列将相似数据放在一起(不在节点中,但在文件和文件夹中)。这里有一些不错的教程PartitioningBucketing

2

我建议花一些时间与Apache Avro。

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

它为您提供了data + schema在同一个文件中,但是对于快速序列化来说它既紧凑又高效。它为您提供版本控制功能,在使用不同模式引入更新数据时非常有用。 Hive支持阅读和写作,Map Reduce可以无缝地使用它。

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