我最近在Hive和HBase之间进行了集成。我用HBase serde创建了一个配置单元表,当我将记录插入配置单元表时,它就会加载到HBase表中。我试图理解,如果插入到HiveHBase表中的操作在这两者之间失败了,该怎么办?(HBase服务失败/网络问题)。我假设已经加载到HBase中的记录将在那里,当我重新运行操作时,我将有两个具有不同时间戳的数据副本(假设在20K个记录中插入了10k个,并且发生了故障)。
- 将记录插入HBase的最佳方式是什么
- Hive能为我提供安全检查,看看数据是否已经存在吗
- mapreduce是此类场景的最佳拍摄方式吗?我将编写一个mapreduce程序,从hive中读取数据,并在插入之前逐个检查hbase中的记录。这样可以确保没有重复写入
如有任何帮助,我们将不胜感激。
是的,当您重新运行加载操作时,您将有两个版本的数据。但这没关系,因为第二个版本将在下一次压缩时清理干净。只要你的插入是幂等的(它们很可能是),你就不会有问题。
在Lithium+Klout,我们使用定制的HBaseSerDe来写入HFiles,而不是使用Put来插入数据。因此,我们生成HFiles,并在作业完成后使用批量加载工具加载所有数据。这是集成Hive和HBase的另一种方法。