• hadoop生态--Hive(2)--Hive的使用方式


    hive为用户提供了多种使用方式,包括本地客户端交互、将hive作为服务从远程通过客户端交互以及脚本化运行方式(常用)

    一、基本运行方式

    hive是一个单机程序,在安装hive的机器上,执行 hive 启动hive进入hive交互界面(如果没有配置path变量,需要到hive的安装目录下运行bin中hive程序)。

    进入交互界面后就可以执行各种对库、表的增删改查

    二、将hive启动为服务

    启动hive服务,监听10000端口,就不需要必须在安装hive的服务器上进行,可以在任意可以与hive服务通信的机器上启动hive客户端—beeline与hive服务器交互。

    hive在$hive_home/bin下提供了hiveserver2程序用于启动hive服务,提供beeline程序作为客户端。

    step1.启动hive服务

    在安装hive服务的机器上执行 hiveserver2 就可以启动服务(如果没有配置环境变量直接到安装目录下执行),一般会在后台静默运行。

    nohup hiveserver2 1>/dev/null 2>&1 &

    step2.在可以与hi v额服务器通信的机器上执行 beeline 进入beeline的交互界面

    !connect jdbc:hive2://hdp-01:1000

    输入HDFS用户名、密码。这样完成连接,可以通过交互在hive服务器上执行。

    step3.交互执行操作

    #关闭连接
    !close
    #退出beeline,服务会继续运行,只能到hive服务器关闭
    !quit

    三、脚本化运行(常用)

    使用一次性命令的方式来执行给定的hql语句。

    方式1、hive -e “要执行语句”

    这样的方式,可以不需要进入hive交互式界面,直接使用shell命令输入 hive -e "select * from student" 来进行查询等操作。

    在这样的基础上就可以写一个.sh脚本来写入多条hive -e命令,然后执行sh文件

    方式2、hive -f test.hql

    还可以把hql语句直接写到脚本中(不需要写hive -e),把文件保存为 .hql 格式,通过执行 hive -f test.hql 来执行hql语句。

    四、通过JDBC访问hive

    0、导包

    maven官方查询hive依赖

        <dependency>
          <groupId>org.apache.hive</groupId>
          <artifactId>hive-jdbc</artifactId>
          <version>2.1.0</version>
        </dependency>

    1、注册、连接、查询

    package com.jing.hadoop;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    /**
     * 使用jdbc方式连接到hive数据仓库,hive需要开启hive server2服务
     *
     */
    public class App {
        public static void main( String[] args ) throws Exception{
            //加载hive jdbc驱动,并注册到DriverManager
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            //获得数据库连接
            Connection conn = DriverManager.getConnection("jdbc:hive2//192.168.1.236:10000/mydb2");
            //
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("select id, name, age from t");
            while(rs.next()){
                System.out.println(rs.getInt((1)) + "," +
                        rs.getString(2));
            }
            rs.close();
            st.close();
            conn.close();
        }
    
    
    }

    hive建库建表导入数据

    1、建库、建表(以基本运行方式为例)

    show databases;
    create database hive_test;
    create table student(id int, name string); 

     这样操作之后会在hdfs上创建目录,,,/usr/hive/warehouse

    把文件放到student目录下,在hive上的表现就是表内有数据了。表内各字段的值就是文件内一行记录被分割之后的值。

    注意:hive切字段时默认使用的分隔符是01,所以创建的文件中,字段之间使用^A分割(我在使用的时候不好使,未查到问题出在哪里)。支持自定义用于分割的字符。

    create table t_order(id string,create_time string,amount float,uid string)
    row format delimited
    fields terminated by ',';

    2、根据模板表创建表

    创建的表不包含数据

    create table table-name like table-2-name

    创建的表包含数据:

    create table 
    as
    select * from table-2

     2、导入数据

    1)手动hdfs命令,将文件放入表目录
    2)hive交互中,hive命令导入
    将本地数据导入 
    load data local inpath ‘/local/path’ into table t_name partition(singal='singal_value');

    (注意这里的local是对hive服务器而言的)

    load data inpath ‘/hdfs/path’ into table t_name partition(singal='singal_value');

    从本地导入和hdfs导入的区别:本地文件导入是复制,hdfs导入是移动

  • 相关阅读:
    部分模块
    正则表达式和re模块
    软件开发的目录规范
    模块以及模块的导入
    迭代器、可迭代对象、迭代器对象、生成器、生成器表达式和相关的面试题
    内置方法补充
    递归、二分法、匿名函数和部分内置方法
    python的闭包和装饰器
    函数名本质、函数命名空间和作用域链
    函数简介和函数的结构分析
  • 原文地址:https://www.cnblogs.com/Jing-Wang/p/10904804.html
Copyright © 2020-2023  润新知