Apache Hive 是一款建立在hadoop生态之上的开源数据仓库系统,可以把储存在Hadoop文件中结构化,半结构化得到数据文件映射成一张数据库表,然后基于数据库表提供一种类似SQL的查询模型,也叫Hive 查询语言 ,简称HQL;
然后是Hive 的核心就是把HQL转化成MapReduce 程序,然后把转化后的 MapReduce 程序提交到Hadoop 集群执行
为什么使用Hive
直接编写Hadoop 的MapReduce 程序 是需要一定的学习成本,比如要有Java基础,后再是复杂数据查询关联,排序,去重等逻辑编写较为复杂;
Hive提供类似SQL 的方式,我们可以快速上手,编写SQL 来分析和处理海量数据;
Hive和Hadoop 的关系
作为一款数据仓库软件,最起码要有这个数据存储和数据分析的能力;
Hive 借助hadoop 来实现
可以看到Hive 其实做的就只有一个功能,解析HQL变成MapReduce , 存储分析的能力都是基于Hadoop 的组件来完成的
Hive Metastore 是管理Hive 元数据的一个组件或者叫服务
Metadata,又称元数据,描述数据的数据;比如说我们常见的数据库字段,这个可以叫做元数据;
Hive 的元数据Hive Metadata,我们都知道Hive 的数据存储是使用Hadoop中文件保存的,那这些个hadoop的文件对应我们HQL 里面那个表? 这个是有Hive Metastore 来进行记录的;Hive Metastore包括Hive 的database ,table,字段属性,字段顺序,表的hadoop-hdfs 存储的位置;
元数据的存储方式两大类,一个Hive 自带的Derby存储,或者第三方的存储比如MySQL;
Hive Metastore预案数据服务管理 hive Metadata,对外提供服务地址,客户端连接Hive Metastore 而不是直接保存元数据的数据库,一定程度上保证了元数据的安全
metastore服务配置有3种模式:内嵌模式、本地模式、远程模式
内嵌模式 | 本地模式 | 远程模式 | |
---|---|---|---|
Metastore 单独部署启动 | 否 | 否 | 是 |
Metadata 存储 | 自带Derby | 第三方MySQL | 第三方MySQL |
前置准备
Hadoop集群正常可用,集群时间同步,防火墙设置,主机名称,免密登录,JDK ,环境变量等安装成功;
Hive需要把数据存储在HDFS上,此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行
修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件,重启生效
<property>
<name>hadoop.proxyuser.root.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.root.groupsname>
<value>*value>
property>
略略略
在主节点上安装Hive
tar zxvf apache-hive-3.1.2-bin.tar.gz
mv apache-hive-3.1.2-bin/ hive
# 解决Hive与Hadoop之间guava版本差异
cd /soft/server/apache-hive-3.1.2-bin/
rm -rf lib/guava-19.0.jar
cp /soft/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
修改 hive-env.sh
cd /soft/server/apache-hive-3.1.2-bin/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
export HADOOP_HOME=/soft/server/hadoop-3.3.0
export HIVE_CONF_DIR=/soft/server/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/soft/server/apache-hive-3.1.2-bin/lib
新增 hive-site.xml
<configuration>
<!-- 存储元数据mysql相关配置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.141.155:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&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>hadoop</value>
</property>
<!-- H2S运行绑定host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node1</value>
</property>
<!-- 远程模式部署metastore metastore地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
<!-- 关闭元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
上传MySQL JDBC驱动到Hive安装包lib路径下 mysql-connector-java-5.1.32.jar,初始化Hive的元数据
cd /soft/server/apache-hive-3.1.2-bin/
bin/schematool -initSchema -dbType mysql -verbos
#前台启动
/soft/apache-hive-3.1.2-bin/bin/hive --service metastore
#前台启动开启debug日志
/soft/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console
##后台启动、
nohup /soft/apache-hive-3.1.2-bin/bin/hive --service metastore &
分别对应下面的脚本 beeline 和hive
[root@node1 bin]# pwd
/soft/apache-hive-3.1.2-bin/bin
[root@node1 bin]# ll
总用量 44
-rwxr-xr-x. 1 root root 881 8月 23 2019 beeline
drwxr-xr-x. 3 root root 4096 7月 12 21:45 ext
-rwxr-xr-x. 1 root root 10158 8月 23 2019 hive
....
首先启动metastore服务,然后才可以启动hiveserver2服务
nohup /soft/servers/hive/bin/hive --service metastore &
nohup /soft/servers/hive/bin/hive --service hiveserver2 &
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL