大数据之Hive概况与部署

Hive产生背景

(1)MapReduce编程不方便:开发、测试都不方便,需求变更
(2)传统关系型数据库人员的需要,数据库存不下了,同时避开数据存储在hdfs时上不得不用MapReduce来进行计算的麻烦,产生既能存储数据又能处理分析数据的工具,就像使用sql一样的方式来处理分析大数据,而不需要再写MapReduce代码就能分析大数据。==> 基于这些场景开发出了Hive,是时代发展的产物。

文件在大数据场景下是存放在HDFS之上的,那么如果你想使用SQL去处理它,需要一个什么前提?

答:结构化、文件映射成表格 ==> Schema(可以理解为表名,库名,表里面有几个字段,字段名,字段类型,表的数据存放在哪里,即元数据信息(metastore)):创建一张表,表中的字段与hdfs上的字段对应上才可以查询。
有了hive以后就可以使用SQL来处理大数据。

Hive是什么?

官网:hive.apache.org
Hive官方定义: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。
由此衍生出一下几种说法:
(1)这是由Facebook开源:最开始是用来解决海量结构化日志的统计数据如:pv、yu。
(2)它是构建在Hadoop之上的数据仓库,由此衍生了一下几个点:Hive也是Yarn,数据可以存放在HDFS,也可以存放在S3,我们写完一个SQL提交给Hive之后,Hive相当于把SQL翻译成MapReduce作业,提交到YARN上面去执行,这就是所谓的构建在Hadoop之上的数据仓库。
(3)Hive定义了一种SQL语言:HQL(类SQL)
hadoop适合离线数据处理,所以hive通常也是用于离线处理
流程:SQL—>Hive—>MapReduce—>YARN
写SQL,把SQL传给Hive,Hive把SQL翻译成MapReduce作业,提交到YARN执行。

同样,有人会问:

MapReduce为什么执行性能低?

MapReduce的执行效率很低是由它的执行模式决定的,所有的Map Task、Reduce Task全部是以进程的方式执行的,要启动进程、销毁进程,即使可以开启JVM重用,但是也是用的时候开启,结束之后关闭,而且JVM成本很高。
随着时代的发展,人们开发出计算处理能力更强大的数据处理工具,如Spark、Tez等,因此有:
Hive on MapReduce
Hive on Spark
Hive on Tez
所以Hive底层所支持的执行引擎有MapReduce、spark、tez。

Hive发展历程

07年8月 由Facebook开源
13年5月 0.11版本 Stinger Phase 1 ORC HiveServer2 (里程碑式的Stinger Phase计划第一阶段)
13年10月 0.12版本 Stinger Phase 2 ORC improvement(里程碑式的Stinger Phase计划第二阶段,性能改进)
14年4月 0.13版本 Stinger Phase 3 Tez and Vectorized query engine(里程碑式的Stinger Phase计划第三阶段:向量化的查询引擎)
14年11月 0.14版本 Stinger.next Phase 1: Cost-based optimizer (CBO)(里程碑式的Stinger Phase第二计划:优化器)

为什么要使用Hlve?

  1. SQL角度:使用简单容易上手,方便写SQL,操作数据方便
  2. Hadoop角度:能操作大规模数据集,可作为大数据处理引擎来使用,内存不够还可以扩展
  3. MetaStore: Pig/Impala/Presto/SparkSQL与Hive一样共享元数据信息,数据迁移平滑,底层共享MetaStore,数据能互通访问,很方便。

Hive部署架构

Hadoop是分布式的,有集群的概念,但是Hive仅仅是一个客户端而已,没有集群的概念,因为它是运行在YARN上面的,假设有10个Hadoop节点,你完全可以在任意一个Hadoop节点上部署Hive,但是多个Hive之间并部署集群的概念,它只是将SQL提交到ResourceManager的数据仓库,不会挂!

MetaStore存储元数据信息,是一个数据库,如果要使用MySQL作为MetaStore,需要搭建一个MySQL环境,如果要使用Hive里面的derby内置作为MetaStore,可以不用使用MySQL。

derby内置bulid-in的致命问题:只能连一个,单用户的,而且不能支持远程连接。所以生产上一定是使用RDBMS作为MetaStore:这种架构可能会存在MySQL挂掉/单点故障的问题,元数据信息没有,MySQL中的表无法与HDFS中的文件关联起来,所以在生产上一定要部署两个MySQL(一主一备)。

