jba*_*sko 8 hadoop hbase mapreduce
有没有一种有效的方法来删除HBase中的多行或者我的用例气味是否不适合HBase?
有一个表格'chart',其中包含图表中的项目.行键的格式如下:
chart|date_reversed|ranked_attribute_value_reversed|content_id
有时我想为给定日期重新生成图表,所以我想删除从'chart | date_reversed_1'开始直到'chart | date_reversed_2'的所有行.有没有比为Scan找到的每一行发出删除更好的方法?要删除的所有行都将彼此接近.
我需要删除行,因为我不希望一个项目(一个content_id)有多个条目,如果它的ranking_attribute_value已被更改,它将具有多个条目(其更改是图表需要重新生成的原因).
作为一个HBase的初学者,所以也许我可能会滥用行以获得更好的列 - 如果你有设计建议,很酷!或者,也许图表在文件中更好地生成(例如,没有HBase用于输出)?我正在使用MapReduce.
首先,到了范围删除点,HBase,AFAIK还没有范围删除.但是有一种方法可以在HTableInterface API中一次删除多行.为此,只需从扫描中形成一个带有行键的Delete对象,并将它们放入List并使用API,完成!要使扫描更快,请不要在扫描结果中包含任何列族,因为您只需要用于删除整行的行键.
其次,关于设计.首先我对要求的理解是,有内容具有内容id,每个内容都有针对它们生成的图表并存储这些数据; 每个内容可以通过日期有多个图表,取决于排名.此外,我们希望最后生成的内容的图表显示在表格的顶部.
对于我对该要求的假设,我建议使用三个表 - auto_id,content_charts和generated_order.content_charts的行键是它的内容id,generated_order的行键是long,它将使用HTableInterface API 自动递减.对于递减使用'-1'作为偏移量并在应用程序首次启动时或在手动初始化auto_id表中的值Long.MAX_VALUE.因此,现在如果要删除图表数据,只需使用delete清除列族,然后放回新数据,然后将put放入generated_order表中.这样,最新的插入也将位于最新插入表的顶部,该表将内容id保存为单元格值.如果要确保generated_order每个内容只有一个条目,请首先保存generated_order id并获取值并在放入时将其保存到content_charts中,在删除列族之前,首先从generated_order中删除该行.通过这种方式,您可以使用2获取最大内容并且不需要扫描图表来查找内容.
我希望这是有帮助的.