Hive简介

什么是Hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive的架构
构建数据仓库的工具Hive
(1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。
(2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

搭建Hive的方法

1.基于derby的本地方式
derby与hive工具在同一个节点,缺点:不支持多个用户同时链接。
2.基于mysql的本地模式
(1)运行hadoop集群
(2)安装mysql数据库
yum install mysql-server -y
(3)配置环境变量:
HADOOP_HOME=
HIVE_HOME=
(4)修改KaTeX parse error: Expected 'EOF', got '\lib' at position 12: HADOOP_HOME\̲l̲i̲b̲目录下的jline-*.jar…HIVE_HOME\lib下的jline-2.12.jar
(5)拷贝mysql驱动包到$HIVE_HOME\lib目录下
(6)修改hive-site.xml

<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_meta?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>  

(7)修改mysql权限并创建hive_meta数据库:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
flush privileges;

进入mysql.user表删除多余会对权限造成影响的数据
添加用户和数据库:

CREATE USER 'hive'@'%' IDENTIFIED BY '123';
CREATE DATABASE hive_meta;
grant all privileges on hive_meta.* to [email protected]"%" identified by '123';
flush privileges;

3.基于mysql的远程模式
(1)服务端配置文件

<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> 

(2)客户端配置文件

<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>

(3)启动hive服务端程序

hive --service metastore >> /tmp/meta.log 2>&1 &

(4)客户端直接使用hive命令即可

Hive表种类

  • 内部表(受控表)
    完全被Hive控制,删除内部表,元数据、源数据一同被删除
  • 临时表
    生命周期是一次会话,主要用于测试
  • 外部表
    不是完全受Hive控制,源数据可以在任何的目录下,删除外部表,源数据不会被删除,只是删除元数据
  • 分区表
    将源数据分到不同的Hive工作目录中存储,一个分区对应一个目录,防止暴力扫描全表
  • 分桶表
    将大文件拆分成小文件来存储,提升join以及抽样的效率

相关文章: