利用hive-hbase表做hive表快速入库hbase功能,纬度表的查询

有个需求是纬度表需要秒出数据,首先表刚好也是1-1批对的情况,首先想到了利用hbase的索引机制。(表数据大概在4--30E之间)

虽然网上有很多直接建立hive表,自动创建hbase表的例子,但是这种情况不能进行hbase表的region预分区,导致热点问题比较严重。所以hive和hbase表要分开建立再关联起来。

1.建立hbase表

create ‘xxxxx‘, {NAME => ‘info‘,COMPRESSION => ‘SNAPPY‘},SPLITS => [‘xxx|‘,‘xxx|‘,‘xxx|‘,‘xxx|‘,‘xxx|‘,‘xx|‘‘]。预分区方式要自己看hbase的rowkey和实际数据入库情况而定,比如hbase的masterui的request是否请求均匀,如果大量数据偏移必须进行region预分区的切分细点。

2.进行hive的表建立

hive关联hbase表
CREATE EXTERNAL TABLE xxxxx.xxxxx(row string,ipaddress string,country string,province string,city string,isp string)
stored BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘
WITH serdeproperties ("hbase.columns.mapping" = ":key,info:ipaddress,info:country,info:province,info:city,info:isp")
tblproperties (‘hbase.table.name‘ = ‘xxxxx‘);

  1.此表必须为外部表不然会报错

  2.必须指定rowkey

3.查询自己要的表做全量数据入库

insert into table xxx.xxxx
select ip as key,concat_ws(xxxx) as ipaddress,country,province,city,isp from xxxx.xxxx where country=‘xx‘;

4.写脚本把每天增量纬度数据相应insert入库就好了

注意:1.这种表比直接建立hive自动建立hbase表有个好处就是删除hive表,hbase不会受到影响。删除hbase表hive也不会受到影响(我记得是如此,可以后续再试试),而hive直接自动建立hbase的表删除hive会带着hbase表一起消失了。

2.表数据实际上应该是存在hbase中,所以索引查询非常的块,实际测试5E数据索引1万内容大概1秒左右

原文地址:https://www.cnblogs.com/yaohaitao/p/12573865.html

时间: 2024-10-09 12:20:12

利用hive-hbase表做hive表快速入库hbase功能,纬度表的查询的相关文章

Hbase 表与Hive 表的映射操作

一.环境准备 需要将HBase的jar包拷贝到Hive中,以便Hive运行时能访问到Hbase 这里演示创建软连接的方式 ln -s $HBASE_HOME/lib/HBase-common-1.3.1.jar $HIVE_HOME/lib/HBase-common-1.3.1.jar ln -s $HBASE_HOME/lib/HBase-server-1.3.1.jar $HIVE_HOME/lib/HBase-server-1.3.1.jar ln -s $HBASE_HOME/lib/H

Hive学习之三 《Hive的表的详解和应用案例详解》

一.Hive的表 Hive的表分为内部表.外部表和分区表. 1.内部表,为托管表. 2.外部表,external. 3.分区表. 详解: 内部表,删除表的时候,数据会跟着删除. 外部表,在删除表的时候,数据不会跟着删除. 默认分隔符:列 为 \001         行分隔符为 \n 分区表: 1.解决查询效率,不全表查询,只查对应的分区. 2.避免数据重复的问题,即数据质量方面安全. create table tablename ( 字段1 字段类型 , 字段2 字段类型 ) PARTITIO

Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名称N' 添加记录 put '表名称', '行名称', '列名称:', '值' 查看记录 get '表名称', '行名称' 查看表中的记录总数 count  '表名称' 删除记录 delete  '表名' ,'行名称' , '列名称' 删除一张表 先要屏蔽该表,才能对

[Hive]HBaseIntegration:通过Hive读写HBase

业务背景 unmatch_oppon_pro是一张Hive表,现在需要将其导入到HBase中. Hive中的unmatch_oppon_pro的表结构如下: 字段 类型 id bigint site_id int product_code string product_name string product_url string update_time string product_price double appraisal_num int sold_num int 导入到HBase时,将 p

Innodb中mysql如何快速删除2T的大表

小漫画 来,先来看小漫画陶冶一下情操OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令这个时候所有的mysql的相关进程都会停止,直到drop结束,mysql才会恢复执行.出现这个情况的原因就是因为,在drop table的时候,innodb维护了一个全局锁,drop完毕锁就释放了. 这意味着,如果在白天,访问量非常大的时候,如果你在不做任何处理措施的情况下,执行了删大表的命令,整个mysql就挂在那了,在删表期间,QPS会严重下滑,然后产品经理就来找你喝茶了.所以才有了漫画中的

HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂)

HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意: 求第n个斐波那契数的前四位和后四位. 不足8位直接输出. 分析: 前四位有另外一题HDU 1568,用取对的方法来做的. 后四位可以用矩阵快速幂,MOD设成10000就行了. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * Blog: http://blog.csdn.

快速修改MySQL某张表的表结构

快速修改MySQL某张表的表结构--摘录自<MySQL管理之道> ALTER TABLE 表名 MODIFY 列名 数据类型; 这个命令可以修改表结构 此外,也可以如下方法修改表结构: 先创建一张表,如下: > create table t1 (id int,        name varchar(5),        rmb decimal(9,1)); 如果要修改name列为varchar(10)的,可以这样操作:alter table t1 modify name varchar

利用socket模拟http的混合表单上传(在一个请求中提交表单并上传多个文件)

在很多企业级应用中,我们都没法直接通过开发语言sdk包封装的http工具来模拟http复合表单(multipart/form-data),特别是在跨语言跨平台的编程过程中,其实实现方案并不复杂,只要你了解了http协议中复合表单的报文结构就很简单了: httpheader ------时间戳------ 表单参数1 ------时间戳------ 表单参数2 ------时间戳------ 文件1的描述+二进制信息 ------时间戳------ 文件2的描述+二进制信息 下面我们进一步以一段c

快速删除数据库中所有表中的数据

原文:快速删除数据库中所有表中的数据 select 'truncate table ' + Name + ';' from sysobjects where xtype='U' order by name asc; 该条语句执行之后会将数据库中所有的表都查询出来,复制出来之后执行truncate语句即可 sysobjects 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占一行. 列名 数据类型 描述 name sy