HIVE和HBASE整合(简单易懂)

所需文件:
链接:https://pan.baidu.com/s/1DvUMixCMI8_-ITTOKP_guw
提取码:3uiv

整合目标:
测试HBASE中插入数据,hive中可以查询到测试
hive中插入数据,HBASE中可以查询到
原料:hadoop,zookeeper,hbase进程全部启动

第一步:
在hive使用有关HBASE中的jar包,将HBASE中lib下有关hbase-*.jar全部倒入到hive的lib目录下;
进入hbase的lib目录下

cp ./hbase-*.jar /usr/local/hive/lib

第二步:
将hive-hbase-handler-2.3.6.jar这个包导入到hive的lib目录下,并且将低版本的jar包删除(hive-hbase-handler-1.2.0.jar),此包的作用:是将hive中的表与HBASE用想对应的表做一个映射。

将低版本的jar包删除(hive-hbase-handler-1.2.0.jar)

这个目录下的class文件是用于指定使用哪一个具体的类实现两个表的映射;

在这里插入图片描述
第三步:
在hive的conf目录下复制重命名hive-env.sh.template文件为hive-env.sh,并做如下修改:

cp hive-env.sh.template hive-env.sh
nano hive-env.sh

修改以下数据
在这里插入图片描述
第一个修改hadoop的主目录所在位置
第二个修改为hive的conf目录
第三个修改为hive的lib目录

ctrl+X退出文件

第四步:
修改hive-site.xml文件,配置zookeeper的信息。修改内容如下:

<property> 
               <name>hive.zookeeper.quorum</name> 
              <value>node51(主机名)</value>
</property> 
<property>
                <name>hive.zookeeper.client.port</name>
                <value>2181</value>
 </property>

在这里插入图片描述
第五步:
启动测试启动hadoop/hive/zookeeper/hbase

第六步: 查看是否能够互相映射表内容

1:添加hbase内容
先创建hbase的命名空间和表格,使用javaAPI添加数据
要添加数据的hbase的users表的结构

创建命名空间,创建表格,添加列簇使用main方法调用

@SuppressWarnings({ "deprecation", "resource" })
 private static void Create() throws Exception {
  // 创建配置对象
  Configuration conf = HBaseConfiguration.create();
  conf.set("hbase.zookeeper.quorum", "192.168.163.130:2181");
  //创建操作的主用户
  HBaseAdmin admin = new HBaseAdmin(conf);
  
  //创建命名空间
  NamespaceDescriptor create = NamespaceDescriptor.create("shopping").build();
  admin.createNamespace(create);
  System.out.println("命名空间创建完成");
  //创建表
  HTableDescriptor table=new HTableDescriptor(TableName.valueOf("shopping:users"));
  //创建列簇
  HColumnDescriptor cf1 = new HColumnDescriptor("base_info".getBytes());
  HColumnDescriptor cf2 = new HColumnDescriptor("extra_info".getBytes());
  
  table.addFamily(cf1);
  table.addFamily(cf2);
  admin.createTable(table);
  System.out.println("表创建完成");
  
  admin.close();
 }

添加数据,使用的是桌面的data.txt,可以自行修改路径,网盘文件中自带

@SuppressWarnings({ "deprecation", "resource" })
 private static void Insert() throws IOException {
  // TODO Auto-generated method stub
  // 创建配置对象
  Configuration conf = HBaseConfiguration.create();
  conf.set("hbase.zookeeper.quorum", "192.168.163.130:2181");
  
  //创建表对象
  HTable table = new HTable(conf, TableName.valueOf("shopping:users"));
  //要读取的文件路径
  FileReader reader = new FileReader("C:\\Users\\DELL\\Desktop\\data.txt");
  //使用缓冲输入流
  BufferedReader reader2 = new BufferedReader(reader);
  //定义一个空字符串
  String line = null;
  //读出来的一行赋值给字符串,如果不是空,就继续读
  while ((line=reader2.readLine())!=null) {
   //对一行内容进行切割
   String[] split = line.split("\t");
   //第一行是行键
   Put put = new Put(split[0].getBytes());
   //按照字段名称,指定列簇,添加切割内容
   put.add("base_info".getBytes(), "name".getBytes(), split[1].getBytes()); 
   put.add("base_info".getBytes(), "age".getBytes(), split[2].getBytes()); 
   put.add("extra_info".getBytes(), "hobbies1".getBytes(), split[3].getBytes()); 
   put.add("extra_info".getBytes(), "hobbies2".getBytes(), split[4].getBytes()); 
   
   table.put(put);
  }
  System.out.println("插入数据完成");
  //关闭服务
  table.close();
  reader.close();
  reader2.close();
 }

进入hbase的shell命令行,扫描添加命名空间下表的内容

hbase shell
scan 'shopping:users'

在这里插入图片描述
2.在hive创建映射表

create external table users(id string,name string,age int,hobbies1 string,hobbies2 string) row format delimited fields terminated by '\t' stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping"=":key,base_info:name,base_info:age,extra_info:hobbies1,extra_info:hobbies2") tblproperties ("hbase.table.name"="shopping:users");

解释:

开头内容为创建一个hive外部表
1.1stored by 'org.apache.hadoop.hive.hbase.HbaseStorageHandler’
指定使用哪一个具体的类实现两个表的映射;
1.2
with serdeproperties (“hbase.columns.mapping”=":key,base_info:name,base_info:age,extra_info:hobbies1,extra_info:hobbies2")
指定HBASE表中的列簇下的列与hive表中的哪些字段是对应的关系;个表的映射;
1.3tblproperties (“hbase.table.name”=“shopping:users”);
指定hive与哪张HBASE表是映射关系;

在这里插入图片描述
添加映射完成

第七步:
插入数据测试测试HBASE中插入数据
hive中可以查询到测试hive中插入数据,HBASE中可以查询到

hive命令行

insert into users values('user9','kangkang','18','music',null);

插入hive一条数据
在这里插入图片描述

!exit
hbase shell

进入hbase查看表内容

scan 'shopping:users'

在这里插入图片描述

HIVE和HABASE整合完成

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值