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)
hive提供内部表(managed table)、外部表(external table)、分区(partition)、桶(bucket)四种数据管理方式。
1.内部表:每个表在HDFS中都有相应的目录来存储表中的数据(该目录可以在hive-site.xml文件中配置,(如:/hive/dbhome/user,/hive/dbhome是在配置文件中配置的用来存储数据的目录,user是用户的创建的一个表),删除该表示数据会被删除完。
默认创建的是内部表
2.外部表:外部表和内部表相似,但是外部表的数据不是存储在自己所属的目录中,而是存储到别处的(该路径是在创建外部表是指定的),自己所属的目录存储的是该外部表对应的元数据,因此删除该表时,不会删除该表的数据而是删除该表的元数据。
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值进行聚类存储在同一个文件中。
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值进行聚类存储在同一个文件中。
相关文章推荐
- .NET ODBC与JAVA JDBC连接HIVE查询数据的性能比较
- 通过远程jdbc方式连接到hive数据仓库
- 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线
- Java采用JDBC的方式连接Hive(SparkSQL)
- 大数据Hive的案例、参数、动态分区、分桶、视图、索引、运行方式、权限管理、Hive的优化_03_03
- Java客户端连接elasticsearch5.5.3实现数据搜索(基于xpack安全管理)
- 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线
- Hive连接MYSQL数据OK,查询出现in thread "Thread-18" java.lang.IllegalArgumentException:Does not contain a vali
- zookeeper集群之java程序同步方式实现对数据节点的增,删,改,查及其权限管理(二)
- Java实现SparkSQL Thrift方式读取Hive数据
- java连接Hive的几种方式
- java程序员的大数据之路(16):Hive简介
- zookeeper集群之java程序异步方式实现对数据节点的增,删,改,查及其权限管理(三)
- oracle 数据库的管理工具 PL/SQL_Developer 的简易使用 与Java 连接并查询显示出数据
- Hive数据仓库--Java代码JDBC方式访问Hive中表的数据
- Java客户端连接elasticsearch5.5.3实现数据搜索(基于xpack安全管理)
- java 演示使用jdbc-odbc桥连接的方式操作数据库 向数据库中添加数据
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
- Java JDBC方式连接HIVE2