我正在构建一个网络分析应用程序,我希望低延迟的休息终点采用json并将其存储在hbase中。

我已经阅读了有关kafka的信息,并且Storm似乎是一种将数据导入hbase的好方法,它似乎处理的数据是扁平结构,我无法想象它如何与用例一起使用。

作为我要收集的数据的示例,请参见以下json

{
    page: "www.url.com/checkout.html",
    cat: "checkout"
    browser: "IE 6",
    ipAddress: "127.0.0.1",
    userId: 10000,
    session: 20000,
    timeOnPage: null,
    user: {
        name: "John", gender: "Male", age: 25, lat: 0.1, long: 0.1
    },
    purchased: {
        products: [
            { name: prod1, cost: 100 },
            { name: prod2, cost: 200 },
            { name: prod3, cost: 300 }
        ],
        total: 600
    },
    mouseMovement: [

    ]
}

如您所见,数据不是平面模型,因此某些数据也将在以后的时间点进行更新。

我曾想过这种数据结构可以很好地适合hbase吗?但是也许我是完全错误的?

最佳答案

您可以将hive与Hbase集成,并使用HiveQL进行查询:

例如您的Json文件:

 {"id": 123, "name": "Ram", "role":"TeamLead"}
 {"id": 456, "name": "Silva", "role":"Member"}
 {"id": 789, "name": "Krishna", "role":"Member"}

您可以使用get_json_object函数将数据解析为JSON对象。例如,如果您使用JSON数据创建登台表:
CREATE TABLE staging (json STRING);
LOAD DATA LOCAL INPATH '/local/path/to/jsonfile' INTO TABLE staging;

然后使用get_json_object将要加载的属性提取到表中:
INSERT OVERWRITE TABLE hbase_table_emp SELECT
  get_json_object(json, "$.id") AS id,
  get_json_object(json, "$.name") AS name,
  get_json_object(json, "$.role") AS role
FROM staging;

希望这对您有帮助

10-01 23:26
查看更多