HBase与Hive数据交互

news2024/11/24 20:36:02

一、hbase数据导入hive

hive通过建立外部表和普通表加载hbase表数据到hive表中。
两种方式加载hbase中的表到hive中,一是hive创建外部表关联hbase表数据,是hive创建普通表将hbase的数据加载到本地。

1.创建外部表

hbase中创建test表,且插入两条数据,内容如下

put 'test','001','info:name','tom'
put 'test','001','info:age',18
put 'test','002','info:name','jerry'
put 'test','002','info:age',19
hbase(main):012:0* scan 'test'
ROW                                 COLUMN+CELL    
001                                 column=info:age, timestamp=1526563694645, value=18    
001                                 column=info:name, timestamp=1526563629119, value=tom
002                                 column=info:age, timestamp=1526563723288, value=19                     
002                                 column=info:name, timestamp=1526563706773, value=jerry                                              
2 row(s) in 0.4320 seconds

接下来创建一个hive的外部表

CREATE EXTERNAL TABLE test_external (key int, name string,age int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age") 
TBLPROPERTIES ("hbase.table.name" = "test");

注:EXTERNAL 关键字指定创建一个外部表

进入hive shell,执行上面的建表语句

hive> CREATE EXTERNAL TABLE test_external (key int, name string,age int)
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
    > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age") 
    > TBLPROPERTIES ("hbase.table.name" = "test");
OK
Time taken: 0.331 seconds

hive可以使用类sql语句执行查询命令

hive> select * from test_external;
OK
1       tom     18
2       jerry   19
Time taken: 0.313 seconds, Fetched: 2 row(s)

2. 创建普通表

hive外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。接下来创建普通表(内部表),并将hbase表数据加载到内部表中。

hive> create table test (key string, name string,age string) 
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
    > STORED AS TEXTFILE;
OK
Time taken: 0.154 seconds

执行sql命令

INSERT OVERWRITE TABLE test SELECT * FROM test_external

通过外部表将hbase中的表数据加载到hive本地表

hive> INSERT OVERWRITE TABLE test SELECT * FROM test_external;
Query ID = hadoop20240410102929_b52c1820-7d93-4baf-a410-8604bfd0e43b
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1525962191655_0030, Tracking URL = http://SHQZ-PS-IOT-TEST-WEB01:8088/proxy/application_1525962191655_0030/
Kill Command = /opt/cloudera/parcels/CDH-5.8.4-1.cdh5.8.4.p0.5/lib/hadoop/bin/hadoop job  -kill job_1525962191655_0030
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2024-04-10 10:30:18,571 Stage-1 map = 0%,  reduce = 0%
2024-04-10 10:30:31,505 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 4.68 sec
MapReduce Total cumulative CPU time: 4 seconds 680 msec
Ended Job = job_1525962191655_0030
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to: hdfs://nameservice1/user/hive/warehouse/test/.hive-staging_hive_2024-04-10_10-29-59_285_1972684120193290878-1/-ext-10000
Loading data to table default.test
Table default.test stats: [numFiles=1, numRows=2, totalSize=20, rawDataSize=18]
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1   Cumulative CPU: 4.68 sec   HDFS Read: 3811 HDFS Write: 88 SUCCESS
Total MapReduce CPU Time Spent: 4 seconds 680 msec
OK
Time taken: 34.13 seconds

加载hbase表数据到hive内部表中,是通过启动一个mapreduce任务来进行的;另外hive的sql基本上都是转换成mapreduce任务来执行。

hive> select * from test;
OK
1       tom     18
2       jerry   19
Time taken: 0.194 seconds, Fetched: 2 row(s)

3.使用DataX将HBase数据导入Hive

需要创建一个DataX作业,并配置相应的源(HBase)和目标(Hive)。涉及到指定 HBase 的表结构、Hive 的表结构以及数据转换逻辑。

{
    "job": {
        "setting": {
            "speed": {
                "channel": 1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "hbase191reader",
                    "parameter": {
                        "hbaseConfig": {
                            "hbase.zookeeper.quorum": "your_zookeeper_quorum",
                            "hbase.zookeeper.property.clientPort": "2181",
                            "zookeeper.znode.parent": "/hbase"
                        },
                        "table": "your_hbase_table",
                        "encoding": "UTF-8",
                        "column": [
                            {
                                "name": "rowkey",
                                "type": "string"
                            },
                            {
                                "name": "column1",
                                "type": "string"
                            },
                            // ... 定义其他列
                        ],
                        "range": {
                            "startRow": "",
                            "endRow": ""
                        }
                    }
                },
                "writer": {
                    "name": "hive",
                    "parameter": {
                        "defaultFS": "hdfs://your_namenode:8020",
                        "fileType": "orc",
                        "path": "/user/hive/warehouse/your_hive_table",
                        "column": [
                            {
                                "name": "rowkey",
                                "type": "string"
                            },
                            {
                                "name": "column1",
                                "type": "string"
                            },
                            // ... 定义其他列
                        ],
                        "writeMode": "append",
                        "fieldDelimiter": "\t",
                        "compress": "zip"
                    }
                }
            }
        ]
    }
}

二、Hive数据导入HBase

通过外部表的方式,首先在hbase中要先存在一张表:namespace(命名空间)是test,表名是gdp,有三个列,c1,c2,c3

9549471157)

去hive中创建对应的映射表

在这里插入图片描述

其中t_gdp是原始数据表,tmp_gdp_table是和hbase中gdp表关联的外部表,将t_gdp表中的数据insert到了tmp_gdp_table表中,正常的业务中,可能是查询了多个表,通过sql处理将数据存到tmp_gdp_table中,然后通过外部表映射的方式同步到habse的gdp表中。

hive中创建外部关联表的命令:

CREATE EXTERNAL TABLE tmp_gdp_table(key varchar(100), province varchar(100),city varchar(100),gdp double) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,c1:province,c2:city,c3:gdp") 
TBLPROPERTIES ("hbase.table.name" = "test:gdp", "hbase.mapred.output.outputtable" = "test:gdp");

创建好关联表之后,将t_gdp中的数据insert到tmp_gdp_table表中:

insert into tmp_gdp_table (select f_year,f_province,f_city,f_gdp from t_gdp);

在实际的业务开发中一般是通过定时任务执行脚本的方式来执行上面的sql,脚本命令如下:

#!/bin/bash

hive -e 'insert into tmp_gdp_table (select f_year,f_province,f_city,f_gdp from t_gdp);'

通过执行脚本,在实际业务开发中就可以通过linux里的crontab或者公司的调度平台来执行

原始数据表t_gdp中的数据:

在这里插入图片描述

hive中的关联表tmp_gdp_table中的数据:

在这里插入图片描述

hbase中的表test:gdp中的数据:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stylelint 配置

1.vscode 安装插件Stylelint 2.项目安装插件 pnpm i stylelint stylelint-config-standard stylelint-config-recommended-scss stylelint-config-recommended-vue postcss postcss-html postcss-scss stylelint-config-recess-order stylelint-config-html -D 依赖 说明 备…

python笔记----少儿编程课程

第1课: 认识新朋友-python 知识点: 1、在英文状态下编写Python语句。 2、内置函数print()将结果输出到标准的控制台上,它的基本语法格式如下: print("即将输出的内容") #输出的内容要用引号引起来,可…

一加Ace3 刷机救砖简化说明

注意:工具使用英文目录,支持救砖和降级。PJE110国行版,CPH2609国际版。目前国行版不能完美转换国际版,每次升级都需要刷oplusstanvbk,不建议使用。跨国转换或ROOT一定先解锁Bootloader,可以使用“一加全能工…

重温react-10(函数组件和类组件的ref获取方式)

App.js的代码 06是函数组件 07是类组件 import React, { useEffect, useRef } from react; import LearnFunction06 from ./LearnFunction06; // 函数组件和类组件的ref使用方式 import LearnFunction07 from ./LearnFunction07; // 函数组件和类组件的ref使用方式 export de…

Vite: 插件开发

概述 说到自定义的能力,肯定很容易想到 插件机制 ,利用一个个插件来扩展构建工具自身的能力虽然 Vite 的插件机制是基于 Rollup 来设计的,但实际上 Vite 的插件机制也包含了自己独有的一部分,与Rollup 的各个插件 Hook 并非完全兼…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第50课-姿式识别控制机器人

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第50课-姿式识别控制机器人 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

白话EAGLE2:解锁大模型的“打草稿”技术

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

七天速通javaSE:第五天 数组基础

文章目录 前言一、认识数组二、数组的声明和创建1. 声明数组变量2. 创建数组3. 变量的初始化(赋值)3.1 静态初始化3.2 动态初始化 3. 示例 三、数组的使用1. 循环1.1 普通for循环1.2 For-Each 循环 2. 数组作为函数的参数和返回值 前言 本文将为大家介绍…

vue+fineReport 使用前端搜索+报表显示数据

--fineReprot 将需要搜索的参数添加到模版参数 sql: --前端传递参数 注:因为每次点击搜索的结果需要不一样,还要传递一个时间戳的参数: let timesamp new Date().getTime()

【模板】项目建设方案(Word原件)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…

ICMAN触摸芯片之滑轮滑条演示

ICMAN触摸芯片之滑轮滑条演示 ICMAN触摸芯片实现的滑轮滑条方案—— 按键处理逻辑快速,物理结构定位,定位精准,实现简单, 属于按键滑轮滑条,由硬件实现的专用触摸芯片通过滑轮滑条结构设计来实现。 常见的硬件应用&a…

不使用canvs也能创建出点状背景

div{ height: 100%; touch-action: none; background: radial-gradient(circle, #e6e6e6 1px, transparent 1px); /* 创建一个点状背景 */ background-size: 15px 15px; /* 控制点的大小和间距 */ padding: 20px; /* 添加内边距使内容不靠边 */ position: relative; /* 让内部内…

DigiRL:让 AI 自己学会控制手机

类似于苹果此前发布的Ferret-UI 的安卓开源平替。主要用于在 Android 设备上识别 UI 和执行指令,不同的是它利用了离线到在线强化学习(Offline-to-Online RL),能够快速适应应用更新或 UI 变化。

EDA 虚拟机 Synopsys Sentaurus TCAD 2018.06-SP2 CentOS7.9

下载地址(制作不易,下载使用需付费,不能接受的请勿下载): 链接:https://pan.baidu.com/s/1358rH_Ner1TYdc_TgoXrew?pwdyq3p 提取码:yq3p

Meet AI4S 直播预告丨房价分析新思路:神经网络直击复杂地理环境中的空间异质性

近年来,房地产市场起起落落,房价已经成为了扰动居民幸福感的重要影响因素。大多数家庭都需要面对「买不买房、何时买房、在哪儿买房、买什么房」的艰难抉择,每一个问题的答案都在某种程度上与房价的波动息息相关。 近年来,我国各…

2023年第十四届蓝桥杯JavaB组省赛真题及全部解析(上)

目录 前言: 一、试题 A:阶乘求和(填空) 二、试题 B:幸运数字(填空) 三、试题 C:数组分割 四、试题 D:矩阵总面积 五、试题 E:蜗牛 六、试题 F&#xff…

ConcurrentLinkedQueue详解(详细图文+动画演示)

目录 ConcurrentLinkedQueue详解1、ConcurrentLinkedQueue简介2、ConcurrentLinkedQueue继承体系3、ConcurrentLinkedQueue的构造函数4、ConcurrentLinkedQueue的数据结构ConcurrentLinkedQueue类的属性注释ConcurrentLinkedQueue真正存储元素的类Node<E>ConcurrentLinke…

element ui 的 el-date-picker 日期选择组件设置可选日期范围

有时候&#xff0c;在使用日历控件的时候&#xff0c;我们需要进行定制&#xff0c;控制用户只能在指定日期范围内进行日期选择&#xff0c;在这里&#xff0c;我使用了 element ui 的 el-date-picker 日期选择控件&#xff0c;控制只能选择当前月及往前的2个月&#xff0c;效果…