Hive 概述 体系架构及环境搭建

9 篇文章 0 订阅

一、Hive 概述及体系架构

1.Hive 是什么

(1).由Facebook开源,最初用于解决海量结构化的日志数据统计问题 (2).是一个构建在Hadoop之上的数据仓库 (3).Hive定义了一种类似于SQL查询语言:HQL(非常类似于MySQL中的SQL语句,同时做了扩展) (4).通常用于离线数据处理(采用MapReduce) (5).可以认为是一个HQL=>MapReduce的语言翻译器 (6).底层支持多种不同的执行引擎(默认是MapReduce) (7).支持不同的压缩格式、存储格式以及自定义函数 (8).Hive中的数据库及表就是HDFS中的目录/文件夹,数据是文件,元数据信息可以存储在任意的一个关系型数据库中(比如:MySQL、SqlServer、Oracle等,默认是Derby),数据存储在HDFS中

2.Hive 的体系架构

这里写图片描述

上图为Hive的体系架构图,主要由如下几部分组成

用户接口:Client
Cli(Command-line shell),及shell 命令行,hive1的客户端,hive server2 提供了新的命令beeline
JDBC/ODBC,通过Java来访问hive,与传统数据库JDBC的方式类型,比如我们使用Java通过JDBC访问操作MySQL
WebUI,浏览器中访问hive

元数据:metastore
Hive 将元数据存储在数据库中(metastore),数据库可以为关系型数据库中的任意一种,元数据包括:表名、表所属数据库、表的拥有者、列/分区字段、表的类型、表数据所在目录。

驱动器:driver
包含:解析器、编译器、优化器、执行器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成,生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行

Hadoop
使用hdfs进行数据存储,运行在yarn上,使用mapreduce进行计算

3.Hive 部署架构

1.测试环境

这里写图片描述

Hive 是构建在Hadoop之上的一个数据仓库,实际工作中,我们的Hadoop是肯定是集群,但Hive我们只需要装在一台服务上即可,元数据默认存放在Derby中,Derby是一个单用户,使用起来不是很方便,建议我们自己装一个mysql数据库,专门用于存放hive的元数据信息。

2.生产环境

这里写图片描述

生产环境中与测试环境不相同的之处就是mysql用的是主备,当一台mysql服务挂掉了,通过某种机制它会自动切换到另一台,其实这样做的好处就是为了容错,保证高可用,防止hive的元数据丢失

4.与关系型数据库的区别

这里写图片描述

hive的优缺点
优点:
容易上手、易用,比用MapReduce编程简单很多
数据离线处理,比如日志分析,海量数据结构化分析
底层基于hadoop,易于扩展,支持自定义函数UDF

缺点:
Hive执行延迟比较高,不适合实时查询
Hive优势在于处理大数据集,对于小数据集没有优势

二、环境搭建

Hive中的元数据默认存放在Derby中,Derby是单用户的,使用起来不方便,我们使用MySQL来存储Hive的元数据信息,元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。

1.安装mysql

直接使用yum -y install 命令安装mysql是无法安装mysql的高级版本, 需要先安装带有可用的mysql5系列社区版资源的rpm包,去mysql的官网下载即可

MySQL官网:https://dev.mysql.com/downloads/file/?id=470281
MySQL安装教程官网:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

这里写图片描述

下载完成后使用xshell上传到linux,输入如下命令安装

$ sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

安装完成后,查看mysql安装版本列表

$ yum repolist all | grep mysql 

这里写图片描述

安装mysql,只需要安装mysql-community-server即可,yum会自动检测安装依赖包

$ sudo yum -y install mysql-community-server	

安装完成后,启动mysql

$ sudo systemctl start mysqld

mysql安装完成后会有一个初始的密码,输入如下命令查看

$ sudo grep 'temporary password' /var/log/mysqld.log	

这里写图片描述

使用刚刚查看到的密码登录

$ mysql -uroot -p

这里写图片描述

修改密码

注意,该版本的MySQL对用户密码安全性有所加强,所以设置的密码必须包含至少一个数字、一个大写字母、一个小写字母和一个特殊符号的组合,密码长度至少8个字符。

ALTER USER 'root'@'localhost' IDENTIFIED BY '输入你的密码';

修改完成后,输入exit退出shell界面,使用新密码登录即可

2.安装hive

从官网下载hive的安装包,官网地址:http://apache.fayea.com/hive/

笔者下载版本为2.3.0,下载完成后上传到linux,输入如下命令解压

$ tar -zvxf apache-hive-2.3.0-bin.tar.gz

配置hive-site.xml文件

进入hive的conf目录下,拷贝文件hive-default.xml.template命名为hive-site.xml

$ cd /home/hadoop/hive
$ cp hive-default.xml.template hive-site.xml

这里写图片描述

创建hive的临时目录

$ mkdir tmp

hive-site.xml配置如下,更多请参考hive 官网

<configuration>
	<property>
		<name>hive.exec.local.scratchdir</name>
		<value>/home/hadoop/hive/tmp/hive</value>
	</property>
	  
	<property>
		<name>hive.downloaded.resources.dir</name>
		<value>/home/hadoop/hive/tmp/${hive.session.id}_resources</value>
		<description>hive下载资源的存储目录</description>
	</property>

	<property>
		<name>hive.querylog.location</name>
		<value>/home/hadoop/hive/tmp/hive</value>
		<description>hive结构日志存储目录</description>
	</property>
	
	<property>
		<name>hive.server2.logging.operation.log.location</name>
		<value>/home/hadoop/hive/tmp/hive/operation_logs</value>
		<description>hive的操作日志目录</description>
	</property>
	
	<property>
		<name>hive.exec.scratchdir</name>
		<value>/tmp/hive</value>
		<description>hive用于存储不同阶段map/reduce的执行计划及存储中间输出结果的目录</description>
	</property>	
	
	<property>
		<name>hive.scratch.dir.permission</name>
		<value>700</value>
		<description>hive访问hadoop文件权限设置</description>
	</property>
	
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>P@ssw0rd</value>
		<description>元数据存储的数据库的密码</description>
	</property>
	
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
		<description>元数据存储数据库的用户名</description>
	</property>
  
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost:3306/hive_metadata?createDatabaseIfNotExist=true&amp;characterEncoding=utf8</value>
		<description>元数据存储的数据库的url</description>
	</property>
	
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>元数据存储的数据库的驱动</description>
	</property>
	
	<property>
		<name>datanucleus.schema.autoCreateAll</name>
		<value>true</value>
		<description>开启自动创建(生产环境中不推荐使用)</description>
	</property>
	
	<property>
		<name>hive.metastore.schema.verification</name>
		<value>false</value>
	</property>
	
	<!-- 配置hive的事务 start -->
	<property>
		<name>hive.optimize.sort.dynamic.partition</name>
		<value>false</value>
	</property>
	<property>
		<name>hive.support.concurrency</name>
		<value>true</value>
	</property>
	<property>
		<name>hive.enforce.bucketing</name>
		<value>true</value>
	</property>
	<property>
		<name>hive.exec.dynamic.partition.mode</name>
		<value>nonstrict</value>
	</property>
	<property>
		<name>hive.txn.manager</name>
		<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
	</property>
	<property>
		<name>hive.compactor.initiator.on</name>
		<value>true</value>
	</property>
	<property>
		<name>hive.compactor.worker.threads</name>
		<value>1</value>
	</property>
	<property>
		<name>hive.in.test</name>
		<value>true</value>
	</property>
	<!-- 配置hive的事务 end -->
	
	<property>
		<name>hive.cli.print.current.db</name>
		<value>true</value>
	</property>
</configuration>

注意:在启动前需要将mysql的驱动包复制到hive安装目录的lib目录下,否则在启动时,会报如下错误

DatastoreDriverNotFoundException: The specified datastore
driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH

笔者安装的hive版本为2.3.0,既支持hive1,也支持hive2,hive1和2的启动是不一样的,分别如下

hive1
$ schematool -dbType mysql -initSchema	# 第一次启动时执行,进行初始化
$ hive

hive2
$ hiveserver2
$ beeline -u jdbc:hive2://

启动成功后登录mysql,可以看到创建了一个数据库hive_metadata(在hive-site.xml参数javax.jdo.option.ConnectionURL中配置)

这里写图片描述

查看数据库hive_metadata

这里写图片描述

hive启动成功后,查看hive的临时目录下会生成如下文件

$ cd /home/hadoop/hive/tmp/

这里写图片描述

输入hive(hive1)进入客户端,查看所有数据库,默认的数据库default

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值