zoukankan      html  css  js  c++  java
  • 四 Hive整合HBase

    安装环境:

      hbase版本:hbase-1.4.0-bin.tar.gz

      hive版本:   apache-hive-1.2.1-bin.tar

    注意请使用高一点的hbase版本,不然就算hive和hbase关联成功,执行语句的时候会出现错误(The connection has to be unmanaged)。

    hive整合hbase,其实就是用hive执行hsql来操作hbase数据库。

    1、拷贝hbase jar包至hive lib目录中,其实就是使hive可以使用hbase的api。

      需要将hbase拷贝至hive下的jar包如下:

        hbase-protocol-1.4.0.jar

        hbase-server-1.4.0.jar

        hbase-client-1.4.0.jar

        hbase-common-1.4.0.jar

        hbase-common-1.4.0-tests.jar

    2、修改hive-site.xml文件

    <configuration>
    <!-- hive关联的mysql的地址-->
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <!-- mysql数据库驱动-->
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
    </property>
    <!-- mysql用户名-->
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>username to use against metastore database</description>
    </property>
    <!-- mysql密码-->
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
    <description>password to use against metastore database</description>
    </property>
    <!-- hive 关联hbase 所需要的jar-->
    <property>
            <name>hive.aux.jars.path</name>
            <value>file:///home/hadoop/apps/hive/lib/hive-hbase-handler-1.2.1.jar,
            file:///home/hadoop/apps/hive/lib/hbase-protocol-1.4.0.jar,
            file:///home/hadoop/apps/hive/lib/hbase-server-1.4.0.jar,
            file:///home/hadoop/apps/hive/lib/hbase-client-1.4.0.jar,
            file:///home/hadoop/apps/hive/lib/hbase-common-1.4.0.jar,
            file:///home/hadoop/apps/hive/lib/hbase-common-1.4.0-tests.jar,
            file:///home/hadoop/apps/hive/lib/zookeeper-3.4.6.jar,
            file:///home/hadoop/apps/hive/lib/guava-14.0.1.jar
            </value>
    </property>
    <!--hbase 数据信息所在的zookeeper地址-->
    <property>
            <name>hbase.zookeeper.quorum</name>
            <value>hadoop2,hadoop3,hadoop4</value>
    </property>
    <property>
            <name>dfs.permissions.enabled</name>
            <value>false</value>
    </property>
    </configuration>

    3、关联hbase中已经存在的表

    CREATE EXTERNAL TABLE if not exists notebook(
             row  string,
             nl  string, 
             ct  string,
            nbn  string
      )
     STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
     WITH SERDEPROPERTIES('hbase.columns.mapping' = ':key,nbi:nl,nbi:ct,nbi:nbn')
     TBLPROPERTIES('hbase.table.name' = 'nb');

      说明:

      hbase.columns.mapping  中的值分别对应hbase表中的 列族:列的形式,其中 :key是固定写法,对应hbase中的rowkey

      hbase.table.name hbase中的表名

      org.apache.hadoop.hive.hbase.HBaseStorageHandler 使用的处理器

      这样hive就和hbase中已经存在的表进行了关联。

    4、启动hive的方式两种:

      4.1 hive -hiveconf hbase.zookeeper.quorum=hadoop2,hadoop3,hadoop4

      4.2 

        4.2.1 启动hiveserver2

        4.2.2 beeline -hiveconf  hbase.zookeeper.quorum=hadoop2,hadoop3,hadoop4

        4.2.3 !connect jdbc:hive2://localhost:10000

    至此hive关联hbase完成!

    5 、使用java连接hive操作hbase

      pom.xml

    <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>cn.itcast.hbase</groupId>
        <artifactId>hbase</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>2.6.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.6.4</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-client</artifactId>
                <version>1.4.0</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server -->
            <dependency>
                <groupId>org.apache.hbase</groupId>
                <artifactId>hbase-server</artifactId>
                <version>1.4.0</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>1.2.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore -->
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-metastore</artifactId>
                <version>1.2.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
    
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-exec</artifactId>
                <version>1.2.1</version>
            </dependency>
        </dependencies>
    </project>

      Hive_Hbase.java

    package cn.itcast.bigdata.hbase;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class Hive_Hbase {
        public static void main(String[] args) {
    
            try {
                Class.forName("org.apache.hive.jdbc.HiveDriver");
                Connection connection = DriverManager.getConnection("jdbc:hive2://hadoop1:10000/shizhan02","hadoop","");
                Statement statement = connection.createStatement();
                String sql = "SELECT * FROM hive_hbase_table_kv";
                ResultSet res = statement.executeQuery(sql);
                while (res.next()) {
                    System.out.println(res.getString(2));
                }
            } catch (ClassNotFoundException | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }
  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/zhaobingqing/p/8295632.html
Copyright © 2011-2022 走看看