Hive产生背景
- MapReduce编程的不便性
- 传统RDBMS人员的需要
HDFS上的文件并没有Schema的概念
Hive是什么
由FaceBook开源,用于解决海量结构化日志的数据统计问题。
构建在Hadoop之上的数据仓库。
Hive提供的SQL查询语言:HQL
底层支持多种不同的执行引擎:MR/Tez/Spark
为什么要使用Hive
容易、简单上手
为超大数据集设计的计算/扩展能力
统一的元数据管理:Hive数据存放在HDFS中,元数据是记录数据的数据。
Hive架构

- Client提交SQL到hive中,表信息(元数据)存放在hive中自带引擎(Derby)。通常情况下我们存放在Mysql中。Derby只能进行但客户端操作,就是所谓的单session,即使在测试环境中,也不推荐使用Derby。我们往往使用Mysql存放元数据信息。而mysql一旦挂掉之后,丢掉元数据信息,虽然数据在HDFS中,但是没有schema信息,数据就无法使用了,因此需要做主备。
- Hive翻译SQL成MapReduce提交到集群中运行,也就是提交到RM中
- 在Hadoop集群中,有很多节点,但是Hive是一个客户端而已,并不涉及到集群的概念,也就是不需要Hive集群就可以。
Hive与RDBMS的区别
虽然HiveSQL 与SQL非常类似,但是他们有本质区别的。虽然他们长得非常相似,但是他们之间没有任何关系
Hive部署
- 下载
hive-1.1.0-cdh5.15.1 - 将
hive-1.1.0-cdh5.15.1解压到~/app/目录下 - 添加
$HIVE_HOME到~/.bashrc环境变量 - 修改配置
修改配置文件hive-env.sh,内容如下:HADOOP_HOME=/home/iie4bu/app/hadoop-2.6.0-cdh5.15.1
修改配置文件hive-site.xml,内容如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://swarm-manager:3306/hadoop_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>
</configuration>
在jdbc:mysql://swarm-manager:3306/hadoop_hive?createDatabaseIfNotExist=true表示会生成一个hadoop_hive库
5. 将mysql-connector-java-5.1.35.jar拷贝到hive-1.1.0-cdh5.15.1/lib路径下。
6. 前提是要安装一个数据库。
7. 启动hive:在hive-1.1.0-cdh5.15.1/bin下执行hive

创建数据库
在hive中创建一个数据库,在mysql中查看数据库:

可以看到生成了一个新的mysql数据库hadoop_hive:

查看其中的DBS表:

其中第一条数据是默认的一条数据,第二条是我们创建的一条。
查看HDFS中的内容:

创建数据表
hive> create table helloworld(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

导入数据
创建数据文件:
1 zhangsan
2 lisi
3 wangwu

查看导入的数据:

执行MapReduce
统计一下这个helloworld表的数据:

可以看到开始执行一个MapReduce,在YARN中查看,有一个正在运行的MR:

MapReduce运行成功之后:


因此可以直接通过SQL执行MAPREDUCE。
1874

被折叠的 条评论
为什么被折叠?



