CDH的 hive 整合 hbase

news/2024/7/23 23:47:56 标签: 大数据

总帖: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) + "\t==> " + res.getString(2));
                        }
                    }
                    catch (ClassNotFoundException e)
                    {
                        e.printStackTrace();
                    }
                }
            }

转载于:https://www.cnblogs.com/liquan-anran/p/10395683.html


http://www.niftyadmin.cn/n/1556610.html

相关文章

Vue动态绑定属性—指令v-bind

1、v-bind指令的介绍和基本使用 (1)作用&#xff1a;动态绑定属性 除了内容需要动态来实现之外&#xff0c;有时候元素的属性我们也希望能够动态来改变 比如可以动态绑定a元素的href属性&#xff0c;img的src属性等等。 (2)与插值操作的对比&#xff1a;插值操作的主要作用是将…

JS中变量数据类型的检测

基本数据类型&#xff1a;Number、String、Boolean、Null、Undefined 引用数据类型&#xff1a;Object 1、typeof (1)作用&#xff1a;返回数据类型的字符串表达式 (2)局限性&#xff1a;检测类型太少&#xff0c;不能检测出object的具体类型&#xff0c;如下不能判断null,对象…

高阶组件之属性代理

新组件类继承子React.component类&#xff0c;对传入的组件进行一系列操作&#xff0c;从而产生一个新的组件&#xff0c;达到增强组件的作用 操作props访问ref抽取state封装组件废话不多说&#xff0c;直接上代码&#xff1a; Tabbar.js import React, { Component } from &qu…

对是否要用Linux的思考

原文链接&#xff1a;https://www.cun-xu.cn/index.p... 这篇文章是今天才决定要写的&#xff0c;Rocken到目前为止使用Linux的时间才半年&#xff0c;所以一些认识会很浅薄。所以是否要写这篇文章也犹豫了好几天&#xff0c;我究竟有没有资格来写这篇文章。今天是开学前最后一…

mybatis批量插入数据到Oracle中的两种方式

2019独角兽企业重金招聘Python工程师标准>>> 第一种&#xff1a; <insert id"addList" parameterType"java.util.List" useGeneratedKeys"false"> INSERT ALL <foreach item"item" index"in…

JS数组的高级用法

1、forEach (1)作用&#xff1a;对数组的每个元素执行一次给定的函数。 (2)参数&#xff1a;回调函数(处理的当前元素&#xff0c;索引&#xff0c;当前操作的数组)、this的值(可选) (3)返回值&#xff1a;undefined let arr [1, 2, 3]; let sum 0; arr.forEach(function (va…

ansible软件2

常用软件安装及使用目录 ansible使用1 第1章 copy模块 1.1 创建文件及写入内容 1. [rootm01 scripts]# ansible oldboy -m copy -a "contentwo shi hao ren dest/machangwei/11" 2. [rootweb02 machangwei]# cat 11 3. wo shi hao ren[rootweb02 machangwei]# …

如何用无监督模型,防范信用卡欺诈?

小叽导读&#xff1a;国际支付是指在国际经济活动中的当事人以一定的支付工具和方式&#xff0c;清偿因各种经济活动而产生的国际债权债务的行为。在支付中&#xff0c;如果伪造、冒用他人的卡进行支付或者用自己的信用卡进行恶意透支&#xff0c;就构成了欺诈。本文将无监督模…