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

在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值进行聚类存储在同一个文件中。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值