淘先锋技术网

首页 1 2 3 4 5 6 7

说明:通过案例来温故下用到的知识点。

案例:

  数据准备:ip7.json

{"id":188,"ip":"112.168.10.129","domain":"www.baidu.com","port":80}
{"id":267,"ip":"132.158.140.119","domain":"www.baidu1.com","port":807}
{"id":3445,"ip":"112.168.10.129","domain":"www.alibaba.com","port":805}
{"id":4535,"ip":"132.158.120.119","domain":"www.baidu1.com","port":840}
{"id":14534,"ip":"102.118.10.129","domain":"www.360.com","port":8060}
{"id":22332,"ip":"12.8.140.119","domain":"www.sina.com","port":8080}

  题目:将符合要求的数据通过hive放入hbase

    1、将数据放入临时表ip7_temp中   --  注:温故下如何将json数据放入临时表中,用到官方json包

    2、将id>3445的记录放入hbase的表hive2hbase1中  -- 注:温故一下 hive与hbase的整合知识点(或者hbase与hive整合)

    3、将记录按照ip地址的网段分组并显示访问条数,例如:   -- 注:温故一下 hbase与hive的整合知识点

id	ip	total
1	124.34.34.56	3
2	124.34.34.53	3
3	124.34.34.52	3
4	125.32.34.56	2
5	125.32.34.56	2

         同时将数据存入hbase的hive2hbase2表中。

 解答:

  #1、将数据放入临时表ip7_temp中

  1、建表

create table if not exists ip7_temp(
id int,
ip string,
domain string,
port int
)
row format serde "org.openx.data.jsonserde.JsonSerDe";

  2、加载数据

load data local inpath 'hivedata/ip7.json' into table ip7_temp;

  #2、将id>3445的记录放入hbase的表hive2hbase1中

1、创建个数据库

create database hive2hbase;

2、使用该数据库,将表、数据都放到此数据库中

use hive2hbase;

3、在hive中建表与hbase整合 -- 注:在hive中加载数据不能使用load,故使用insert into

create table if not exists hive2hbase (
id int,
ip string,
domain string,
port int
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties(
"hbase.columns.mapping"=":key,base_info:ip,base_info:domain,base_info:port"
)
tblproperties(
"hbase.table.name"="hive2hbase1"
);

 4、将数据加载到hbase中  -- 注:在hive中加载数据不能使用load,故使用insert into

insert into hive2hbase
select * from ip7_temp where id >3445;

  #3、将记录按照ip地址的网段分组并显示访问条数  -- 利用hbase与hive整合

 第一步:

  •  在hbase中建表
#新建命名空间
create_namespace 'hivehbasedemo'
#建表
create 'hivebasedemo:hbase2hive2','base_info'
#查询表结构
describe 'hivehbasedemo:hbase2hive2'
  • 然后在hive中建表
create external table if not exists hbase2hive2 (
id int,
ip string,
domain string,
port int
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties(
"hbase.columns.mapping"=":key,base_info:ip,base_info:domain,base_info:port"
)
tblproperties(
"hbase.table.name"="hivehbasedemo:hbase2hive2"
);

第二步:

  • 在idea中使用java自定义函数来获取ip的前三位  -- 因为系统内置函数当中没有符合要求的
package com.qf.hive;

import org.apache.hadoop.hive.ql.exec.UDF;

public class GetSubStr extends UDF {
    public String evaluate(String  str){
        return  str.substring(0,str.lastIndexOf("."));
    }
}
  • 将自定义的jar包 上传到 服务器,做好准备工作后,先检测一下是否成功
select id,ip,count(*) over(partition by(substr(ip))) from ip7_temp;
  • 按要求分组后的数据加载到hbase中
insert into hive2hbase2
select id,ip,count(*) over(partition by(substr(ip))) total from ip7_temp;