本文分为5部分:
- Hive产生背景&Hive是什么?
- 为什么使用Hive&Hive发展历程
- Hive体系架构及部署架构
- Hive环境搭建
- Hive基本使用
1. Hive产生背景&Hive是什么?
MapReduce编程的不便性:
前面的博文我们介绍了Map Reduce的使用。我们首先要申明一个Map和一个Reduce才能处理作业。代码量大,复杂。而且需要部署jar执行。流程繁琐。
HDFS的文件缺少Schema
关系型数据库里面创建表要指定表名,指定列的名称,列的类型。这些可以理解为Schema。HDFS上是没有Schema的,这样HDFS就无法使用SQL的方式来对分布式系统上的文件进行查询。
Hive是什么?
- 由Facebook开源,最初用于解决海量结构化的日志数据统计问题
- 构建在Hadoop之上的数据仓库
- Hive定义了一种类SQL的语言:HQL
- 通常用于处理离线数据处理(采用MapReduce)
- 底层支持多种不同的执行引擎(Mapreduce,Tez,Spark)
- Hive on Mapreduce
- Hive on Tez
- Hive on Spark
- 支持多种不同的压缩格式,存储格式以及自定义函数
-
看一下官网的介绍:
APACHE HIVE TM
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
Hive数据仓库可以通过SQL方便地读,写,和管理分布式式存储系统上的大数据集。用户可以使用命令行工具或者JDBC驱动来连接Hive
2.为什么使用Hive&Hive发展历程
- 简单、容易上手(提供了类SQL的查询语言)
- 为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
- 统一的元数据管理(可与Preso/Impala/SparkSQL等共享数据)
Hive发展历程
2007.08诞生于Facebook
2013.05-Hive 0.11.0
2013.10-Hive 0.12.0
2014.04-Hive 0.13.0
2014.11-HIve 0.14.0
2015.01-Hive 1.0.0
Hive在Hadoop生态系统中的位置:
3. Hive体系架构及部署架构
最上面的shell,和JDBC相当于连接Hive的两个客户端。然后下面是Driver驱动。SQL Parser负责将SQL语句解析成数据库执行计划等等。再往下是MapReduce,所有的SQL都是翻译成Map,Recude作业来执行的。最下面就是HDFS存储系统。
左边的Metastore 负责元数据管理。它是基于关系型数据库MySQL的。
下面看一下Hive的部署架构:
测试环境HIve可以存放在MySQL ,也可以放在DerBy上。
4 Hive环境搭建
1.Hive下载:http://archive.cloudera.com/cdh5/cdh/5/
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
2.解压:tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/opt/
3.配置
系统环境变量 /etc/profile
export HIVE_HOME=/opt/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
4.安装MySQL
5.配置hive-site.xml
进入/opt/hive-1.1.0-cdh5.7.0/conf/
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/sparksql?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>
6.配置hive-env.sh 中的HADOOP_HOME内容。
7.拷贝MySQL驱动到/opt/hive-1.1.0-cdh5.7.0/lib下。我这里是mysql-connector-java-5.1.27.jar。
8.启动hive:$HIVE_HOME/bin/hive
可以看出hive已经启动成功。我们看下MySQL是否按照hive-site.xml生成sqparksql数据库。
我们看到sparksql中已经有表产生,这些都是由hive自动产生的,来管理相应的元数据。
5.Hive基本使用
创建表:
用hive创建表格式:
`CREATE TABLE table_name
[(col_name data_type [COMMENT col_comment])]`
我们按照这个格式创建一个表:
create table hive_wordcount(context string);
创建成功。下面我们看下MySQL中这个表的内容:
可以看到在hive中创建表以后,MySQL中也对应有相应的表生成。
下面我们加载数据到hive表。
LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename
load data local inpath '/data/hello.txt' into table hive_wordcount;
执行结果:
接下来我们使用sql语句来统计下词频。
select word, count(1) from hive_wordcount lateral view explode(split(context,' ')) wc as word group by word;
//lateral view explode(): 是把每行记录按照指定分隔符进行拆解
运行上述代码,hive ql提交执行以后会生成mr作业,并在yarn上运行。
我这里的环境不知道为啥只要往yarn上提交作业,resourcemanager,nodemanager就会停止运行,jps上就没有进程了。这边这个只做个例子,就不展示结果了。
hive就先介绍到这里。