大数据学习笔记(hive简介)

1、Hive是什么

Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据映射为一张数据库表。 Hive本身并不提供存储服务,使用HDFS做数据存储。Hive本身并不提供分布式计算功能,而是基于MapReduce计算框架。Hive本身也并不提供资源调度系统,而是使用Hadoop的Yarn集群调度。Hive运行时,元数据存储在关系型数据库里面。

2、Hive架构

1、用户接口主要有三个:CLI、Client、WUI。其中最常用的是CLI,CLI启动的时候会同时生成一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。
2、Hive将元数据存储在数据库中,如mysql、derby。
3、解释器、编译器、优化器完成HQL查询,语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
4、Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成。

3、Hive三种搭建方式

1)、基于derby的本地模式

此模式使用默认数据库derby。(单用户模式)
在hive-site.xml做如下配置便可

<configuration>  
  
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
</property>  
   
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
   
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
    
</configuration>  

注意:将hive/lib目录下的jline jar包拷贝到hadoop的yarn lib下

2)、基于mysql的本地模式

这种模式需要在本地运行一个mysql服务器。(多用户模式)
这种存储方式需要在本地运行一个mysql服务器,并作如下配置(下面两种使用mysql的方式,需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)。

<configuration>  
    <property>  
      <name>hive.metastore.warehouse.dir</name>  
      <value>/user/hive_remote/warehouse</value>  
    </property>  
       
    <property>  
      <name>hive.metastore.local</name>  
      <value>true</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionURL</name>  
      <value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionDriverName</name>  
      <value>com.mysql.jdbc.Driver</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionUserName</name>  
      <value>hive</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionPassword</name>  
      <value>password</value>  
    </property>  
    </configuration>  
3)、基于mysql的远程模式

这种存储方式需要在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
。(多用户模式)
将hive-site.xml配置文件拆为如下两部分
1)、服务端配置文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>  
  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>root</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>123456</value>  
</property>  
</configuration>  

2)、客户端配置文件
<?xml version="1.0"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
   
<configuration>  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
   
<property>  
  <name>hive.metastore.local</name>  
  <value>false</value>  
</property>  
  
<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://192.168.57.5:9083</value>  
</property>  
  
</configuration>  

启动hive服务端程序
hive --service metastore

客户端直接使用hive命令即可
root@my188:~$ hive

4、Hive表的种类

1)、内部表(受控表)
完全被Hive控制,删除内部表的时候,元数据和源数据都会一同被删除。

2)、外部表
不是完全受Hive控制,源数据可以在任何的目录下,删除外部表,源数据不会被删除,只是删除元数据。

3)、临时表
生命周期是一次会话,会话结束后自动删除该表,保存在HDFS的tmp目录下,主要用于测试。

4)、分区表
将源数据分到不同的Hive工作目录中存储,一个分区对应一个目录,防止暴力扫描全表导致效率下降。分区表又可以细分为静态分区表和动态分区表。

①静态分区表
静态分区表中,一个文件数据只能导入到某一个分区中,并且分区是用户指定的,这种方式不够灵活,业务场景比较局限。
加载数据的方式有五种:可以使用insert单条插入的方式、load批量插入的方式、查询已有表的数据插入到新表的方式、创建空分区后向HDFS目录下上传数据的方式和创建分区并且指定数据位置的方式来记载数据。

②动态分区表
动态分区可以根据数据本身的特征自动来划分分区,比如我们可以指定按照数据中的年龄、性别来动态分区。
我们之前使用load data往分区表导入数据的时候,都是要指定partition分区的,这样他才会知道将数据上传到HDFS的哪一个分区。但是如果我们还是采用load data指定分区的话,那就不是动态分区表,还依然是静态分区表。所以得采用 from insert的方式插入数据。

5)、分桶表
按照数据的hash值与桶的个数取模,根据取模得到的值进行分桶。这种方式有利于join的合并与随机抽样。对于hive中每一个表、分区都可以进一步进行分桶。

5、视图

视图的概念:视图不存储数据,只存储计算该数据的逻辑。视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询。
  视图的特点:
    1)、不支持物化视图。
    2)、只能查询,不能做加载数据操作。
    3)、视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询。
    4)、view定义中若包含了ORDER BY/LIMIT语句,当查询视图时也进行ORDER BY/LIMIT语句操作,view当中定义的优先级更高。
    5)、view支持迭代视图。
    6)、一旦创建成功,无法修改。

6、索引

索引就类似目录,来优化查询性能。
  创建索引首先要创建索引库,用于存放索引(索引库中只是保存一些元数据,比如 对哪个字段创建索引,对哪个表创建索引等):create index t2_index on table psnbucket_partition(age) as ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’ with deferred rebuild in table t2_index_table;
  创建好索引库之后调用alter index t2_index on psnbucket_partition rebuild;。这一步是真正的创建索引信息,并且存储到索引库中,若数据库有新增数据,也可以使用以上语句重建索引。
  创建成功之后可以对索引进行操作了,如查询索引:show index on psnbucket_partition;和删除索引:drop index t2_index on psnbucket_partition;,只不过删除索引的同时 索引库也会被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值