Hive与RDBMS的关系
Hive与RDBMS的关系2
支持SQL,基于表操作
实时性:
事务:非常积累,同时成功或失败
分布式:支持
数据量:hive处理的数据量较大
Hive QL和SQL的关系:没有半毛钱关系,语法类似而已,方便数据平滑迁移。

Hive部署

1、下载:http://archive-primary.cloudera.com/cdh5/cdh/5/
在使用CDH版本的时候一定要注意:尾巴对准了
[hadoop@hadoop001 app]$ wget http://archive-primary.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz

2、解压:[hadoop@hadoop001 app]$ tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/

3、配置环境变量: ~/.bash_profile
[hadoop@hadoop001 ~]$ vi ~/.bash_profile

  export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
  export PATH=$ HIVE_HOME/bin:$ PATH

4、生效: [hadoop@hadoop001 ~]$ source ~/.bash_profile
[hadoop@hadoop001 ~]$ echo $HIVE_HOME
/home/hadoop/app/hive-1.1.0-cdh5.7.0

Hive元数据存放在哪个ip地址port端口的数据库,用户名是什么,密码是什么,到现在还没有配置,所以需要配置。

5、Hive配置:$HIVE_HOME/conf
(1)配置hive-env.sh
解压之后hive-env.sh文件并不存在,只有hive-env.sh.template模板文件,所以需要复制重命名一份。
在这里插入图片描述

HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

在这里插入图片描述
(2)配置hive-site.xml文件
解压之后是没有hive-site.xml文件的,需要上传一个
hive-site.xml配置的就是MySQL的相关信息(url、user、passwd)
< property>
< name>javax.jdo.option.ConnectionURL< /name>
< value>jdbc:mysql://localhost:3306/sylvia_hive?createDatabaseIfNotExist=true&amp ;characterEncoding=UTF-8< /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>
在这里插入图片描述
(3)拷贝mysql驱动到$ HIVE_HOME/lib
首先先上传驱动包
[hadoop@hadoop001 software]$ rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring mysql-connector-java-5.1.27.jar…
100% 851 KB 851 KB/sec 00:00:01 0 Errors
[hadoop@hadoop001 software]$ ll
total 852
-rw-r–r-- 1 hadoop hadoop 872300 Nov 4 18:45 mysql-connector-java-5.1.27.jar
[hadoop@hadoop001 software]$ cp mysql-connector-java-5.1.27.jar /home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/(拷贝)
[hadoop@hadoop001 ~]$ cd app/hive-1.1.0-cdh5.7.0
[hadoop@hadoop001 hive-1.1.0-cdh5.7.0]$ cd lib
[hadoop@hadoop001 lib]$ ll
在这里插入图片描述

可能遇到的问题:mysql赋权

(4)看看Hive是否能正常启动
[hadoop@hadoop001 bin]$ ./hive
which: no hbase in (/home/hadoop/app/hive-1.1.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/usr/java/jdk1.7.0_80/bin:/home/hadoop/app/hive-1.1.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/usr/java/jdk1.7.0_80/bin:/usr/java/jdk1.7.0_80/bin:/root/sylviadata/bin:/usr/java/jdk1.8.0_45/bin:/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin)

Logging initialized using configuration in jar:file:/home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/hive-common-1.1.0-cdh5.7.0.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive (default)>
在这里插入图片描述

切换到mysql,可以看到之前在hive-site.xml文件中默认创建的数据库已经创建,并且能正常使用:

在这里插入图片描述
在这里插入图片描述
以上这些表就是所谓的Meta信息。
hive环境部署完毕!

hive快速入门

在关系型数据库里面有数据库和表的概念,同样在Hive里面也有,如Hive里面就有一个默认的数据库default。
hive (default)> show databases;
OK
default
Time taken: 0.625 seconds, Fetched: 1 row(s)
创建表:
hive (default)> create table sylvia_helloworld(id int,name string)
> ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
hive (default)> show tables;
OK
sylvia_helloworld
Time taken: 0.055 seconds, Fetched: 1 row(s)

Hive日志位置

在这里插入图片描述
在这里插入图片描述

Hive.log日志文件默认放在当前用户的tmp目录下

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值