【问题标题】:Hbase: put multiple versions of a row at the same time using JSONHbase:使用JSON同时放置一行的多个版本
【发布时间】:2017-08-04 13:14:30
【问题描述】:

Cloudera Hbase REST API docs这是XML结构到PUT同时多行。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <CellSet>
    <Row key="cm93NQo=">
      <Cell column="Y2Y6ZQo=">dmFsdWU1Cg==</Cell>
      <Cell column="Y2Y6ZQo=">dmFsdWU1Cg==</Cell>
    </Row>
    <Row key="cm93NQo=">
      <Cell column="Y2Y6ZQo=">dmFsdWU1Cg==</Cell>
    </Row>
  </CellSet>

问:如何使用 JSON?

到目前为止我已经尝试过:

  1. 使用CellSet 键,出现以下错误:

错误 500 无法识别字段“CellSet”(类 org.apache.hadoop.hbase.rest.model.CellSetModel),未标记为可忽略

    {
      "CellSet": {
        "Row": [
          {
            "key": "cm93NQo=",
            "Cell": [
              {
                "column": "Y2Y6ZQo=",
                "$": "dmFsdWU1Cg=="
              },
              {
                "column": "Y2Y6ZQo=",
                "$": "dmFsdWU1Cg=="
              }
            ]
          },
          {
            "key": "cm93NQo=",
            "Cell": [
              {
                "column": "Y2Y6ZQo=",
                "$": "dmFsdWU1Cg=="
              }
            ]
          }
        ]
      }
    }
  1. 没有CellSet 键、没有错误并且每行只有一个版本:

{
   "Row": [
    {
      "key": "cm93NQo=",
      "Cell": [
        {
          "column": "Y2Y6ZQo=",
          "$": "dmFsdWU1Cg=="
        },
        {
          "column": "Y2Y6ZQo=",
          "$": "dmFsdWU1Cg=="
        }
      ]
    },
    {
      "key": "cm93NQo=",
      "Cell": [
        {
          "column": "Y2Y6ZQo=",
          "$": "dmFsdWU1Cg=="
        }
      ]
    }
  ]
}

【问题讨论】:

    标签: javascript json xml hadoop hbase


    【解决方案1】:

    当然,如果它们具有相同的时间戳,您就不能插入行的多个版本。在您的示例中,数据仅使用行键和列标识。我没有使用 Cloudera,也从未使用过 HBase REST api,但根据 source code on github,CellModel 允许设置单元格时间戳。所以我建议将它添加到您的请求中:

    "Row": [
        {
          "key": "myRowKey",
          "Cell": [
            {
              "column": "myColumn",
              "$": "value1",
              "timestamp" : 1473379200
            },
            {
              "column": "myColumn",
              "$": "value2",
              "timestamp" : 1470000000
            }
          ]
        }
    

    另外,在您的示例中,有两行具有相同的键,请检查数据是否正确

    【讨论】:

    • 谢谢,我没有想到那种方法。它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多