在hadoop文件系统上执行更新的最佳方法是什么?例如,我有一个包含数据的avro文件,为了下一次运行,我需要更新avro文件本身中的数据。我们如何解决这个问题?例如:我有下面关于hdfs的数据,下次需要更新“substricts”数组{“name”:“districtname”,“\u class”:“org.bitbucket.codezarvis.api.dto.districtdocument”,“type”:“district”,“substricts”:[256,257]}
shstlldc1#
我还提出了一个方法和设计的文件
{ "diffs": [{ "before": null, "after": { "org.bitbucket.codezarvis.api.dto.DistrictDocument": { "districtId": { "mostSigBits": -917, "leastSigBits": -562 }, "state": null, "subDistricts": { "array": [{ "subDistrictId":111, "longitudeOfPoi": { "string": "1.52256" }, "latitudeOfPoi": { "string": "42.543528" } } } }] }
包含差异项的avro文件,其中包含必须应用于下一次运行的增量。diff包含一个或多个相互关联的diff条目。diff包含每个修改、删除或添加的分区条目的“before”和“after”信息。如果与上一次运行相比添加了子区,“before”将为空。如果与上一次运行相比删除了子区,则“after”将为空。如果与上一次运行相比修改了子区,则“before”和“after”都将存在。输出中存在delta记录可能有以下原因:与hdfs上的上一个输出相比,区域被更改、添加或删除。
mklgxw1f2#
hdfs被设计成一个只写一次、只附加的文件系统。也就是说,您有几个选项可以执行更新操作:使用hbase,它在底层hdfs文件之上提供了一个无sql系统。请记住,它对您隐藏了魔力,但它仍然必须执行您必须执行的操作—制作文件副本、仅替换必要的部分、交换文件等。它的性能不会很出色,但它会完成工作。配置单元插入覆盖将允许您运行执行更新/计算的查询,然后用更新的数据覆盖表。或者您可以将覆盖限制为单个分区,然后考虑如何管理分区。不更新,始终写入新行/文件。当您有新数据时,将其写入新分区,即使它正在替换其他数据。从表中选择数据时,始终只选择最新的分区。您的数据历史将继续增长,您可以在其他时间删除那些旧分区。建议-如果你发现自己在hadoop中经常遇到这种情况,请重新考虑hadoop是否是最佳选择。acid最好由sql解决方案完成。
clj7thdc3#
模式演化是一个在不重写现有数据的情况下修改模式的通用概念。如果数据作为avro存储在hive表中(底层数据存储在hdfs中),那么可以更改模式(尽管这也有一些局限性)。
3条答案
按热度按时间shstlldc1#
我还提出了一个方法和设计的文件
包含差异项的avro文件,其中包含必须应用于下一次运行的增量。
diff包含一个或多个相互关联的diff条目。
diff包含每个修改、删除或添加的分区条目的“before”和“after”信息。
如果与上一次运行相比添加了子区,“before”将为空。如果与上一次运行相比删除了子区,则“after”将为空。
如果与上一次运行相比修改了子区,则“before”和“after”都将存在。
输出中存在delta记录可能有以下原因:与hdfs上的上一个输出相比,区域被更改、添加或删除。
mklgxw1f2#
hdfs被设计成一个只写一次、只附加的文件系统。也就是说,您有几个选项可以执行更新操作:
使用hbase,它在底层hdfs文件之上提供了一个无sql系统。请记住,它对您隐藏了魔力,但它仍然必须执行您必须执行的操作—制作文件副本、仅替换必要的部分、交换文件等。它的性能不会很出色,但它会完成工作。
配置单元插入覆盖将允许您运行执行更新/计算的查询,然后用更新的数据覆盖表。或者您可以将覆盖限制为单个分区,然后考虑如何管理分区。
不更新,始终写入新行/文件。当您有新数据时,将其写入新分区,即使它正在替换其他数据。从表中选择数据时,始终只选择最新的分区。您的数据历史将继续增长,您可以在其他时间删除那些旧分区。
建议-如果你发现自己在hadoop中经常遇到这种情况,请重新考虑hadoop是否是最佳选择。acid最好由sql解决方案完成。
clj7thdc3#
模式演化是一个在不重写现有数据的情况下修改模式的通用概念。如果数据作为avro存储在hive表中(底层数据存储在hdfs中),那么可以更改模式(尽管这也有一些局限性)。