整理一下HIVE概念

 
 
   
   
   
   
  • 首先要明白,HIVE是HADOOP生态系统中充当数据仓库的角色。它本质上是是一个SQL解释器,就是使得我们能用SQL查询语言去查询HDFS上的数据。而这个功能,容易让我们误认为它就是传统的数据库。但事实上,它与传统的数据库是有区别的,下文会提到。
  • HIVE的数据分为两个部分,一个是存数据的数据库,另一个是元数据库。下面分两部分单独说。

存数据的数据库


  • HIVE中存数据的数据库,会被存在HDFS上,它有默认目录,由hive-site.xml指定,具体配置可百度,这里只谈概念。HIVE的结构还是数据库+表的形式。这里表分为内部表和外部表。如果创建一张内部表,数据会被移动到当前表目录。而创建的外部表,只会存储表的元数据到元数据库里。内外表的区别就是,在HIVE中删除表后,内部表文件会一起被删除,而外部表的文件不会被删除。
  • HIVE不同于其他数据库的地方就在于建立表这个地方。HIVE建立表并不是有固定的表的格式,而是它仅仅记录了导入的数据的格式,例如行分隔符、列分隔符等,它将这些存于元数据库里,这样就建立了一张表,换而言之,HIVE支持不同格式的数据导入,你只要告诉HIVE你的数据是什么格式的,HIVE就能根据格式而建立一张表,并且它并不会去修改原数据格式。
  • 另外,HIVE除了表还支持的数据模型有分区partition、分桶bucket。分区可以理解为按表里某些列的值来分类目录,比如可以将year=2016,month=10 的所有数据,放在同一个分区里,这样,在HDFS默认目录下,就会有/year=2016/month=10/这个目录了,里面存放就是对应的数据,这个功能可以用来将每天的日志信息分开存放。分桶的意思就是,按照每列值的Hash值进行分类,将相同Hash值的行,分到同一个桶里,这里这样做是为了方便并行计算。

元数据库


  • 什么是元数据?说简单点,元数据就是用来描述数据结构的数据。例如上边提到的,数据的行分隔符、列分隔符、表的名字等等 都属于元数据。
  • 因为一旦修改了表的信息,那么元数据就会跟着变动,所以元数据是一个经常在变动的数据。而HDFS是被设计用来多读取、少写入的一种文件系统,所以,一般情况下,我们都会把元数据库放在其他的传统DBMS中,比如常见的MySQL等。
  • 要用其他数据库,必然涉及到数据库连接的问题。可以用MySQL的JDBC进行连接,还是需要配置hive-site.xml,具体配置可百度。最后要注意的就是,需要把JDBC的jar包给拷贝到HIVE/lib下,以供调用。
查看原文:http://www.wyblog.cn/2016/10/18/%e6%95%b4%e7%90%86%e4%b8%80%e4%b8%8bhive%e6%a6%82%e5%bf%b5/

你可能感兴趣的:(SPARK,hive)