Hive 官网 https://hive.apache.org/
Hive 官网Wiki文档 https://cwiki.apache.org/confluence/display/Hive/
Hive GitHub源码地址 https://github.com/apache/hive
Apache Hive™数据仓库软件使用SQL对分布式存储中的大型数据集进行读写和管理,结构可以映射到已存储的数据上,也提供命令行工具和JDBC驱动连接用户到Hive。目前最新版本为3.1.3
Hive由Facebook开源用于解决海量结构化日志的数据统计,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并且提供类SQL的查询功能,这套Hive SQL简称HQL。Hive仅仅是一个工具,本身不存储数据只提供一种管理方式,同时也不涉及分布式概念;Hive不是为在线事务处理(OLTP)工作负载而设计的,它最适合用于对数据仓库进行统计分析。
Hive本质就是MapReduce,将类SQL(HQL)转换成MapReduce程序,减少编写MapReduce的复杂度,MapReduce对用户来说虽然灵活,但需要用户自己实现功能接口,不像Spark高层级应用提供各种算子操作。hive支持了三种底层计算引擎包括mr、tez、spark,默认计算引擎mr,用户可以指定具体使用哪个底层计算引擎(set hive.execution.engine=mr/tez/spark),当前前提得先完成Spark整合或安装tez。
Hive数据存储没有单一的“Hive格式”。Hive内置了逗号和制表符分隔值(CSV/TSV)文本文件、Apache Parquet™、Apache ORC™和其他格式的连接器。用户可以为Hive扩展其他格式的连接器。
Hive支持文件格式和压缩:RCFile、Avro、ORC、Parquet、Compression、 LZO。
Hive的组件包括HCatalog和WebHCat
下图包含了Hive的主要组件及其与Hadoop的交互。Hive的主要组件有:
编译器对hql语句进⾏词法、语法、语义的编译(需要跟元数据关联),编译完成后会⽣成⼀个执⾏计划。hive上就是编译成mapreduce的job
将执⾏计划进⾏优化,减少不必要的列、使⽤分区、使⽤索引等,优化job。
Hive的安装方式或者说是MetaStore安装 分为三种部署模式:内嵌模式、本地模式以及远程模式。Hive自动监测是否有Hadoop的环境变量。
# 下载hive最新版本3.1.3
wget --no-check-certificate https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
# 解压
tar -xvf apache-hive-3.1.3-bin.tar.gz
# 进入目录
cd apache-hive-3.1.3-bin
默认情况下,MetaStore 服务和 Hive 服务运行在同一个 JVM 中,包含一个内嵌的以本地磁盘作为存储的 Derby 数据库实例。使用内嵌的 MetaStore 是 Hive 入门最简单的方法。但是每次只有一个内嵌的 Derby 数据库可以访问某个磁盘上的数据库文件,这就意味着一次只能为每个 MetaStore 打开一个 Hive 会话。如果试着启动第二个会话,在它试图连接 MetaStore 时,会得到错误信息。因此它并不是一个实际的解决方案,并不适合在生产环境使用,常用于测试。
# 配置环境变量
vi /etc/profile
export HIVE_HOME=/home/commons/apache-hive-3.1.3-bin
export PATH=$HIVE_HOME/bin:$PATH
# 生效环境变量
source /etc/profile
# 配置hive-env环境变量
cp conf/hive-env.sh.template conf/hive-env.sh
vi conf/hive-env.sh
export HADOOP_HOME=/home/commons/hadoop
export HIVE_CONF_DIR=/home/commons/apache-hive-3.1.3-bin/conf
export HIVE_AUX_JARS_PATH=/home/commons/apache-hive-3.1.3-bin/lib
# 复制hive-default.xml
cp conf/hive-default.xml.template conf/hive-site.xml
# 替换{system:java.io.tmpdir}
vi conf/hive-site.xml
# 在vi里替换,一共替换4处地方,4 substitutions on 4 lines
:%s#${system:java.io.tmpdir}#/home/commons/apache-hive-3.1.3-bin/iotmp#g
# 在vi里替换,一共替换3处地方,3 substitutions on 3 lines
:%s#${system:user.name}#root#g
# 初始化derby元数据
schematool -initSchema -dbType derby
# 找到3215行的位置,将description整行内容删除保存
vi conf/hive-site.xml
重新执行初始化后显示完成
初始化完后会在执行初始化脚本当前路径生成metastore_db的目录,hive内嵌模式启动就是读当前路径下这个目录,这也意味着在其他目录执行hive就没法共享内嵌Derby元数据信息。
如果要支持多会话(以及多租户),需要使用一个独立的数据库。这种配置方式成为本地配置,因为 MetaStore 服务仍然和 Hive 服务运行在同一个进程中,但连接的却是另一个进程中运行的数据库,在同一台机器上或者远程机器上。对于本地模式来说客户端和服务端在同一个节点上,启动hive后自动启动元数据服务并连接。
在本地模式下不需要配置 hive.metastore.uris,默认为空表示是本地模式。如果选择 MySQL 作为 MetaStore 存储数据库,需要提前将 MySQL 的驱动包拷贝到 $HIVE_HOME/lib目录下。JDBC 连接驱动类视情况决定选择 com.mysql.cj.jdbc.Driver 还是 com.mysql.jdbc.Driver。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.50.95:3308/hive_meta?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.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>
然后执行初始化操作,初始化成功后查看hive_meta数据库自动创建且有相关表
show databases;后显示数据有default默认数据库了
将hive中的相关进程比如hiveserver2或者metastore这样的进程单独开启,使用客户端工具或者命令进行远程连接这样的服务。即远程模式。客户端可以在任何机器上,只要连接到这个server,就可以操作,客户端可以不需要密码。
修改hadoop的core-site.xml
hadoop.proxyuser.root.hosts
*
hadoop.proxyuser.root.groups
*
# 启动hiveserver2
hive --service hiveserver2 &
查看进程和上面执行hive可执行文件的进程都是org.apache.hadoop.util.RunJar
# 将hive目录发送其他机器上
scp -r ../apache-hive-3.1.3-bin hadoop1:/home/commons
# 修改hive-site.xml内容
vi hive-site.xml
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop2</value>
<description>Bind host on which to run the HiveServer2 Thrift service.</description>
</property>
# 启动beeline客户端
bin/beeline
# 连接jdbc,用户名和密码就是你启动hiveserver2机器用户名密码
!connect jdbc:hive2://hadoop2:10000
# 启动metastore
hive --service metastore &
启动后查看进程可以看到比刚才增多一个RunJar进程
修改hive-site.xml内容
vi hive-site.xml hive.metastore.uris thrift://hadoop2:9083 Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.
# 执行hive就可以连接到远程9083的元数据服务bin/hive
**本人博客网站 **IT小神 www.itxiaoshen.com