目录
本篇内容
1.hive简介
2.hive基本执行原理
3.hive的安装及配置
4.远程连接
Hive简介
什么是hive
hive是基于Hadoop的一个数据仓库工具,并不是一个数据库。用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。
Hive并不是一个关系型数据库,只是一个工具,提供sql终端、解析sql、转化mr程序并优化的一种工具!
说白了,hive就是一个工具,什么工具呢?它能够将我们写的SQL 转换成mapreduce程序,不必人为的去进行编写程序,大大简化开发流程。
hive概述
Hive可以使用SQL来促进对已经存在在分布式设备中的数据进行读,写和管理等操作!
Hive在使用时,需要对已经存储的数据进行结构的投影(映射)
Hive提供了一个命令行和JDBC的方式,让用户可以连接到hive!
注意:Hive只能分析结构化的数据!
Hive在Hadoop之上,使用hive的前提是先要安装HadoopHive要分析的数据存储在HDFS,hive为数据创建的表结构(schema),存储在RDMS(relevant database manage system 关系型数据库管理系统,比如mysql)
hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。
因此,hive 并不适合那些需要高实性的应用,例如,联机事务处理(OLTP)。hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,hive 将用户的hiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。hive 并非为联机事务处理而设计,hive 并不提供实时的查询和基于行级的数据更新操作。hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
扩展:OLTP:联机事务处理:
OLTP英文全称:On-Line Transaction Processing。联机事务处理过程,也叫面向交易的处理过程。其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一,换句话就是说实时系统,快速响应。一般应用场景:飞机订票、银行出纳、股票交易、超市销售、饭店前后管理等。
hive特点
优点
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
- 避免了去写MapReduce,减少开发人员的学习成本。
- Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。(历史数据) 侧重点在数据的分析上,不追求分析的效率!
- Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
缺点
1.Hive的HQL表达能力有限
(1)迭代式算法无法表达 递归算法
(2)数据挖掘方面不擅长(数据挖掘和算法 机器学习 )
2.Hive的效率比较低
(1)Hive自动生成的MapReduce作业,通常情况下不够智能化
(2)Hive调优比较困难,粒度较粗(快)
应用场景
对时效性要求不高的数据分析 , 报表分析等
hive的基本执行原理
hive的数据存储
1)hive要分析的数据是存储在HDFS上
hive中的库、表在hdfs中的就是一个目录。
hive中的数据,是存在在表目录中的文件!
2)在hive中,存储的数据必须是结构化的数据。而且
这个数据的格式要和表的属性紧密相关!
表在创建时,有分隔符属性,这个分隔符属性,代表在执行MR程序时,使用哪个分隔符去分割每行中的字段。3)hive中的元数据(schema,表的映射关系、位置等)存储在关系型数据库 ,元数据的位置设置在mysql中。
可以在hive中建表
表:有表名, 表字段 ,字段数据类型, 表管理的数据的位置(HDFS上的结构化数据)
元数据: 记录表结构的数据 存储在mysql中
表的映射数据: 表的映射数据存储在HDFS中
执行SELECT * FROM TB_NAME 的大致流程是
1 加载元数据信息 ,获取表结构
2 元数据中获取表映射数据在HDFS中的位置
3 将SQL语句交给SQL解析引擎
4 Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等
5 操作符 Operator 是 Hive 的最小处理单元
6 每个操作符代表一个 HDFS 操作或者 MapReduce 作业
7 Hive 通过 ExecMapper 和 ExecReducer 执行 MapReduce 程序,执行模式有本地模式和分 布式两种模式
8 编译器进行编译
9 优化器进行优化HQL语句
10 执行
简单一句话 , 将HQL语句转换成MR程序分布式调度执行
Hive的安装及配置
准备工作
mysql的安装及允许远程连接:
安装mysql
要注意,开启远程连接权限a) 首先,在mysql安装的机器上,用mysql命令行客户端登录 mysql -uroot -p 输入密码
- set global validate_password_policy=0;
- set global validate_password_length=1; 这个两个设置以后 密码很简单不会报错
- ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123’; 把修改密码为123
c) 授权完成后,测试一下是否成功:在windows上用Navicat连接一下看是否能成功!
如果连接正常,表示一切ok
开始安装
1.开启hdfs和yarn 【因为hive数据存储在hdfs上,需要hdfs;hive生成的sql需要转化为mr程序,提交到yarn上运行,所以,这两个进程一定要有】
start-all.sh
2.上传hive包
解压 tar -zxvf jar包名
上传mysql的驱动包到hive的lib目录下3.配置hive的环境变量 conf目录下
mv hive-env.sh.template hive-env.sh
vi hive-3.1.2/conf/hive-env.sh
export HADOOP_HOME=/opt/apps/hadoop-3.1.1/
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf4.添加配置信息 conf目录下
vi hive-site.xml
<configuration> <!-- 记录HIve中的元数据信息 记录在mysql中 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <!-- mysql的用户名和密码 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> </property> <property> <name>hive.querylog.location</name> <value>/user/hive/log</value> </property> <!-- 客户端远程连接的端口 --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>0.0.0.0</value> </property> <property> <name>hive.server2.webui.host</name> <value>0.0.0.0</value> </property> <!-- hive服务的页面的端口 --> <property> <name>hive.server2.webui.port</name> <value>10002</value> </property> <property> <name>hive.server2.long.polling.timeout</name> <value>5000</value> </property> <property> <name>hive.server2.enable.doAs</name> <value>true</value> </property> <property> <name>datanucleus.autoCreateSchema</name> <value>false</value> </property> <property> <name>datanucleus.fixedDatastore</name> <value>true</value> </property> <property> <name>hive.execution.engine</name> <value>mr</value> </property> <!-- 添加元数据服务配置 --> <property> <name>hive.metastore.local</name> <value>false</value> <description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description> </property> <property> <name>hive.metastore.uris</name> <value>thrift://linux01:9083</value> </property> </configuration>
5.修改hadoop的配置信息
vi /opt/apps/hadoop-3.1.1/etc/hadoop/core-site.xml
<property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>
6.重启hadoop
stop-all.sh
start-all.sh
7.配置环境变量
vi /etc/profile8. 初始化
bin/schematool -initSchema -dbType mysql
9. 开启元数据服务
hive --service metastore 前台启动
hive --service metastore & 后台启动10.查看hive服务是否启动
netstat -nltp | grep 9083
远程连接
两种连接方式
java api连接hive (不提倡,麻烦)
命令行连接hive:
本地客户端shell连接
在安装了hive的那台机器上,直接输入hive(如果报命令找不到,说明你环境变量没配好)
进入到hive的工作台 输入show databases;
beeline工具远程连接
beeline连接工具,将查询结果 较好的美化展示,很好用,建议使用
1)后台启动hiveserver2 服务 可以查看 进程 netstat -nltp |grep 10000 出现进程,说明启动成功 建议新开一个linux的session
2)输入beeline(需要先退出上一步启动的hive的工作台 ctrl+c)
3)输入命令:!connect jdbc:hive2://linux01:10000
输入用户名 root 密码没有设置
4)显示数据库中所有的表
更多学习、面试资料尽在微信公众号:Hadoop大数据开发