我们有一个系统,包括一些Oracle和Microsoft,它从不同的来源和不同的格式获取数据,存储和处理数据。“不同格式”是指文件: dbf、xls和其他文件,包括使用不同工具导入DBMS的二进制格式(图像),以及直接访问数据库。我希望隔离所有传入的数据,并“永远”地存储它,并希望稍后按源和创建时间获取它们。经过一些研究,我想尝试hadoop生态系统,但不太确定,它是否是这个目标的适当解决方案。我应该使用生态系统的哪些部分?单是HDFS,Hive,可能是别的什么吗?你能给我提个建议吗?
发布于 2016-08-09 02:54:16
我假设您想要存储包含数据的文件--实际上是一个可搜索的文件存档。
文件本身可以存储在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上要简单得多,更容易保护,而且成本更低。
发布于 2016-08-10 11:45:45
你可能想做各种各样的事情,每一件事都有自己的解决方案。如果不止一个用例与您相关,您可能希望并行实现多个解决方案。
1.储存供使用的档案
如果您想以一种能够高效地(分布式)获取文件的方式存储文件,那么解决方案很简单:将文件放在hdfs上。
2.储存资料以供使用
如果您想使用这些信息,而不是存储文件,那么您应该有兴趣以一种能够有效地获取这些信息的方式来存储这些信息。这里的一般解决方案是:以丢失的方式解析文件,并将它们的信息存储在数据库中。
您可能会发现,将信息存储在(分区的) ORC文件中是很好的。你可以用Pive,Pig,甚至是Pig中的UDF(例如python)来完成这个任务。
3.为将来保存这些档案
在这种情况下,您主要关心的是保存文件,而不是那么容易访问。这里推荐的解决方案是:存储具有适当备份的压缩文件,
请注意,hdfs所做的复制是为了更有效地处理数据(和硬件问题)。仅仅拥有hdfs上的数据并不意味着它被备份了。
https://stackoverflow.com/questions/38830215
复制相似问题