zoukankan      html  css  js  c++  java
  • CDH的 hive 整合 hbase

    总帖:CDH 6系列(CDH 6.0、CHD6.1等)安装和使用

    1.hbase与hive哪些版本兼容?
        hive0.90与hbase0.92是兼容的,早期的hive版本与hbase0.89/0.90兼容,不需要自己编译。
        hive1.x与hbase0.98.x或则更低版本是兼容的,不需要自己编译。
        hive2.x与hbase1.x及比hbase1.x更高版本兼容,不需要自己编译。
        重点注意:hive 1.x 与 hbase 1.x整合时,需要自己编译

    2.连接和使用Hive:
        1.第一种方式:
            /usr/bin/hive 为连接打开Hive操作界面的快捷方式
              因此只需要直接执行命令 hive 即能连接打开Hive操作界面
          
        2.第二种方式:
            默认启动Hive时,就会同时启动了hiveserver2进程,jps查看到有RunJar进程即表示hiveserver2进程已启动
                 /usr/bin/beeline 为外部Linux连接访问当前Linux下的hive的快捷方式,所以此时只需要直接执行命令 beeline -u jdbc:hive2://node1:10000 -n root

        2.show databases;
            默认只有一个 数据库: default
         3.create database rimengshe;
          use rimengshe;
          create table nagisa(name string,num1 int,num2 int) row format delimited fields terminated by ',';
          show tables;

    3.连接和使用hbase
        1./usr/bin/hbase 为连接打开Hbase操作界面的快捷方式
          因此只需要直接执行命令 hbase shell 即能连接打开Hive操作界面

        2.list 查看所有表
               创建用户表:create 'user','base_info'

    4.hive 整合 hbase:
        1.(一般无需操作拷贝jar包这一步)
           因为 /opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/jars 目录下已经存在 hive-hbase-handler-2.1.1-cdh6.1.0.jar,因此下面的拷贝jar包操作并不需要进行
            把 hive-hbase-handler.jar 从 hive 的lib目录下 拷贝到 hbase 的lib目录下
              如果没有 hive-hbase-handler.jar 可以拷贝 hive-hbase-handler-2.1.1-cdh6.0.0.jar
                hive 的lib目录:
                    CDH6.0.0:cd /opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hive/lib
                    CDH6.1.0:cd /opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/lib/hive/lib
                hbase 的lib目录:
                    CDH6.0.0:cd /opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hbase/lib
                    CDH6.1.0:cd /opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/lib/hbase/lib
            执行拷贝命令:cp /opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hive/lib/hive-hbase-handler.jar /opt/cloudera/parcels/CDH-6.0.0-1.cdh6.0.0.p0.537114/lib/hbase/lib

        2.修改 hive 的conf目录下 hive-site.xml文件中<configuration> 中的内容
              <property>
                    <name>hive.zookeeper.quorum</name>
                    <value>node1,node2,node3</value>  
              </property>
              <property>
                    <name>hive.server2.enable.doAs</name>
                    <value>false</value>   
              </property>
          修改操作如下:
             1.可通过Hive -> 操作 -> 下载客户端配置 的方式查看hive-site.xml文件内容
                1.可得知 hive.zookeeper.quorum 配置的内容,默认配置即为 node1,node2,node3 即可。
                2.可得知 hive.server2.enable.doAs 默认为 true,推荐修改为false,否则在使用官方推荐的hiveserver2/beeline的方式操作时,
                  在利用HQL语句创建HBase时可能会出现异常
            2.可通过Hive -> 配置 -> 搜索栏中搜索 hive.server2.enable.doAs ,默认为勾选,取消勾选即可,即能修改配置为 false。
              再当我们通过Hive -> 操作 -> 下载客户端配置 的方式查看hive-site.xml文件内容,即可查看到hive.server2.enable.doAs已为false


        3.重启 hive、hbase
        4.保证hiveserver2进程启动中,使用命令 beeline -u jdbc:hive2://node1:10000 -n root 进行连接
        5.HIVE执行创建表语句:hbase表 映射 hive表,写入的数据存储在 hbase表中,"hbase.mapred.output.outputtable"可指定数据写入到hbase表中
            1.create database rimengshe;
            2.use rimengshe;
            3.第一种映射方式:
                1.创建hive表的同时也会创建出hbase表
                      # Hive中的表名test_tb;key字段映射hbase表中的rowkey;value字段映射cf1列簇下的val字段
                      CREATE TABLE ushio(key int, value string) 
                      # 指定存储处理器
                      STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
                      # 声明列簇,列名
                    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") 
                    # hbase.table.name声明HBase表名,为可选属性默认与Hive的表名相同
                    # hbase.mapred.output.outputtable指定插入数据时写入的表,如果以后需要往该表插入数据就需要指定该值
                    TBLPROPERTIES ("hbase.table.name" = "ushio", "hbase.mapred.output.outputtable" = "ushio");  
                 2.hbase表中添加数据:put '表名','rowkey值','列簇名:列名','列值'            
                    put 'ushio','98','cf1:val','val_98'
                    put 'ushio','99','cf1:val','val_99'
                    put 'ushio','100','cf1:val','val_100'
                3.hive表中添加数据:(会运行yarn)INSERT INTO table_name (field1, field2,...fieldN ) VALUES (value1, value2,...valueN );
                    insert into ushio values(2,'ushio');
                 4.hbase表 查询表中的所有数据:scan '表名'
                    scan 'ushio'


                5.hive表 查询表中的所有数据:
                    select * from ushio;


            4.第二种映射方式:
                Hive映射“HBase中已经存在的”表,即使用HQL创建hive外部表,映射HBase已存在的表,进行关联操作。
     
    5.JAVA 操作 Hive
        1.依赖
                  <dependencies>
                    <dependency>
                      <groupId>junit</groupId>
                      <artifactId>junit</artifactId>
                      <version>4.11</version>
                      <scope>test</scope>
                    </dependency>
                    <dependency>
                      <groupId>org.apache.hadoop</groupId>
                      <artifactId>hadoop-client</artifactId>
                      <version>2.7.4</version>
                    </dependency>
                    <dependency>
                      <groupId>org.apache.hive</groupId>
                      <artifactId>hive-jdbc</artifactId>
                      <version>2.1.1</version>
                    </dependency>
                    <dependency>
                      <groupId>org.apache.hbase</groupId>
                      <artifactId>hbase-client</artifactId>
                      <version>2.1.0</version>
                    </dependency>
                    <dependency>
                    <groupId>org.apache.hive</groupId>
                    <artifactId>hive-metastore</artifactId>
                    <version>2.1.0</version>
                    </dependency>
                  </dependencies>

        2.实现代码
                import java.sql.*;

                public class select
                {
                    private static String Driver = "org.apache.hive.jdbc.HiveDriver";
                    //jdbc:hive2://(主)节点IP:10000/数据库名
                    private static String URL = "jdbc:hive2://192.168.88.100:10000/default";
                    private static String name = "";
                    private static String password = "";

                    public static void main(String[] args) throws SQLException
                    {
                        try
                        {
                            Class.forName(Driver);
                            Connection connection = DriverManager.getConnection(URL, name, password);
                            Statement statement = connection.createStatement();
                            String sql = "select * from test_tb";
                            ResultSet res = statement.executeQuery(sql);
                            while (res.next())
                            {
                                System.out.println(res.getInt(1) + " ==> " + res.getString(2));
                            }
                        }
                        catch (ClassNotFoundException e)
                        {
                            e.printStackTrace();
                        }
                    }
                }

  • 相关阅读:
    LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
    第 15 篇:接口的单元测试
    【译】GitHub 为什么挂?官方的可行性报告为你解答
    微服务常用的几种部署方式——蓝绿部署,滚动升级,灰度发布/金丝雀发布
    .net生成PDF文件的几种方式
    读取私有字体信息并进行相关判断
    Windows Locale Codes
    总结C#获取当前路径的7种方法
    Devexpress aspxgridview oncustomcallback 无刷新更新数据
    ArcGIS Pro 版本、版本号、发布年代
  • 原文地址:https://www.cnblogs.com/liquan-anran/p/10395683.html
Copyright © 2011-2022 走看看