hive与hbase之间数据的同步

2023-11-18

一、前言

数据同步是很多公司在做数据迁移时的一个痛点,当然互联网公司有自己的同步机制或者工具,但是困惑了我这几天的需求,还是没有得到解决,事已至此,来写这篇博客记录一下自己最近的研究成果。

二、如何同步

hive如何与Hbase直接实现数据同步呢,目前有两种方案:

(一)hive关联hbase表的方式

1.适用场景

数据量不大4T以下(因为需要走hbase的api导入数据);

2.连接方式

从hbase页面获取zk连接地址(http://hadoop102:16010 ),并用下述方式启动hive客户端;

3.同步方式:

(1)如果hbase表不存在的情况下:

  • 创建hive表tmp_hive_hbase_table映射hbase表tmp_hbase_table,会自动创建hbase表tmp_hbase_table,且会随着hive表删除而删除。这里需要指定hive的schema到hbase schema的映射关系(指的是hive表的字段跟hbase的字段一一对应)。
CREATE TABLE tmp_hive_hbase_table(id string, val string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf_1113:val") 
TBLPROPERTIES ("hbase.table.name" = "tmp_hbase_table", 
"hbase.mapred.output.outputtable" = "tmp_hbase_table");
  • 创建一张hive表tmp_hive_hbase_table,并添加几条数据:
-- 创建hive的普通表
create table tmp_hive_data(id int,val string);
-- 添加3条数据
insert into tmp_hive_data values(1,"ceshi1");
insert into tmp_hive_data values(2,"ceshi2");
insert into tmp_hive_data values(10,"ceshi10");
  • 把hive原表tmp_hive_data中数据,通过hive表tmp_hive_hbase_table导入到hbase的表tmphbase_table中:
insert into table tmp_hive_hbase_table select * from tmp_hive_data;
  • 查看hbase表hbase_table中是否有数据

(2)如果hbase存在的情况下使用外部表的形式进行同步,其他步骤跟同上一样;

CREATE EXTERNAL TABLE tmp_hive_hbase_external_table(key int, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") 
TBLPROPERTIES ("hbase.table.name" = "tmp_hbase_table", 
"hbase.mapred.output.outputtable" = "tmp_hbase_table");

(二)hive表生成hfile,通过bulkload导入到hbase

  1. 适用场景

该方式适合大数据量的情况下使用,官方建议数据量大(4T以上),视情况而定。

    2.把hive数据转换为hfile

该方式先把hive数据转换成hfile文件上传至hdfs上,通过阿里提供的bulkload工具去hdfs上加载hfile文件,解析并入habse数据库;

(1)启动hive并添加相关hbase的jar包,一定要add以下的jar包,否则报HiveHFileOutputFormat错;

add jar /xxx/lib/hive-hbase-handler-2.3.3.jar;
add jar /xxx/lib/hbase-common-1.1.1.jar;
add jar /xxx/lib/hbase-client-1.1.1.jar;
add jar /xxx/lib/hbase-protocol-1.1.1.jar;
add jar /xxx/lib/hbase-server-1.1.1.jar;

(2)创建一个outputformat为HiveHFileOutputFormat的hive表

  • 其中hdfs:127.0.0.1:8888/tmp/tmphbase_table_hfile/cf_0是hfile保存到hdfs的路径,cf_0是hbase 列族名(family)
create table tmp_hive_hbase_table (
id int,
val string)
stored as
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
TBLPROPERTIES ('hfile.family.path' = 'hdfs://127.0.0.1:8888/tmp/tmp_hive_hbase_table/cf_0');

注意:如果hive跟hbase不在同一台主机上,执行完上一步操作,记得执行下面的语句:该语句映射hbase集群,打通hive和hbase的关系

set hbase.zookeeper.quorum=xxx.xxx.xxx.xxx:2181,xxx.xxx.xxx.xxx:2181
  • 把原始数据表的数据通过tmp_hbase_hfile_table表保存为hfile
insert into table tmp_hbase_hfile_table select * from tmp_hive_data;
  • 查看对应hdfs路径是否生成了hfile,可以通过浏览器直接查看,也可以通过hafs命令查看(hadoop fs -ls /tmp/tmp_hive_hbase_table/cf_0):

  •  在hbase中使用hbase shell命令,创建一张表:
create 'tmp_hbase_load_table','cf_0'
  • 下载云hbase客户端,配置hbase-site.xml,并将hdfs-site.xml、core-site.xml拷贝到hbase/conf目录:
wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/alihbase-1.1.4-bin.tar.gz
 vi conf/hbase-site.xml
 <property>
         <name>hbase.zookeeper.quorum</name>
         <value>配置Habse集群的地址</value>
 </property>
  • 执行bulkload导入到hbase表中
bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://127.0.0.1:port/tmp/tmp_hive_hbase_table/  tmp_hbase_load_table
  • 在hbase表tmp_hbase_load_table查看数据是否导入,使用habse的scan tableName查看即可:

三、总结

以上就是最近做的需求实现思路,仅供大家参考,hive和habse直接数据同步有很多种方式,通过kettle、DataX等等工具都可以实现,但是个有利弊吧,希望能够帮助到大家! 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hive与hbase之间数据的同步 的相关文章

随机推荐

  • 如何写一个随机洗牌函数

    看到了很多人写得随机洗牌函数 但是感觉写得都不是太好 自己写了一个试试 基本要求 给定一定范围的数比如最大值最小值 min max 在这个之间进行随机洗牌 首先生成一个按min到最大的max的数组a 对数组进行循环 每次随机生成一个要取的下
  • c++ 中ref 和引用的区别

    c 中 本身可以使用 来实现引用 那为什么还会出现ref 呢 ref int f2 int c c cout lt lt in function c lt lt c lt
  • Java基础 (三):LinkedList(含使用方法详解)

    Java LinkedList 链表 Linked list 是一种常见的基础数据结构 是一种线性表 但是并不会按线性的顺序存储数据 而是在每一个节点里存到下一个节点的地址 链表可分为单向链表和双向链表 一个单向链表包含两个值 当前节点的值
  • 放大倍数超5万倍的Memcached DDoS反射攻击,怎么破?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 作者 腾讯游戏云 背景 Memcached攻击创造DDoS攻击流量纪录 近日 利用Memcached服务器实施反射DDoS攻击的事件呈大幅上升趋势 DDoS攻击流量首次过T 引发业界
  • Java实现对数据库的查操作

    查询数据库得到的结果有很大的可能会得到若干条 因此executeQuery 方法的返回值是一个集合 返回类型由ResultSet接收 数据库的增删改操作 在JDBCUtils工具类中对close方法进行方法重载 public static
  • 【Spark NLP】第 7 章:分类和回归

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 2.VHDL的基本结构和语法(一)

    目录 1 VHDL基本结构 1 1 实体 Entity 类属说明 端口方向 IN OUT INOUT BUFFER 1 2 结构体 Architecture 1 3 库 程序包的调用 1 4 VHDL语句 1 4 1 并行语句 并行信号赋值
  • web项目读取resource目录下的资源

    本地读取资源文件 1 方式 File file new File src main resources properties basecom properties InputStream in new FileInputStream fil
  • 关于ScrollView嵌套多个RecyclerView滑动冲突,可以很流畅的滑动

    首先不建议过多的嵌套 可以采取其他方式替换 当ScrollIView内部只有一个RecyclerView的时候
  • 【HTML】基础常用标签汇总

    目录 前言 最基础的标签 常用标签 文本相关 文本格式化标签 图像标签 超链接 表格 列表 无序列表 有序列表 自定义列表 表单 基本结构 表单域 表单元素控件 前言 总所周知 一个网站 web 分为三部分 1 HTML 结构 2 CSS
  • 2022年最新Vue+electron项目创建

    一 前言 大多数文章都停留在electron vue中 但是这个库不怎么更新了 最近的更新是九月前 看了很多文章都换其他的工具来构建了 这里推荐GITHUB一个大佬写的基于vue cli的插件 构建项目非常简单 插件的GITHUB源代码 话
  • 力扣刷题26. 删除有序数组中的重复项

    采用双指针法 思路如下 class Solution public int removeDuplicates int nums if nums length 0 return 0 int p 0 int q 1 while q
  • 【华为OD机试真题2023B卷 JAVA&JS】选修课

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 选修课 知识点字符串哈希表排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 现有两门选修课 每门选修课都有一部分学生选修 每个学生都有选修课的成绩 需要你找出同时选
  • OCaml学习笔记(二)——Introduction to Objective Camel

    Chapter2 Simple Expressions 2 1 注释语句 OCaml语言中注释部分写在 和 之间 可以相互嵌套 注释部分当作空格处理 2 2 基本表达式 OCaml中每个有效的表达式都有一个类型 某个类型的表达式不能用作其他
  • 使用 Microchip SAM9X60 OTP 存储板卡的MAC地址和序列号

    1 介绍 SAM9X60 处理器有部分OTP One Time Programming Aera 可用于存储user data 这样的话我们就可以将板卡 MAC Address和 SN 序列号写到固定的OTP User Area中 为什么要
  • Python--根据计算公式:BMI = 体重(kg) / 身高(m)^2判断身体状况

    Python 根据计算公式 BMI 体重 kg 身高 m 2判断身体状况 身体质量指数 BMI Body Mass Index 是国际上常用的衡量人体肥胖程度和是否健康的重要标准 主要用于统计分析 肥胖程度的判断不能采用体重的绝对值 它天然
  • ajax将响应结果显示到iframe,JavaScript:iframe / Ajax / JSON

    iframe 在Ajax流行之前大量使用 iframe中的src属性指定的就是一个独立的页面url地址 iframe中呈现的就是这个页面的内容 通过改变src的值 我们就可以轻松的改变iframe中的内容 类似的 刷新验证码也是同样的手段
  • 嵌入式Linux移植5. LED驱动移植 添加LED驱动到内核,测试程序成功运行

    第一次尝试开发移植Linux上的驱动 还是和当年单片机一样 从最简单的LED小灯开始 走走流程 试验结果 LED驱动已经编译进系统 产生 o文件 LED测试程序已经编译成功 产生可执行文件 但是由于疫情手头没板子 没法上板测试 开学之后测试
  • 电脑安装 MIUI+

    windows电脑 打开命令框 输入下面命令 winget install Xiaomi MIUI 如果是小米笔记本 还可以通过 小米帮助中心 小米商城 mi com 进行下载安装
  • hive与hbase之间数据的同步

    一 前言 数据同步是很多公司在做数据迁移时的一个痛点 当然互联网公司有自己的同步机制或者工具 但是困惑了我这几天的需求 还是没有得到解决 事已至此 来写这篇博客记录一下自己最近的研究成果 二 如何同步 hive如何与Hbase直接实现数据同