开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天 juejin.cn/post/716729…
使用方式
-
命令行
-
JDBC
命令行
-
bin/hive 最基础的使用方式
-
beeline:官方推荐的轻量级客户端工具
hive
在hive目录下 bin/hive进入
简单测试下
show tables;
create table t1(id int,name string);
添加数据
insert into t1(id,name) values(1,"zs");
这里执行时会产生mapReduce任务
查询表数据
select * from t1;
查询时并没有产生mapReduce任务,针对select * from tableName这种操作,就跟我们在hdfs打开文件一样,不需要调用计算引擎,所以也就没有产生mapReduce任务。
删除表测试
drop table if exists t1;
退出
quit;
beeline
首先启动HiveServer2服务
bin/hiveserver2
这里必须要等待Hive2服务启动后再通过beeline去连接
等待Hive2输出完所有的Session ID 信息
一般是四行
hiveserver2默认会监听本机的10000端口
重新打开一个新的session会话
启动beeline
bin/beeline -u jdbc:hive2://localhost:10000
上述操作再来一遍
create table t1(id int,name string);
这里报错信息提示缺少写权限
先退出beeline,用root用户启动
bin/beeline -u jdbc:hive2://localhost:10000 -n root
再来一遍
create table t1(id int,name string);
select * from t1;
可以看到beeline会对一些信息进行封装,显得更加好看和专业
官方推荐使用beeline,这个看个人喜好。
hive -e 执行hql语句
首先知道hive -e无需启动会话,就可以执行hive命令
测试如下
配置hive环境变量
vi /etc/profile
export HIVE_HOME=/data/soft/apache-hive-3.1.2-bin
source /etc/profile
JDBC方式
这里我们创建一个maven项目
添加Hive开发依赖
hive JDBC驱动如下
hive-jdbc
3.1.2
核心代码:
先启动hiveserver2服务
/**
- JDBC代码操作 Hive
*/
public class HiveJdbcDemo {
public static void main(String[] args) throws Exception{
//指定hiveserver2的连接
String jdbcUrl = "jdbc:hive2://192.168.197.104:10000";
//获取jdbc连接,这里的user使用root,就是linux中的用户名,password随便指定即
Connection conn = DriverManager.getConnection(jdbcUrl, "root", "any")
//获取Statement
Statement stmt = conn.createStatement();
//指定查询的sql
String sql = "select * from t1";
//执行sql
ResultSet res = stmt.executeQuery(sql);
//循环读取结果
while (res.next()){
System.out.println(res.getInt("id")+"\t"+res.getString("name"));
}
}
}
这里处理下log4j的信息
排除hive自带的log4j
hive-jdbc
3.1.2
org.slf4j
slf4j-log4j12
资源目录下新增log4j.xml
重新打印,即可解决log4j报错信息问题
使用临时参数
在hive命令行中可以使用set命令临时设置一些参数的值
其实就是临时修改hive-site.xml中参数的值
通过set命令设置的参数只在当前会话有效,退出重新打开就无效了
在hive-site.xml中有一个参数是 hive.cli.print.current.db ,这个参数可以显示当前所在的数据库名 称,默认值为 false 。 在这里我们设置为true。
set hive.cli.print.current.db = true;
还有一个参数 hive.cli.print.header 可以控制获取结果的时候显示字段名称,这样看起来会比较清晰
set hive.cli.print.header = true;
修改 ~/.hiverc,保留配置仅对当前用户生效
vi ~/.hiverc
set hive.cli.print.current.db = true;
set hive.cli.print.header = true;
重新进入看下效果
配置Hive日志
删除重复的日志信息
hive中的一个日志依赖包和hadoop中的日志依赖包冲突
我们移除hive的日志依赖包
mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak
配置Hive日志信息目录
mv hive-log4j2.properties.template hive-log4j2.properties
vi hive-log4j2.properties
配置信息如下
property.hive.log.level = WARN
property.hive.root.logger = DRFA
property.hive.log.dir = /data/hive_repo/log
property.hive.log.file = hive.log
property.hive.perflogger.log.level = INFO
这样后期分析日志就可以到 /data/hive_repo/log 目录下去查看了。