【问题标题】:Put values from Spark RDD to the same HBase column with default timestamp将 Spark RDD 中的值放入具有默认时间戳的同一 HBase 列
【发布时间】:2016-07-07 08:51:11
【问题描述】:

我正在使用 Spark 并尝试将 RDD 写入 HBase 表。

这里是示例代码:

public static void main(String[] args) {
// ... code omitted
    JavaPairRDD<ImmutableBytesWritable, Put> hBasePutsRDD = rdd
            .javaRDD()
            .flatMapToPair(new MyFunction());

    hBasePutsRDD.saveAsNewAPIHadoopDataset(job.getConfiguration());
}

private class MyFunction implements
            PairFlatMapFunction<Row, ImmutableBytesWritable, Put> {

    public Iterable<Tuple2<ImmutableBytesWritable, Put>> call(final Row row) 
            throws Exception {

        List<Tuple2<ImmutableBytesWritable, Put>> puts = new ArrayList<>();
        Put put = new Put(getRowKey(row));
        String value = row.getAs("rddFieldName");

        put.addColumn("CF".getBytes(Charset.forName("UTF-8")), 
                      "COLUMN".getBytes(Charset.forName("UTF-8")),
                      value.getBytes(Charset.forName("UTF-8")));

        return Collections.singletonList(
            new Tuple2<>(new ImmutableBytesWritable(getRowKey(row)), put));
    }
}

如果我像这样手动设置时间戳:

put.addColumn("CF".getBytes(Charset.forName("UTF-8")), 
              "COLUMN".getBytes(Charset.forName("UTF-8")),
              manualTimestamp,
              value.getBytes(Charset.forName("UTF-8")));

一切正常,我在 HBase 列“COLUMN”中的单元格版本与 RDD 中不同值的数量一样多。

但如果我不这样做,那么只有一个单元格版本。

换句话说,如果有多个Put对象具有相同列族和列,不同值和默认时间戳,唯一一个值将被插入,另一个值将被忽略(可能被覆盖)。

您能否帮助我了解它在这种情况下的工作原理(尤其是saveAsNewAPIHadoopDataset)以及如何修改代码以插入值而不是手动设置时间戳。

【问题讨论】:

    标签: java hadoop apache-spark hbase


    【解决方案1】:

    当您不使用时间戳时,它们会被覆盖。 Hbase 需要每个值的唯一键,所以每个值的真正键是

    rowkey + column family + column key + timestamp =&gt; value

    当您不使用时间戳并且它们作为批量插入时,它们中的许多会获得相同的时间戳,因为 hbase 可以在同一毫秒内插入多行。因此,您需要为每个相同的列键值自定义时间戳。

    我不明白您为什么不想使用自定义时间戳,因为您说它已经有效。如果您认为它会在数据库中使用额外的空间,那么即使您不输入 Put 命令,hbase 也已经使用了时间戳。所以当你使用手动时间戳时没有任何变化,请使用它。

    【讨论】:

    • 感谢您的回答,我昨天得出了同样的结论,希望它是正确的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多