精华内容
下载资源
问答
  • hive集成管理Hbase表

    2017-05-24 15:39:49
    hive中插入数据,插入的数据会同步更新到hbase对应的表中。  3. hbase对应的列簇值变更,也会在Hive中对应的表中变更。  4. 实现了多列,多列簇的转化:(示例:hive中3列对应hbase中2列簇) ++++++++

    本文借鉴了他人博客,但此文看了更加简明明了

    本文主要实现一下目标:
       1. 在hive中创建的表能直接创建保存到hbase中。
       2. hive中的表插入数据,插入的数据会同步更新到hbase对应的表中。
       3. hbase对应的列簇值变更,也会在Hive中对应的表中变更。
       4. 实现了多列,多列簇的转化:(示例:hive中3列对应hbase中2列簇)

    +++++++++++++++++++++++++++++++++++++++
    注意:在hive下删除管理表,hbase下关联表也会被删除:

    1.注意:创建内部表(管理表)时,不用先去hbase下创建关联表,hive下创建好后,hbase下会自动生成关联表:
    create table hbase_table_1(key int, value string)
    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    with serdeproperties ("hbase.columns.mapping"=":key,cf1:val")
    tblproperties ("hbase.table.name"='xyz');

    去habse下查看是否生成了关联表:xyz
    hbase(main):035:0> desc 'xyz'
    Table xyz is ENABLED                                                                                                                  
    xyz                                                                                                                                   
    COLUMN FAMILIES DESCRIPTION                                                                                                           
    {NAME => 'cf1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE',
     MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true
    '}                                                                                                                                    
    1 row(s) in 0.0130 seconds

    2.然后从hive里面创建好的数据源表data_in里面导数据到 上面的关联表中去:
    (这是一个MR程序:)
    insert overwrite table test01.hbase_table_1 select * from test01.data_in;

    去hbase下看数据是否导入进去了:
    hbase(main):036:0> scan 'xyz'
    ROW                                COLUMN+CELL                                                                                        
     1                                 column=cf1:val, timestamp=1495595889276, value=val_1                                               
     2                                 column=cf1:val, timestamp=1495595889276, value=val_2                                               
     3                                 column=cf1:val, timestamp=1495595889276, value=val_3                                               
    3 row(s) in 0.0150 seconds

    3.反之,在hbase下put数据,看hive 下是否数据同步:
    hbase(main):057:0> put 'xyz','4','cf1:val','val_4'
    hbase(main):058:0> put 'xyz','55','cf1:age','24'
    hbase(main):059:0> put 'xyz','66','cf1:name','zhangsan'

    hbase(main):060:0> scan 'xyz'
    ROW                                COLUMN+CELL                                                                                        
     1                                 column=cf1:val, timestamp=1495596813061, value=val_1                                               
     2                                 column=cf1:val, timestamp=1495596813061, value=val_2                                               
     3                                 column=cf1:val, timestamp=1495596813061, value=val_3                                               
     4                                 column=cf1:val, timestamp=1495596878735, value=val_4                                               
     55                                column=cf1:age, timestamp=1495596890741, value=24                                                  
     66                                column=cf1:name, timestamp=1495596904166, value=zhangsan    

    注意:hbase下put数据时,格式必须要跟hive下建表语句的格式一致,要不然传不进去:
    hive (test01)> select * from hbase_table_1;
    OK
    1 val_1
    2 val_2
    3 val_3
    4 val_4

    3.删除hive下的关联表hbase_table_1,hbase下关联表xyz也随之被删除掉
    hive (test01)> drop table hbase_table_1;
    OK
    Time taken: 3.803 seconds

    hbase下scan关联表:xyz,发现已经被删除       
    hbase(main):055:0> scan 'xyz'
    ROW                                COLUMN+CELL                                                                           
    ERROR: Unknown table xyz!

    =========================================================
    注意:hive下删除外部表,Hbase里面关联表不会被删除!

    1.先在hbase里面建关联表
    hbase(main):001:0> create 'hive_to_hbase','up'

    2.在hive里面 创建hbase识别的表:
    CREATE EXTERNAL  TABLE if not exists test01.hbase_v1_hive( key string, value  string )
    STORED BY ' org.apache.hadoop.hive.hbase.HBaseStorageHandler ' 
    WITH SERDEPROPERTIES("hbase.columns.mapping" = " :key,up:val ")
    TBLPROPERTIES("hbase.table.name"="hive_to_hbase");

    3.在hive中建一个数据源表(名字随便取)
    create table test01.data_in(
    id int,
    bar string
    ) row format delimited fields terminated by '\t' 
    lines terminated by '\n' stored as textfile;

    4.将数据倒到数据源表中去:
    [root@10-122-129-28 johnmay]# more 11.txt 
    1 val_1
    2 val_2
    3 val_3
    load data local inpath '/root/johnmay/11.txt'overwrite into table test01.data_in

    5.从data_in中导入数据到hbase_v1_hive中
    insert overwrite table test01.hbase_v1_hive select * from data_in;


    6.去hbase下scan关联表,看数据是否同步:
    hbase(main):020:0> scan 'hive_to_hbase'
    ROW                                COLUMN+CELL                                                                                        
     1                                 column=up:val, timestamp=1495453854071, value=val_1                                                
    1 row(s) in 0.0090 seconds
    由此可见数据已经同步了;

    7.hbase下put数据:
    put 'hive_to_hbase','key','up:val','1234'
    put 'hive_to_hbase','name','up:val','zhangsan'
    查看是否上传成功:
    hbase(main):004:0>  scan 'hive_to_hbase'
    ROW                     COLUMN+CELL                                                     
     1             column=up:val, timestamp=1495453854071, value=val_1             
     key         column=up:val, timestamp=1495454199731, value=1234              
     name      column=up:val, timestamp=1495454201497, value=zhangsan          
    3 row(s) in 0.0640 seconds
    hive表下看数据是否同步:
    hive (test01)> select * from hbase_v1_hive;
    OK
    1            val_1
    key 1234
    name      zhangsan
    Time taken: 0.096 seconds, Fetched: 3 row(s)
    刚刚在hbase中插入的数据,已经在hive里同步了.

    ================================
    建议:创建hvie,hbase关联表时,多建外部表(external)!

    多列和多列族(Multiple Columns and Families)

    1. hbase下先建关联表:
    hbase(main):014:0> create 'user','info', 'info1'

    2. hive下建关联表
    create external table hbase_user(id int, name string, age int)
    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    with serdeproperties ("hbase.columns.mapping"=":key,info:name,info1:age")
    tblproperties ("hbase.table.name"="user");

    3. 从建好的数据源表中导入数据到关联表:hbase_user
    两条命令的区别就不多说:
    insert overwrite table test01.hbase_user select * from data_in ;
    insert into table test01.hbase_user select * from data_in ;

    4. hive下查看数据:
    hive>  select * from hbase_user;
    OK
    1 val_1 23
    2 val_2 36
    3 val_3 22
    4 val_4 26
    Time taken: 0.102 seconds, Fetched: 4 row(s)

    hbase下查看数据:
    hbase(main):025:0> scan 'user'
    ROW                                COLUMN+CELL                                                                                        
     1                                 column=info:name, timestamp=1495610825243, value=val_1                                             
     1                                 column=info1:age, timestamp=1495610825243, value=23                                                
     2                                 column=info:name, timestamp=1495610825243, value=val_2                                             
     2                                 column=info1:age, timestamp=1495610825243, value=36                                                
     3                                 column=info:name, timestamp=1495610825243, value=val_3                                             
     3                                 column=info1:age, timestamp=1495610825243, value=22                                                
     4                                 column=info:name, timestamp=1495610825243, value=val_4                                             
     4                                 column=info1:age, timestamp=1495610825243, value=26                                                
    4 row(s) in 0.0190 seconds

    5. 查看hbase表结构,hive表结构
    hive> desc hbase_user;
    OK
    id                     int                  from deserializer   
    name               string              from deserializer   
    age                  int                  from deserializer
      
    Time taken: 0.331 seconds, Fetched: 3 row(s)

    hbase(main):026:0> desc 'user'
    Table user is ENABLED                                                                                                                 
    user                                                                                                                                  
    COLUMN FAMILIES DESCRIPTION                                                                                                           
    {NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE'
    , MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'tru
    e'}                                                                                                                                   
    {NAME => 'info1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE
    ', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'tr
    ue'}                                                                                                                                  
    2 row(s) in 0.0160 seconds

    这里实现了3个hive列(id, name, age) 对应两个hbase列簇( info, info1 )的应用



    展开全文
  • 1008-Hive访问HBase表数据

    千次阅读 2015-11-25 11:36:10
    Hive访问HBase表数据
    1.  Hive整合HBase原理
    Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠Hive安装包lib/hive-hbase-handler-0.13.0.jar工具类,它负责Hbase和Hive进行通信的。
    Hive和HBase通信原理如下图:

    2.  Hive的安装
    假设这里已经完成hive的安装,下面需要考虑相关的jar包
    (1)考虑jar包
    #删除$HIVA_HOME/lib目录下的的Zookeeper的jar包
    rm -rf $HIVE_HOME/lib/zookeeper*

    #拷贝生产环境下的Zookeeper的jar包到$HIVA_HOME/lib目录下
    cp $ZOOKEEPER_HOME/zookeeper-3.4.6.jar $HIVA_HOME/lib

    3、创建HBase表,将数据添加到HBase表中
    4、创建HBase表映射的Hive表
    5、在Hive下访问Hbase的表

    (1) 编写Mapreduce,读取每行数据然后保存HBase
    (2) 让Hive操作HBase表的数据
    (3) Hive统计分析HBase表的数据,分析用户访客行为

    3、查看hbase中的数据
    3.1 全表查看
    scan 'UserVisitInfo'
    3.2 根据rowkey查看
    hbase(main):012:0> get 'UserVisitInfo','20150706_3037487029517069460000'
    COLUMN                          CELL                                                                                    
     info:FirstAccessUrl            timestamp=1443000064923, value=/m/subject/100000000000009_0.html                        
     info:browser                   timestamp=1443000064923, value=Safari                                                   
     info:browserVersion            timestamp=1443000064923, value=533.1                                                    
     info:firstAccessTime           timestamp=1443000064923, value=20150706000104                                           
     info:operateSystem             timestamp=1443000064923, value=linux                                                    
     info:recentAccessTime          timestamp=1443000065001, value=20150706030107                                           
     info:recentAccessUrl           timestamp=1443000065001, value=/m/                                                      
     info:screenColor               timestamp=1443000064923, value=24                                                       
     info:screenSize                timestamp=1443000064923, value=480x854                                                  
     info:siteType                  timestamp=1443000064923, value=0                                                        
     info:userFlag                  timestamp=1443000064923, value=3037487029517069460000                                   
     info:userProvince              timestamp=1443000064923, value=999                                                      
     info:userVisitId               timestamp=1443000064923, value=20150706_3037487029517069460000                          
     info:visitCount                timestamp=1443000065001, value=2                                                        
     info:visitDay                  timestamp=1443000064923, value=20150706                                                 
     info:visitFlag                 timestamp=1443000064923, value=3037487029517069460000                                   
     info:visitHour                 timestamp=1443000064923, value=0                                                        
     info:visitIp                   timestamp=1443000064923, value=10.139.198.176                                           
     info:visitKeepTime             timestamp=1443000065001, value=10803      
             
     
     4、统计hive分析hbase表的数据
     4.1 创建HBase表,将数据添加到HBase表中
     UserVisitInfo
     4.2 创建HBase表映射的Hive表
     (1) 创建表
    CREATE external TABLE User_Visit_Info
    (
     userVisitId string,  
     FirstAccessUrl string,
     browserVersion string,                                                  
     firstAccessTime string ,                                           
     operateSystem string,      
     recentAccessTime string,                                          
     recentAccessUrl string,                                                   
     screenColor string,                                                   
     screenSize string,                                                 
     siteType string,    
     userFlag string,                                  
     userProvince string,                                              
     visitCount string,                                                     
     visitDay string,                                               
     visitFlag string,                                  
     visitHour string, 
     visitIp string,                                          
     visitKeepTime string
    )
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,
    info:FirstAccessUrl,info:browserVersion,info:firstAccessTime,info:operateSystem,
    info:recentAccessTime,info:recentAccessUrl,info:screenColor,info:screenSize,info:siteType,
    info:userFlag,info:userProvince,info:visitCount,info:visitDay,info:visitFlag,info:visitHour,
    info:visitIp,info:visitKeepTime
    ")
    TBLPROPERTIES ("hbase.table.name" = "UserVisitInfo");
     4.3 使用Hive统计分析
    展开全文
  • hive数据导入hbase

    2021-01-26 15:41:03
    hive数据导入hbase一、hive外部映射hbase表1. hbase里面创建2. 建立hive外部并映射hbase表3.测试spark bulkload方式准备事项pom文件代码 一、hive外部映射hbase表 1. hbase里面创建 create 'B_TEST_STU'...

    一、hive外部表映射hbase表

    1. hbase里面创建表

    create 'B_TEST_STU', { NAME => 'info', COMPRESSION => 'SNAPPY' }
    

    2. 建立hive外部表并映射hbase表

    create database yh_test;
    use yh_test;
    create external table yh_test.stu(
    id String, 
    name String
    )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = 
    ":key,
    info:name,
    info:gender
    ") TBLPROPERTIES("hbase.table.name" ="B_TEST_STU");
    

    3.测试

    在hive表插入数据

    insert into table stu  values ('001','zhangsan','1');
    

    去hbase表查看数据是否生成

    scan 'hb_stu'
    

    二、spark bulkload方式

    参考官网
    分为两个步骤:

    1. 生成hfile文件格式数据
    2. 将生成的hfile文件移动到hbase对应位置

    1.准备事项

    1. hdfs、hive、hbase、zookeeper、spark集群均可正常使用
    2. 将hive的hive-site.xml文件复制到$SPARK_HOME/conf目录、项目的resource目录下(保证spark能够访问到外部hive)
    3. 将对应保存元数据数据库的驱动添加到项目resource目录下

    在这里插入图片描述

    2.pom文件

    <properties>
            <hadoop-version>2.6.0</hadoop-version>
            <hive-version>1.1.0</hive-version>
            <hbase-version>1.2.0</hbase-version>
            <spark.version>2.3.3</spark.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>2.11.12</version>
            </dependency>
    
            <!-- Spark Dependencies -->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.11</artifactId>
                <version>${spark.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_2.11</artifactId>
                <version>${spark.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-hive_2.11</artifactId>
                <version>${spark.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-common</artifactId>
                <version>${hbase-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-server</artifactId>
                <version>${hbase-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-client</artifactId>
                <version>${hbase-version}</version>
            </dependency>
    
            <!-- 指定hadoop-client API的版本 -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>${hadoop-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-hbase-handler</artifactId>
                <version>${hive-version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <pluginManagement>
                <plugins>
                    <!-- 编译scala的插件 -->
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>scala-maven-plugin</artifactId>
                        <version>3.2.2</version>
                    </plugin>
                    <!-- 编译java的插件 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.5.1</version>
                    </plugin>
                </plugins>
            </pluginManagement>
            <plugins>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>scala-compile-first</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>add-source</goal>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>scala-test-compile</id>
                            <phase>process-test-resources</phase>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
    
                <!-- 打jar插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <filters>
                                    <filter>
                                        <artifact>*:*</artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SF</exclude>
                                            <exclude>META-INF/*.DSA</exclude>
                                            <exclude>META-INF/*.RSA</exclude>
                                        </excludes>
                                    </filter>
                                </filters>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    3.代码

    package com.yh
    
    import org.apache.hadoop.conf.Configuration
    import org.apache.hadoop.fs.{FileSystem, Path}
    import org.apache.hadoop.hbase.client.ConnectionFactory
    import org.apache.hadoop.hbase.io.ImmutableBytesWritable
    import org.apache.hadoop.hbase.mapreduce.{HFileOutputFormat2, LoadIncrementalHFiles}
    import org.apache.hadoop.hbase.util.Bytes
    import org.apache.hadoop.hbase.{HBaseConfiguration, KeyValue, TableName}
    import org.apache.hadoop.mapreduce.Job
    import org.apache.spark.sql.SparkSession
    
    import java.net.URI
    
    /**
     *
    spark-on-yarn提交方式
    
     bin/spark-submit \
    --class com.yh.BulkloadTest \
    --master yarn \
    --executor-memory 1G \
    --total-executor-cores 2 \
    --num-executors 2 \
    hdfs://node01:8020/spark_bulkload_hbase-1.0-SNAPSHOT.jar \
    
     */
    object BulkloadTest {
      def main(args: Array[String]): Unit = {
        val spark = SparkSession.builder().appName("BulkloadTest")
          .master("local[*]")
          .enableHiveSupport()
          .getOrCreate()
        //从hive中读取数据,数据是在hdfs上,hive是个外部表,你也可以用内部表,都一样
        spark.sql("use yh_test")
        spark.sql("select *,id rowkey from stu").show()
        val Data = spark.sql("select *,id rowkey from stu")
    
        val dataRdd = Data.rdd.flatMap(row => { //cf是列族名,ID、DATA_TYPE、DEVICE_ID为字段名
          val rowkey = row.getAs[String]("rowkey".toLowerCase)
          Array(
            (rowkey, ("info", "id", row.getAs[String]("id"))),
            (rowkey, ("info", "name", row.getAs[String]("name")))
          )
        })
        //要保证行键,列族,列名的整体有序,必须先排序后处理,防止数据异常过滤rowkey
        val rdds = dataRdd.filter(x => x._1 != null).sortBy(x => (x._1, x._2._1, x._2._2)).map(x => {
          //将rdd转换成HFile需要的格式,Hfile的key是ImmutableBytesWritable,那么我们定义的RDD也是要以ImmutableBytesWritable的实例为key
          //KeyValue的实例为value
          val rowKey = Bytes.toBytes(x._1)
          val family = Bytes.toBytes(x._2._1)
          val colum = Bytes.toBytes(x._2._2)
          val value = Bytes.toBytes(x._2._3)
          (new ImmutableBytesWritable(rowKey), new KeyValue(rowKey, family, colum, value))
        })
    
        //临时文件保存位置,在hdfs上
        print(" 临时文件保存位置 hdfs://node01:8020/tmp/test2")
        val tmpdir = "hdfs://node01:8020/tmp/test2"
    
        val hconf = new Configuration()
        hconf.set("fs.defaultFS", "hdfs://node01:8020")
    
        val fs = FileSystem.get(new URI("hdfs://node01:8020"), hconf, "hadoop") //hadoop为你的服务器用户名
        if (fs.exists(new Path(tmpdir))) { //由于生成Hfile文件的目录必须是不存在的,所以我们存在的话就把它删除掉
          println("删除临时文件夹")
          fs.delete(new Path(tmpdir), true)
        }
    
        //创建HBase的配置
        val conf = HBaseConfiguration.create()
        conf.set("hbase.zookeeper.quorum", "node01,node02,node03")
        conf.set("hbase.zookeeper.property.clientPort", "2181")
    
        //为了预防hfile文件数过多无法进行导入,设置该参数值
        conf.setInt("hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily", 5000)
        //此处运行完成之后,在tmpdir生成的Hfile文件
        rdds.saveAsNewAPIHadoopFile(tmpdir,
          classOf[ImmutableBytesWritable],
          classOf[KeyValue],
          classOf[HFileOutputFormat2],
          conf)
        //开始HFile导入到Hbase
        val load = new LoadIncrementalHFiles(conf)
        //hbase的表名
        val tableName = "B_TEST_STU"
    
        //创建hbase的链接,利用默认的配置文件,实际上读取的hbase的master地址
        val conn = ConnectionFactory.createConnection(conf)
        //根据表名获取表
        val table = conn.getTable(TableName.valueOf(tableName))
    
        try {
    
          //获取hbase表的region分布
          val regionLocator = conn.getRegionLocator(TableName.valueOf(tableName))
          println("获取hbase表的region分布:   "+regionLocator)
          //创建一个hadoop的mapreduce的job
          val job = Job.getInstance(conf)
    
          //设置job名称,随便起一个就行
          job.setJobName("bulkload_stu_test")
    
          //此处最重要,需要设置文件输出的key,因为我们要生成HFil,所以outkey要用ImmutableBytesWritable
          job.setMapOutputKeyClass(classOf[ImmutableBytesWritable])
    
          //输出文件的内容KeyValue
          job.setMapOutputValueClass(classOf[KeyValue])
          print("配置HFileOutputFormat2的信息-----开始导入----------")
          //配置HFileOutputFormat2的信息
          HFileOutputFormat2.configureIncrementalLoad(job, table, regionLocator)
          print("开始导入----------")
          //开始导入
          load.doBulkLoad(new Path(tmpdir), conn.getAdmin, table, regionLocator)
          print("结束导入----------")
        } finally {
          table.close()
          conn.close()
        }
      }
    }
    
    

    上面是基于hive1.x
    后面我又基于hive2.x实现了bulkload方式导入。

    <properties>
            <hadoop-version>2.6.5</hadoop-version>
            <hive-version>2.3.2</hive-version>
            <hbase-version>1.2.4</hbase-version>
            <spark-version>2.0.0</spark-version>
            <scala-version>2.11.8</scala-version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>${scala-version}</version>
            </dependency>
    
            <!-- Spark Dependencies -->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.11</artifactId>
                <version>${spark-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_2.11</artifactId>
                <version>${spark-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-hive_2.11</artifactId>
                <version>${spark-version}</version>
            </dependency>
    
            <!--连接连接hive元数据的服务-->
            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-hive-thriftserver_2.11</artifactId>
                <version>${spark-version}</version>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-common</artifactId>
                <version>${hbase-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-server</artifactId>
                <version>${hbase-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-client</artifactId>
                <version>${hbase-version}</version>
            </dependency>
    
            <!-- 指定hadoop-client API的版本 -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>${hadoop-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>${hadoop-version}</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>${hadoop-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-hbase-handler</artifactId>
                <version>${hive-version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <pluginManagement>
                <plugins>
                    <!-- 编译scala的插件 -->
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>scala-maven-plugin</artifactId>
                        <version>3.2.2</version>
                    </plugin>
                    <!-- 编译java的插件 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.5.1</version>
                    </plugin>
                </plugins>
            </pluginManagement>
            <plugins>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>scala-compile-first</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>add-source</goal>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>scala-test-compile</id>
                            <phase>process-test-resources</phase>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
                <!-- 打jar插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <filters>
                                    <filter>
                                        <artifact>*:*</artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SF</exclude>
                                            <exclude>META-INF/*.DSA</exclude>
                                            <exclude>META-INF/*.RSA</exclude>
                                        </excludes>
                                    </filter>
                                </filters>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    整体上差不多。有一个小错误:
    在这里插入图片描述
    解决方式,指定spark.sql.warehouse.dir:

    val spark = SparkSession
          .builder()
          .master("local[*]")
          .appName("SavingDetail")
          .config("spark.sql.warehouse.dir","/spark-warehouse/")
          .enableHiveSupport()
          .getOrCreate()
    

    执行main方法即可将hive数据通过bulkload方式导入数据。

    展开全文
  • HiveHBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler....创建hive表的同时创建hbase表删除 hive表的同时也会删除对应的hbase表。 参见官方文档:https:/...
    Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler.jar工具类 ;
    hive-hbase-handler.jar在hive的lib包中而不是在hbase的lib中,hive0.6版本以后;
    创建hive表的同时创建hbase表,删除 hive表的同时也会删除对应的hbase表。
     
    使用前提:配置好hive和hbase对应的CDH版本,本案例使用的hive版本是hive-0.12.0-cdh5.0.0,HBase使用的版本是hbase-0.96.1.1-cdh5.0.0
     
    添加$HIVE_HOME/conf/hive-env.sh配置属性
    export HIVE_AUX_JARS_PATH=/home/hadoop/app/hbase-0.96.1.1-cdh5.0.0/lib

    启动hive:推荐使用$HIVE_HOME/bin/hive -hiveconf hbase.zookeeper.quorum=hadoop000 -hiveconf hive.root.logger=DEBUG,console启动,可以看到更加详细的日志信息

    案例一:操作简单表单cf

    创建hive-hbase表:

    CREATE TABLE hive_hbase_table_kv(key string, value string) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
    TBLPROPERTIES ("hbase.table.name" = "hbase_hive_table_kv");
    key与:key对应
    value与:val对应
    hbase_hive_table_kv为hbase的表名
    hive_hbase_table_kv为hive表名

    创建hive表并导入数据

    CREATE TABLE kv (key STRING, value STRING);
    LOAD DATA LOCAL INPATH '/home/spark/app/spark-1.0.0-bin-2.3.0-cdh5.0.0/examples/src/main/resources/kv1.txt' OVERWRITE INTO TABLE kv;
    INSERT OVERWRITE TABLE hive_hbase_table_kv SELECT key, value FROM kv;

    查看hive和hbase发现均创建了表,并且在两边均能查询到数据。

     

    案例二:操作简单表多cf

    CREATE TABLE hbase_table_2(key string, value1 string, value2 string, value3 string) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES (
    "hbase.columns.mapping" = ":key,a:b,a:c,d:e"
    );

    b/c字段属于a列族,e属于d列族。

    默认不指定hbase的表名就和hive的表名相同

    导入hive表数据:INSERT OVERWRITE TABLE hbase_table_2 SELECT empno, ename, job, deptno  FROM emp;

     

    案例三:操作分区表

    CREATE TABLE hbase_table_3(key string, ename string, job string, sal double) partitioned by(pt string)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,a:b,a:c,d:e")
    TBLPROPERTIES ("hbase.table.name" = "hbase_table_3");

    导入hive数据:

    INSERT OVERWRITE TABLE hbase_table_3 PARTITION(pt='2013-08-01') SELECT empno, ename, job, sal FROM emp;

     

    注意事项:

    与hbase整合的有分区的表在使用hive查询时存在问题: select * from table查询不显示数据,select column from table可以查到数据

    为什么select * from xxx 不显示数据?

    select * from xxx在普通表中是直接读取HDFS文件,而使用hive-hbase-handler的方式来导入数据的时候,数据是存放在hbase的hdfs上;

    在这里是直接从HBase进行查询。查询是成功了,但是hive并不会展示。

     


     

     

     
     

    转载于:https://www.cnblogs.com/luogankun/p/3810557.html

    展开全文
  • 在hive shell创建关联的命令如下:CREATE TABLE hive表名(rowkey date-type, value1 date-type, value2 date-type, value3 date-type) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH ...
  • Hive数据导入Hbase

    2019-05-17 17:05:00
    方案一:Hive关联HBase表...创建hive表hive_hbase_table映射hbase表hbase_table,会自动创建hbase表hbase_table,且会随着hive表删除删除,这里需要指定hive的schema到hbase schema的映射关系: 1、建表 CREAT...
  • hive访问不同一集群的hbase表数据

    千次阅读 2019-09-25 16:10:52
    最近有个需求,有一些数据会实时写入到 hbase,但是又需要 hive 计算这些数据,最后把结果同步到 mysql。如果对于 hbasehive 同一个集群,是很简单的操作,直接 hive 创建一个 hbase 的外部映射就好...
  • Hive整合HBase表

    2020-08-06 23:12:07
    此种方式如果删除Hive表HBase表也会被删除数据被清空;此种方式需要单独修改HBase表的属性比如压缩方式等 示例如下: create table cdc_addr_hb(row_key string, row_id string, created string, created_by ...
  • 有时,数据可以容易的存储在hive中,但是要导入到hbase里,可以不用写MR程序来操作,可以使用hive on hbase方式来创建相应的关联关系来将hive中数据导入到对应的hbase的表里,如下描述: 可以参考hivehbase关联...
  • 前文: 公司最近数据迁移,做了个测试来验证执行命令。 一、Hive部分 ...创建原始数据表 create table log_text_1( track_time string, url string, session_id string, referer string, ...
  • 通过hive表整合查询hbase数据

    千次阅读 2018-08-14 11:47:28
    通过Hive整合HBase,可以通过hive表查询hbase数据,下面是测试过程 --创建hbase create "user","account","address","info","userid" --创建映射hbase列族...
  • 1、创建hbase jar包到hive lib目录软连接 hive需要jar包: hive-hbase-handler-0.13.1-cdh5.3.6.jar ...guava-12.0.1.jar --删除hive下低版本jar包,cp hbase中的到hive/lib/下(即需要注意jar包版本) ln -s...
  • 文章目录一、上传完整的jar文件到hive/lib中二、修改hive-site.xml三、修改hive-env.sh四、在hivehbase中分别创建相关联的并通过hivehbase表中加载数据五、在hive中创建外部映射hbase中已存在的六、特别...
  • hivehbase关联

    万次阅读 2017-04-09 13:01:43
    通过下面的方式创建hive的内,这种情况是hbase本来没有这张表,创建后会在hbase中同样创建一张,将来数据也是存放在hbase中的;hdfs的hive表目录有hive文件夹,但是里面没有数据。 create tablehive_hbase_test...
  • 前面一:本文将HiveHBase整合一起,使Hive可以读取HBase中数据,让Hadoop生态系统最为常用的两大框架互相结合,相得益彰。 写前面二:使用软件说明约定所有软件的存放目录:/home/yujianxin一、Hive...
  • [Author]: kwu 从关系库导入数据hive-hbase表中,关系库到hbase中,可以直接由sqoop来导入,但是我们要对rowkey做特殊处理并加入更新时间,则操作步骤如下:
  • 数据到入hive的无分区,再将无分区导入hive的有分区: --备份 create table tds_package_secinfobk as select * from tds_package_secinfo; --导入分区 tds_package_secinfo CREATE TABLE tds_...
  • 十二、Hive整合HBase,操作HBase表HBase是被设计用来做k-v查询的,但有时候,...关于Hive操作HBase表的原理,请参考我之前的博文: http://lxw1234.com/archives/2015/04/101.htm值得商榷的是,使用Hive操作HBase中...
  • hive数据仓库,但是使用的是类sql语句 hbase是数据库,但是不用sql语句 特点: 1.存储量大 2.数据稀疏 3.速度快:数据量比较大的情况下,不是特别慢。 4.数据无类型(单一类型) 应用场景: 1.适合做海量数据的存和...
  • 文章目录## 一、前言二、适用场景三、依赖条件四、具体使用4.1、Hive 映射到 Hbase 4.2、HBase 映射到 Hive 表中4.3、Hive Map 类型 HBase 的映射4.4、 使用 Hive 集成 HBase 的需注意五、来源 ...
  • 目录[-] HBaseHive的集成原理 1.文章来源: 2.基本介绍 3.软件版本 4.安装位置 5.整合步骤 1. /usr/local/hbase-0.90.4下: 2.修改hive-site.xml...2. 导入数据到关联hbase表中去 1.在hive中新建一张中间
  • 前面一:本文将HiveHBase整合一起,使Hive可以读取HBase中数据,让Hadoop生态系统最为常用的两大框架互相结合,相得益彰。写前面二:使用软件说明:约定所有软件的存放目录:/home/yujianxin一、Hive...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,755
精华内容 6,302
关键字:

在hive中删除hbase表数据