大数据系列|Hive架构和工作原理

Posted 程序媛那点事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据系列|Hive架构和工作原理相关的知识,希望对你有一定的参考价值。

一、Hive 架构

下面是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将元数据存储在RDBMS中,有三种模式可以连接到数据库:
1、元数据库内嵌模式:此模式连接到一个In-memory 的数据库Derby,一般用于Unit Test。

大数据系列|Hive架构和工作原理

2、元数据库mysql模式:通过网络连接到一个数据库中,是最经常使用到的模式。

大数据系列|Hive架构和工作原理

3、MetaStoreServe访问元数据库模式:用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。

大数据系列|Hive架构和工作原理

对于数据存储,Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。Hive中包含以下数据模型:Table内部表,External Table外部表,Partition分区,Bucket桶。Hive默认可以直接加载文本文件,还支持sequence file 、RCFile。

4、三种模式汇总:

大数据系列|Hive架构和工作原理

三、Hive 工作原理

Hive 工作原理如下图所示。

大数据系列|Hive架构和工作原理

Hive构建在Hadoop之上
1、HQL中对查询语句的解释、优化、生成查询计划是由Hive完成的
2、所有的数据都是存储在Hadoop中
3、查询计划被转化为MapReduce任务,在Hadoop中执行(有些查询没有MR任务,如:select * from table)
4、Hadoop和Hive都是用UTF-8编码的
Hive编译器的组成:

大数据系列|Hive架构和工作原理

Hive编译流程如下

大数据系列|Hive架构和工作原理

四、Hive安装和部署

1、解压缩 hive 安装包

tar zxvf apache-hive-2.1.1-bin.tar.gz

2、安装并启动mysql

sudo yum install mysql-server
sudo service mysqld start

3、修改 mysql 密码

mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user ='root';

4、给root用户访问授权

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'newpass'
WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

5、建立链接,该命令在 hive 安装目录的 lib 目录下建立软链接,指向/usr/share/java/mysql-connector-java.jar

ln -s /usr/share/java/mysql-connector-java.jar /home/bigdata/software/apache-
hive-2.1.1-bin/lib/mysql-connector-java.jar

6、配置环境变量

vim ~/.bash_profile
export HIVE_HOME=/home/bigdata/software/apache-hive-2.1.1-bin
export PATH=$HIVE_HOME/bin:$PATH

生效环境变量

source ~/.bash_profile

7、修改hadoop的配置文件core-site.xml

vim /usr/local/hadoop/etc/hadoop/core-site.xml

增加如下:

<property>
<name>hadoop.proxyuser.bigdata.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.bigdata.hosts</name>
<value>*</value>
</property>

8、修改hive的配置文件hive-site.xml

vim /home/bigdata/software/apache-hive-2.1.1-bin/conf/hive-site.xml

增加如下:

<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop:9083</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop/metastore?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>root</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/warehouse</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop:9000</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
</property>
<property>
<name>datanucleus.schema.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>beeline.hs2.connection.user</name>
<value>bigdata</value>
</property>
<property>
<name>beeline.hs2.connection.password</name>
<value>bigdata</value>
</property>
</configuration>

注释:

  • hive.metastore.uris 中的“hadoop“含义为 metastore 所在的机器(启动metastore 的方法见下一节)

  • javax.jdo.option.ConnectionURL 中的“hadoop”为 mysql 安装机器的hostname

  • javax.jdo.option.ConnectionUserName 和javax.jdo.option.ConnectionPassword
    分别为 mysql 的访问用户和密码

  • beeline.hs2.connection.user 和 beeline.hs2.connection.password 是 beeline 方式
    访问的用户名和密码,可任意指定,但在 beeline 访问时要写入你指定的这个
    (具体参考最后一部分)

9、启动hive metastore

nohup hive  --service metastore >>/home/bigdata/software/apache-hive-2.1.1-bin/metastore.log 2>&1 &

10、启动 hiveserver2

nohup hive  --service hiveserver2 >>/home/bigdata/software/apache-hive-2.1.1-bin/hiveserver.log 2>&1 &

11、hive 常见两种访问方式

  • hive

  • beeline
    !connect jdbc:hive2://bigdata:10000/default bigdata bigdata


后记:

码完了。
汇总一下下:

一 Hive 架构
二 元数据存储

  • 1、元数据库内嵌模式

  • 2、元数据库mysql模式

  • 3、MetaStoreServer访问元数据库模式

  • 4、三种模式汇总

三 Hive工作原理

  • 1、编译器/优化器/执行器

  • 2、hive编译器工作流程

四 Hive安装和部署

  • 1、解压缩 hive 安装包

  • 2、安装并启动mysql

  • 3、修改 mysql 密码

  • 4、给root用户访问授权

  • 5、建立mysql-connector-java.jar的链接

  • 6、配置环境变量HIVE_HOME

  • 7、修改hadoop的配置文件core-site.xml

  • 8、修改hive的配置文件 hive-site.xml

  • 9、启动hive metastore

  • 10、启动 hiveserver2

  • 11、hive 常见两种访问方式


——END——



关于程序媛的点滴,技术/职场/生活。

欢迎投稿~





以上是关于大数据系列|Hive架构和工作原理的主要内容,如果未能解决你的问题,请参考以下文章

大数据必知必会 | Hive架构设计和原理

大数据必知必会 | Hive架构设计和原理

走进大数据 | 大数据仓库Hive原理与架构

深入学习Hive应用场景及架构原理

深入学习Hive应用场景及架构原理

数据湖07:Apache Hudi原理和功能概述