1、理论基础
1、什么是Hive?
Hive是一个构建在Hadoop之上的数据仓库,提供类似sql的查询语句HiveQL对数据进行分析处理。
Hive将HiveQL语句转换一系列成MapReduce作业并执行。
目前,Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两种分布式计算引擎。
Hive3.0中MR已标记为过时。
常用于离线批处理。
2、hive产生背景
mapreduce编程繁琐性:
一个标准的mapreduce程序包括Mapper、Reducer、Driver。
写完mr程序后还要打包成jar包丢到集群上运行。
更改需求之后可能需要更改大量代码,重新打包上传,十分不便。
使用SQL对hdfs上的数据进行统计分析显然要好过写代码,降低了数据分析的门槛。
hdfs上的文件没有schma(表结构)的概念,而hive可以对hdfs上的数据进行结构化处理。
hive的优点:
弹性易用
方便扩展
统一的元数据管理
3、RDBMS和hive的比较。
hive处理的数据较大,PB级数据都行。RDBMS处理数据较少。
hive实时性较差,一个hive的作业跑八个小时都可能跑不完。
RDBMS也支持分布式、但节点数较少,构建在专用的机器上,成本昂贵。
hive也支持事务(0.14版本开始支持),但离线批处理要事务干嘛?
Hive支持统一的元数据管理:
对于Hive/Impala/Spark SQL/Presto,在其中之一上创建表,其他任意都可以访问。
4、HiveServer2:
hiveserver是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并返回结果。
但HiveServer无法处理来自多个客户端的并发请求。
所以HiveServer2对HiveServer进行了重写,来解决这些问题。
执行“hiveserver2”即可启动该服务,该服务是一个阻塞服务。
5、执行“hive”或者“hive --service cli”可以进入hive的shell客户端。
0.14版本后,有一个基于hiveserver2的客户端工具Beeline出现,可以用来替代传统的hive客户端。
Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。
启动beeline需要先进行hadoop的配置(所有节点):
vi core-site.xml
key:hadoop.proxyuser.root.groups value:*
key:hadoop.proxyuser.root.hosts value:*
重启所有hadoop集群
或者执行:
bin/hdfs dfsadmin -fs hdfs://节点:8020 -refreshSuperUserGroupsConfiguration(hadoop所有节点)
先启动hiveserver2
启动beeline
连接hiveserver2:
!connect jdbc:hive2://Linux005:10000 root 123456(这是需要个用户名密码,正确不正确无所谓)
beeline中命令加!
8、hive的四种连接方式: