建立hive和hbase的映射关系,通过spark将hive表中数据导入clickhouse(代码片段)

Mr.zhou_Zxy Mr.zhou_Zxy     2022-12-15     359

关键词:

HBase+Hive+Spark+ClickHouse

在HBase中建表,通过Hive与HBase建立映射关系,实现双方新增数据后彼此都可以查询到。

通过spark将Hive中的数据读取到并经过处理保存到ClickHouse中

一 Hbase

1 Hbase表操作

1.1 创建命名空间

hbase(main):008:0> create_namespace 'zxy','hbasename'=>'hadoop'
0 row(s) in 0.0420 seconds

1.2 创建列簇

hbase(main):012:0> create 'zxy:t1',NAME=>'f1',VERSIONS=>5
0 row(s) in 2.4850 seconds


hbase(main):014:0> list 'zxy:.*'
TABLE
zxy:t1
1 row(s) in 0.0200 seconds

=> ["zxy:t1"]
hbase(main):015:0> describe 'zxy:t1'
Table zxy:t1 is ENABLED
zxy:t1
COLUMN FAMILIES DESCRIPTION
NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '5', IN_MEMORY => 'false', KEEP_DELETED_C
ELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', M
IN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'

1.3 按行导入数据

hbase(main):016:0> put 'zxy:t1','r1','f1:name','zxy'
0 row(s) in 0.1080 seconds
hbase(main):028:0> append 'zxy:t1','r1','f1:id','001'
0 row(s) in 0.0400 seconds

hbase(main):029:0> scan 'zxy:t1'
ROW                     COLUMN+CELL
 r1                     column=f1:id, timestamp=1627714724257, value=001
 r1                     column=f1:name, timestamp=1627714469210, value=zxy
1 row(s) in 0.0120 seconds

hbase(main):030:0> append 'zxy:t1','r2','f1:id','002'
0 row(s) in 0.0060 seconds

hbase(main):031:0> append 'zxy:t1','r2','f1:name','bx'
0 row(s) in 0.0080 seconds

hbase(main):032:0> append 'zxy:t1','r3','f1:id','003'
0 row(s) in 0.0040 seconds

hbase(main):033:0> append 'zxy:t1','r3','f1:name','zhg'
0 row(s) in 0.0040 seconds

hbase(main):034:0> scan 'zxy:t1'
ROW                     COLUMN+CELL
 r1                     column=f1:id, timestamp=1627714724257, value=001
 r1                     column=f1:name, timestamp=1627714469210, value=zxy
 r2                     column=f1:id, timestamp=1627714739647, value=002
 r2                     column=f1:name, timestamp=1627714754108, value=bx
 r3                     column=f1:id, timestamp=1627714768018, value=003
 r3                     column=f1:name, timestamp=1627714778121, value=zhg
3 row(s) in 0.0190 seconds

二 Hive

1 建立Hbase关联表

hive (zxy)> create external table if not exists t1(
          > uid string,
          > id int,
          > name string
          > )
          > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
          > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:id,f1:name")
          > TBLPROPERTIES ("hbase.table.name" = "zxy:t1");
OK
Time taken: 0.306 seconds
hive (zxy)> select * from t1
          > ;
OK
r1      1       zxy
r2      2       bx
r3      3       zhg
Time taken: 0.438 seconds, Fetched: 3 row(s)

2 Hbase添加数据

  • hbase添加数据

hbase(main):002:0> append 'zxy:t1','r4','f1:id','004'
0 row(s) in 0.1120 seconds

hbase(main):003:0> append 'zxy:t1','r4','f1:name','hyy'
0 row(s) in 0.0220 seconds

hbase(main):004:0> scan 'zxy:t1'
ROW                                      COLUMN+CELL
 r1                                      column=f1:id, timestamp=1627714724257, value=001
 r1                                      column=f1:name, timestamp=1627714469210, value=zxy
 r2                                      column=f1:id, timestamp=1627714739647, value=002
 r2                                      column=f1:name, timestamp=1627714754108, value=bx
 r3                                      column=f1:id, timestamp=1627714768018, value=003
 r3                                      column=f1:name, timestamp=1627714778121, value=zhg
 r4                                      column=f1:id, timestamp=1627716660482, value=004
 r4                                      column=f1:name, timestamp=1627716670546, value=hyy
  • hive更新到数据
hive (zxy)> select * from t1;
OK
r1      1       zxy
r2      2       bx
r3      3       zhg
r4      4       hyy

3 Hive添加数据

hive添加数据不能直接通过load添加数据,所以这里选择使用中间表来导入数据

  • user.txt
r5 5 tzk
r6 6 fyj
  • 创建中间表
hive (zxy)> create table if not exists t2 (uid string,id int,name string) row format delimited fields terminated by ' '
          > ;
OK
Time taken: 0.283 seconds
  • 导入数据
hive (zxy)> load data local inpath '/data/data/user.txt' into table t2;
Loading data to table zxy.t2
Table zxy.t2 stats: [numFiles=1, totalSize=18]
OK
  • 查询导入中间表数据
hive (zxy)> insert into table t1 select * from t2;
Query ID = root_20210731154037_e8019cc0-38bb-42fc-9674-a9de2be9dba6
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1627713883513_0001, Tracking URL = http://hadoop:8088/proxy/application_1627713883513_0001/
Kill Command = /data/apps/hadoop-2.8.1/bin/hadoop job  -kill job_1627713883513_0001
Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 0
2021-07-31 15:41:23,373 Stage-0 map = 0%,  reduce = 0%
2021-07-31 15:41:34,585 Stage-0 map = 100%,  reduce = 0%, Cumulative CPU 3.45 sec
MapReduce Total cumulative CPU time: 3 seconds 450 msec
Ended Job = job_1627713883513_0001
MapReduce Jobs Launched:
Stage-Stage-0: Map: 1   Cumulative CPU: 3.45 sec   HDFS Read: 3659 HDFS Write: 0 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 450 msec
OK
Time taken: 60.406 seconds

  • Hive端查询数据
hive (zxy)> select * from t1;
OK
r1      1       zxy
r2      2       bx
r3      3       zhg
r4      4       hyy
r5      5       tzk
r6      6       fyj
Time taken: 0.335 seconds, Fetched: 6 row(s)
hive (zxy)>
  • Hbase端查询到数据
hbase(main):001:0> scan 'zxy:t1'
ROW                                      COLUMN+CELL
 r1                                      column=f1:id, timestamp=1627714724257, value=001
 r1                                      column=f1:name, timestamp=1627714469210, value=zxy
 r2                                      column=f1:id, timestamp=1627714739647, value=002
 r2                                      column=f1:name, timestamp=1627714754108, value=bx
 r3                                      column=f1:id, timestamp=1627714768018, value=003
 r3                                      column=f1:name, timestamp=1627714778121, value=zhg
 r4                                      column=f1:id, timestamp=1627716660482, value=004
 r4                                      column=f1:name, timestamp=1627716670546, value=hyy
 r5                                      column=f1:id, timestamp=1627717294053, value=5
 r5                                      column=f1:name, timestamp=1627717294053, value=tzk
 r6                                      column=f1:id, timestamp=1627717294053, value=6
 r6                                      column=f1:name, timestamp=1627717294053, value=fyj
6 row(s) in 0.4660 seconds

三 Hive2ClickHouse

完整项目连接

1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zxy</groupId>
    <artifactId>hive2ch</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <scala.version>2.11.12</scala.version>
        <play-json.version>2.3.9</play-json.version>
        <maven-scala-plugin.version>2.10.1</maven-scala-plugin.version>
        <scala-maven-plugin.version>3.2.0</scala-maven-plugin.version>
        <maven-assembly-plugin.version>2.6</maven-assembly-plugin.version>
        <spark.version>2.4.5</spark.version>
        <scope.type>compile</scope.type>
        <json.version>1.2.3</json.version>
        <!--compile provided-->
    </properties>

    <dependencies>

        <!--json 包-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>$json.version</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>$spark.version</version>
            <scope>$scope.type</scope>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>15.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>$spark.version</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.11</artifactId>
            <version>$spark.version</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.6</version>
        </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>$scala.version</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>$scala.version</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>com.github.scopt</groupId>
            <artifactId>scopt_2.11</artifactId>
            <version>4.0.0-RC2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hudi</groupId>
            <artifactId>hudi-spark-bundle_2.11</artifactId>
            <version>0.5.2-incubating</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-avro_2.11</artifactId>
            <version>$spark.version</version>
        </dependency>

        <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.7.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.11</artifactId>
            <version>$spark.version</version>
            <scope>$scope.type</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.2.1</version>
            <scope>$scope.type</scope>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.eclipse.jetty.aggregate</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>ru.yandex.clickhouse</groupId>
            <artifactId>clickhouse-jdbc</artifactId>
            <version>0.2.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-hbase-handler</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.2.0</version>
        </dependency>

    </dependencies>

    <repositories>

        <repository>
            <id>alimaven</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <updatePolicy>never</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginshive和hbase有啥关系和区别

...构在hadoop之上的。都是用hadoop作为底层存储区别:2.Hive是建立在Hadoop之上为了减少MapReducejobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目。3.想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,... 查看详情

hadoop,hive,spark之间是啥关系

...基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开... 查看详情

spark:spark-sql读hbase

...nbsp;  SparkSQL是指整合了Hive的spark-sqlcli,本质上就是通过Hive访问HBase表,具体就是通过hive-hbase-handler,具体配置参见:Hive(五):hive与hbase整合 目录:SparkSql访问hbase配置测试验证SparkSql访问hbase配置: 拷贝HBase的相关jar包... 查看详情

hive与hbase的区别与联系

...基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能。Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。hive需要用到hdfs存储文件,需要用到MapReduce计... 查看详情

hadoophdfshivehbase之间的关系

...基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能。Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。hive需要用到hdfs存储文件,需要用到MapReduce计... 查看详情

hive与hbase的区别

...构建在Hadoop平台上的数据仓库,可以将结构化的数据文件映射为一张数据库表。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化成Map/Reduce。HBase是基于HDFS平台的Key/Value类型的NoSql数据库... 查看详情

spark访问与hbase关联的hive表

知识点1:创建关联Hbase的Hive表知识点2:Spark访问Hive知识点3:Spark访问与Hbase关联的Hive表 知识点1:创建关联Hbase的Hive表两种方式创建,内部表和外部表内部表,如果删除hive表,hbase表也会删除;不建议使用这种方式,大多数... 查看详情

hbase可以访问hive里面的表吗

参考技术A使用hive-hbase-handler,通过在Hive中建立外部表可以映射到HBase中的表,然后在Hive中往外部表中INSERT数据,即可完成对HBase表的数据插入。你可以搜索"lxw的大数据田地"查看Hive与HBase整合的相关文章。 查看详情

怎样删除hive和hbase映射表

参考技术A虚拟机的速度本身就非常慢,还有就是hive的用法也很重要,不是随便写写就可以的,同样一种查询方法,写法不一样算法和时间也都会不同本回答被提问者采纳 查看详情

todo转载全栈工程师-hadoop,hbase,hive,spark

...关的他们却都是基于相同的hdfs存储和yarn资源管理,本文通过全套部署方法来让大家 查看详情

hadoop基础之《—整合hbase+phoenix+hive》

...的,并且一定是有序的)。(2)之后对于映射的解释如下:该映射由行键、列键和时间戳索引;映射中的每个值都是一个未解释的字节数组。(3)最终HBase关于数据模型和BigTable的对应关系如下ÿ... 查看详情

HiveContext - 无法访问在 hive 中映射为外部表的 hbase 表

】HiveContext-无法访问在hive中映射为外部表的hbase表【英文标题】:HiveContext-unabletoaccesshbasetablemappedinhiveasexternaltable【发布时间】:2017-06-2211:26:22【问题描述】:我正在尝试使用Spark中的HiveContext访问在hive中映射的hbase表。但我得... 查看详情

hive和hbase的区别

...个key由row-key,列簇、列和时间戳。在Hbase中,行是key/value映射的集合,这个映射通过row-key来唯一标识。Hbase利用Hadoop的基础设施,可以利用通用的设备进行水平的扩展。2. 两者的特点  Hive帮助熟悉SQL的人运行MapReduce任... 查看详情

hbase和hive的差别是啥,各自适用在啥场景中

...完全依赖HDFS和MapReduce。这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。而HBase表是物理表,适合存放非结构化的数据。2.Hive是基于MapReduce来处理数... 查看详情

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

...引机制。(表数据大概在4--30E之间)虽然网上有很多直接建立hive表,自动创建hbase表的例子,但是这种情况不能进行hbase表的region预分区,导致热点问题比较严重。所以hive和hbase表要分开建立再关联起来。1.建立hbase表create‘xxxxx‘,NAM... 查看详情

hive与hbase区别

...)当中的部分数据,大多数用户倾向于依赖传统的RDBMS(关系型数据)来处理这些数据集。HBase查询采用自定义语言,需要经过培训才能学习。HBase并不完全符合ACID,尽管它确实支持某些属性。HBase可以通过协同处理来处理小数据... 查看详情

大数据学习系列之七-----hadoop+spark+zookeeper+hbase+hive集

引言在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive环境以及一些测试。其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式。至于为什么先写单机的搭建,是因为作为个人学习的话,... 查看详情

hive与hbase关系整合

近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享,共同掌握!本篇文章在具体介绍Hive与Hbase整合之前,先给大家用一个流程图介... 查看详情