您的位置:首页 > 编程语言 > Java开发

hive简介——java连接和数据管理的方式

2017-09-19 20:33 477 查看
在hadoop中hive担任的是数据仓库的角色,主要用来存储数据,而且存储的数据是不再修改的数据。hive集成了SQL技术,提供了类SQL的查询语句,称为HQL(和类SQL语句操作一样,在此就不再详细介绍)。在类SQL的增删改查操作中,HQL提供了INSERT(增)和SELECT(查)操作。

java操作hive就像java操作mysql一样使用jdbc。使用java操作hive时要先启动hive集群中的hiveserver2(指令:hive –service hiveserver2)

/*
* 驱动名:
*HiveServer—>org.apache.hadoop.hive.jdbc.HiveDriver
*HiveServer2—>org.apache.hive.jdbc.HiveDriver
*/
/*
* 创建连接,<user>是hadoop用户
* HiveServer—>DriverManager.getConnection("jdbc:hive://<host>:<port>", "<user>", "");
*HiveServer2—>DriverManager.getConnection("jdbc:hive2://<host>:<port>", "<user>", "");
*/
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
//创建hive连接
Connection con=null;
try {       con=DriverManager.getConnection("jdbc:hive2://master:10000/hive/warehouse","<user>","<password>");
} catch (SQLException e) {
e.printStackTrace();
System.exit(1);
}


hive提供内部表(managed table)、外部表(external table)、分区(partition)、桶(bucket)四种数据管理方式。

1.内部表:每个表在HDFS中都有相应的目录来存储表中的数据(该目录可以在hive-site.xml文件中配置,(如:/hive/dbhome/user,/hive/dbhome是在配置文件中配置的用来存储数据的目录,user是用户的创建的一个表),删除该表示数据会被删除完。

create table user(u_id int,u_name String);


默认创建的是内部表

2.外部表:外部表和内部表相似,但是外部表的数据不是存储在自己所属的目录中,而是存储到别处的(该路径是在创建外部表是指定的),自己所属的目录存储的是该外部表对应的元数据,因此删除该表时,不会删除该表的数据而是删除该表的元数据。

create external table user_external(u_id int,u_name String) location '/hive/user_external'


location用来指定外部表数据存储的路径

3.分区:表的每一个分区对应表目录下相应的一个子目录,所有分区的数据存储在对应的子目录中。(如:前面创建的user表用u_id,u_name两个分区,那么分区u_id=10,u_name=hello对应的user表的目录为/hive/dbhome/u_id=10/u_name=hello,那么所有属于这个分区的数据都存储在给目录中),可以理解为按照列属性创建相应的子目录用来存储该列的数据。

4.桶:对指定的列值计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(如:user表中列分散到16个桶中,先对u_id列计算hash值,hash值为0的数据就存储在/hive/dbhome/user/part-00000,hash值为1的就存储在/hive/dbhome/user/part-00001,依次类推),可以理解为按照其计算的hash值进行聚类存储在同一个文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