0. 背景
Apache Hive是基于Hadoop构建的一套数据仓库分析系统(数仓)。
它是一个数据仓库工具,用来进行数据ETL(提取、转化、加载)。
Hive提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据。
它具备如下一些主要功能:
-
可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能
-
可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL(HQL),使不熟悉mapreduce的用户可以很方便地利用SQL语言查询,汇总和分析数据。
-
mapreduce开发人员可以把自己写的mapper和reducer作为插件来支持hive做更复杂的数据分析
注意: 由于Hive是构建在Hadoop基础上的,因此,必须先安装Hadoop,再安装对应版本的Hive。
(3.x的Hive对应3.x.y版本的Hadoop;2.x的Hive对应2.x.ya版本的Hadoop)
1. 为什么要使用Hive
有人说既然Hive是提供SQL查询的,而且又是底层基于MapReduce的。
为什么那么麻烦呢?关系型不就好了嘛!
其实还是在于一个数据量的问题。
在传统的RDBMS里,不管是Oracle, Sql Server, Mysql等,如果单表的数据达到千万条时,不管你采用何种优化,都会变得比原来要慢很多,而且性能很难再有所提升。
Hadoop可以存储PB级别的数据,处理数据的过程使用MapReduce模型,存储和计算能力均可平滑扩展。
附录(数据单位):
1Byte = 8 Bit
1 KB = 1,024 Bytes
1 MB = 1,024 KB = 1,048,576 Bytes
1 GB = 1,024 MB = 1,048,576 KB = 1,073,741,824 Bytes
1 TB = 1,024 GB = 1,048,576 MB = 1,073,741,824 KB = 1,099,511,627,776 Bytes
1 PB = 1,024 TB = 1,048,576 GB =1,125,899,906,842,624 Bytes
1 EB = 1,024 PB = 1,048,576 TB = 1,152,921,504,606,846,976 Bytes
1 ZB = 1,024 EB = 1,180,591,620,717,411,303,424 Bytes
1 YB = 1,024 ZB = 1,208,925,819,614,629,174,706,176 Bytes
但是MapReduce有个最大的缺点就是,数据的处理用户都要面对Java代码。
这样不是很方便。Facebook开发了Hive,后来贡献给了Apache。
Hive旨在让用户以SQL的方式来操作HDFS,但是其底层还是基于MapReduce的。
Hive就像Hadoop和用户之前的中间件。
2. Hive的安装
-
官网下载最新的Hive 3.x解压到某个目录
-
配置环境变量
# hive
export HIVE_HOME=/Users/kg/soft/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
-
查看版本号
hive --version -
修改hive-site.xml
进入到hive的conf目录进行配置
发现没有hive-site.xml,那么只需要通过cp hive-default.xml.template hive-site.xml复制一个即可
编辑hive-site.xml
原始文件内容如下:
image.png
在property上添加内容如下:
image.png
代码如下:
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>your password</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>mysql
<value>jdbc:mysql://localhost:3306/hive?vertifyServerCertificate=false&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
并将以下内容删除:
image.png image.png
-
将mysql-connector-java_xxx.jar拷贝到hive/lib目录下面
-
由于hive要依赖于mysql,所以要把mysql服务启动
3. 验证安装(建库和表)
使用mysql -u root -pyour password命令进入到mysql中
在mysql shell中输入:
create database hive;
创建hive数据库
image.png
此时hive数据库是空的
然后在终端执行: schematool -dbType mysql -initSchema,如下图所示:
image.png
此时在mysql数据库中再次执行show tables;即可显示hive初始化信息,如下图所示:
image.png
在hive安装目录中创建一个tmp目录
记录目录为:/hive安装目录/tmp,并修改hive-site.xml文件,将${system:java.io.tmpdir} 全部替换成/hive安装目录/tmp,将{system:user.name} 替换成{user.name}
然后再次执行hive进入到hive shell
命令行通过hadoop fs -lsr /查看hdfs情况
image.png
然后在hive shell界面新建一个数据库
create database hive_1;
再次查看hdfs目录情况就会发现多了一个hive_1.db的文件
在mysql中查看
select *
from DBS;
image.png
新建一张表
use hive_1;
create table hive_01(id int, name string);
select *
from TBLS;
image.png
访问http://localhost:50070,查看HDFS数据
网友评论