Hive分桶、Hive JDBC
Hive笔记3:Hive分桶、Hive JDBC
目录
一、Hive分桶
分桶实际上是对文件(数据)的进一步切分
Hive默认关闭分桶
作用:在往分桶表中插入数据的时候,会根据 clustered by 指定的字段 进行hash分区 对指定的buckets个数 进行取余,进而可以将数据分割成buckets个数个文件,以达到数据均匀分布,可以解决Map端的“数据倾斜”问题,方便我们取抽样数据,提高Map join效率
分桶字段 需要根据业务进行设定
1、开启分桶开关
hive> set hive.enforce.bucketing=true;
2、建立分桶表
create table students_buks
(
id bigint,
name string,
age int,
gender string,
clazz string
)
CLUSTERED BY (clazz) into 12 BUCKETS #指定分桶的字段,并指定分桶的数量
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
3、往分桶表中插入数据
// 直接使用load data 并不能将数据打散,结果和插入普通表一样
load data local inpath '/usr/local/soft/data/students.txt' into table students_buks;
// 需要使用下面这种方式插入数据,才能使分桶表真正发挥作用
insert into students_buks select * from students;
https://zhuanlan.zhihu.com/p/93728864 Hive分桶表的使用场景以及优缺点分析
注意:
(1)一个数据文件假如指定了12个分桶数量-->会生成12个Reduce分区-->12个MR任务-->12个文件;
(2)按照班级分桶,那么班级相同的会分在同一个桶里
(3)注意区分Reduce分区和Hive分区,两者概念不同
(4)分区:生成子目录
分桶:切分单个数据文件生成多个数据文件目录
二、Hive JDBC
1、启动hiveserver2
[root@master ~]# service hiveserver2 &
或者
[root@master ~]# hiveserver2 &
&表示将hiveserver2后台运行,一般不使用&
如果运行了多台hiveserver2 &,会使IDEA连接冲突,使用 kill -9 进程号 来删除运行
2、新建maven项目并添加两个依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
3、编写JDBC代码
package com.shujia.HiveJDBC;
import java.sql.*;
public class HiveJDBCOp {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1、加载驱动
Class.forName("org.apache.hive.jdbc.HiveDriver");
// 2、创建连接
Connection conn = DriverManager.getConnection("jdbc:hive2://master:10000/test1","root","");
// 3、创建Statement
// Statement st = conn.createStatement();
// 4、执行SQL语句 select * from students limit 10
// ResultSet rs = st.executeQuery("select * from students limit 10");
// 3、使用prepareStatement 防止SQL注入的问题(推荐使用)
PreparedStatement pSt = conn.prepareStatement("select * from students where clazz=?");
//设置参数
pSt.setString(1, "文科一班");
// 4、执行SQL语句
ResultSet rs = pSt.executeQuery();
// 5、遍历ResultSet获取数据
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String gender = rs.getString("gender");
String clazz = rs.getString("clazz");
System.out.println(id + "," + name + "," + age + "," + gender + "," + clazz);
}
// 关闭连接
rs.close();
pSt.close();
conn.close();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix