使用hadoop收集异构数据

时间:2016-08-08 13:15:15

标签: hadoop

我们有一个系统,包括一些Oracle和Microsoft SQL DBMS,它们从不同的来源和不同的格式获取数据,存储和处理它。 “不同格式”表示文件:dbf,xls和其他文件,包括二进制格式(图像),使用不同的工具导入到DBMS,以及直接访问数据库。我希望隔离所有传入的数据并将其“永久存储”,并希望稍后通过源和创建时间来获取它们。经过一些研究,我想尝试hadoop生态系统,但不太确定,如果它是这个目标的适当解决方案。我应该使用哪些生态系统?仅HDFS,Hive,可能还有别的什么?你能给我一点建议吗?

2 个答案:

答案 0 :(得分:0)

我假设您要存储包含数据的文件 - 实际上是一个可搜索的文件存档。

文件本身可以存储在HDFS中......或者你可能会发现像亚马逊S3这样的系统更便宜,更灵活。在存储文件时,您可以通过附加到另一个文件来管理有关数据的其他数据,即:位置,源和创建时间 - 一个简单的制表符分隔文件或Hadoop支持的其他几种格式使这很容易。

您可以使用Hive或其他SQL-on-Hadoop工具管理和查询文件。实际上,您正在创建一个具有特殊属性的简单文件系统,因此诀窍是确保每次编写文件时都要编写元数据。您可能必须处理写失败等情况,删除,重命名或移动文件时会发生什么(我知道,您说“从不”)。

根据您的需求,您的解决方案可能更简单,您可能会发现将数据存储在HDFS(或AWS S3)中的子目录中更为简单。也许如果你想存储来自源“foo”的DBF文件,以及2015年12月1日创建的“bar”中的XLS文件,你可以简单地创建一个像

这样的目录结构。
/2015/12/01/foo/dbf/myfile.dbf
/2015/12/01/bar/xls/myexcel.xls

此解决方案具有自我维护的优势 - 文件路径存储元数据,使其非常便携和简单,只需要shell脚本即可实现。

我认为没有任何理由让解决方案比必要的更复杂。 Hadoop或S3适用于长期,高耐用性存储和查询。我的公司发现在Hadoop中存储有关该文件的信息(我们用于许多其他目的)并将文件本身存储在AWS S3上更简单,更容易保护并且更便宜。

答案 1 :(得分:0)

您可能想要做各种各样的事情,每个事情都有自己的解决方案。如果有多个用例与您相关,您可能希望并行实现多个解决方案。

1。存储文件以供使用

如果您希望以有效(分发)方式存储文件,解决方案很简单:将文件放在hdfs上

2。存储使用信息

如果您想使用这些信息,而不是存储您应该感兴趣的文件,以便能够有效地获取信息。这里的一般解决方案是:以损失的方式解析文件并将其信息存储在数据库中

您可能会发现在(分区)ORC文件中存储信息对此很有用。你可以用Pig中的Pive,Pig甚至UDF(例如python)来做到这一点。

3。保留以后的文件

在这种情况下,您最关心的是保留文件,而不是关于访问的简便性。建议的解决方案是:使用适当的备份存储压缩文件

请注意,hdfs执行的复制是为了更有效地处理数据(和硬件问题)。在hdfs上存储数据并不意味着它已备份。