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导入是移动

原文地址:https://www.cnblogs.com/Jing-Wang/p/10904804.html