首页 > 其他分享 >hive(一)

hive(一)

时间:2023-05-17 18:58:47浏览次数:58  
标签:数据库 apps Hive metastore hive 3.1

数据仓库

数据仓库,英文名称为Data Warehouse,可简写为DW。是一个用于存储,分析,报告的数据系统.数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持.

数据库和数据仓库区别

数据库和数据仓库的区别实际就是OLTP和OLAP的区别

OLTP系统的典型应用就是RDBMS,也就是我们俗称的数据库,当然这里要特别强调此数据库表示的是关系型数据库,Nosql数据库并不在讨论范围内.

OLAP系统的典型应用就是DW,也就是我们俗称的数据仓库。

image

  1. 数据仓库不是大型的数据库,虽然数据仓库存储数据规模大。
  2. 数据仓库的出现,并不是要取代数据库。
  3. 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
  4. 数据库是为捕获数据而设计,数据仓库是为分析数据而设计

hive

Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。

Hive由Facebook实现并开源。
image

通过上图我们发现Hive其实就干了两件事,第一将数据映射成一张表,第二将SQL语句转换为MR程序.

为什么使用Hive

使用Hadoop MapReduce直接处理数据所面临的问题
	人员学习成本太高需要掌握java语言
     MapReduce实现复杂查询逻辑开发难度太大
使用Hive处理数据的好处
	操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
	避免直接写MapReduce,减少开发人员的学习成本
	支持自定义函数,功能扩展很方便
	背靠Hadoop,擅长存储分析海量数据集

Hive和Hadoop的关系

从功能来说,数据仓库软件,至少需要具备两种能力︰存储数据的能力、分析数据的能力

Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。
只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。
Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。

Hive的架构

image
Metadata:元数据(Metadata),又称中介数据、中继数据,为描述数据的数据( data about data ),主要是描述数据属性( property )的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

Hive Meatadata:Hive的元数据。包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。

Metastore:元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。

Hive与Mysql对比

Hive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都十分相似,但应用场景却完全不同。Hive只适合用来做海量数据的离线分析Hive的定位是数据仓库,面向分析的OLAP系统。因此时刻告诉自己,Hive不是大型数据库,也不是要取代MySQL承担业务数据处理

image

hive安装和部署

由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadoop集群健康可用。

1.服务器的基础环境

集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装

2.Hadoop集群健康可用

启动Hive之前必须先启动Hadoop集群。特别要注意,需等待HDFS安全模式关闭之后再启动运行ive。
Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
配置Hive操作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>


3.MySQL数据库准备

因为我们使用远程连接模式,要把元数据存储到Mysql中.所以需要安装mysql并开启远程连接权限.
Mysql安装我们已经安装完毕,没有安装详情参照Linux02课件.
这里直接开启远程权限
1.登录  mysql -uroot  -proot
2.在mysql中设置允许简单密码
  set global validate_password_policy=0;
  set global validate_password_length=1;
3.开放远程连接权限
  grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
4.刷新权限 
  flush privileges;

这样就开启成功,开启成功后可以在windows上用图形化工具连接一下查看是否成功
补充数据库修改密码命令 SET PASSWORD FOR 'root'@'linux01' = PASSWORD('root'); 

4.上传解压

将资料中的apache-hive-3.1.2.tar.gz上传到linux01的/opt/apps文件夹 可以使用rz命令或者xftp工具
上传后进入到apps文件夹 进行解压
tar -zxvf apache-hive-3.1.2.tar.gz
解压后名称比较长 我们简单修改一下
mv apache-hive-3.1.2-bin/ hive-3.1.2/

如果hadoop版本比较高需要解决Hadoop和hive中guava版本差异(我们用的hadoop版本是3.1.1不需要修改)
在hive的lib文件夹下 guava的jar包版本是19.0  
而高版本的的hadoop的/opt/apps/hadoop-3.1.1/share/hadoop/common/lib
下的guava包是27.0 
可以删除hive下的guava 将hadoop的复制过来

5.配置
配置hive系统环境变量 让Hive命令可以在任意位置运行

vi /etc/profile  
export  JAVA_HOME=/opt/apps/jdk1.8.0_191
export  HADOOP_HOME=/opt/apps/hadoop-3.1.1
export  HIVE_HOME=/opt/apps/hive-3.1.2
export  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

添加完毕后别忘记
source /etc/profile

Hive总共有三种配置方式:内嵌模式,本地模式,远程模式. 三种方式主要区别在于Metastore是否需要单独启动,及Metadata存储在哪种数据库中.我们主要使用的是远程模式,这也是企业中使用的模式.

image

主要区别在于Metastare是不是需要单独启动? 内嵌模式和本地模式不需要单独启动  远程模式需要单独启动
Metadata元数据信息保存在哪里? 内嵌模式保存在hive内置数据库中Derby  本地模式和远程模式保存在mysql中

内嵌模式

内嵌模式(Embedded Metastore )是metastore默认部署模式。
此种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都嵌入在主HiveServer进程中,当启动HiveServer进程时,Derby和metastore都会启动。不需要额外起Metastore服务。
但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。

#修改Hive环境变量文件 添加Hadoop_HOME
cd /opt/apps/hive-3.1.2/conf
mv hive-env.sh.template hive-env.sh
vi hive-env.sh  
#在最后加上
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib
#初始化元数据
schematool -initSchema -dbType derby
#启动hive服务
hive

本地模式

本地模式(Local Metastore ) 下,Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。本地模式采用外部数据库来存储元数据,推荐使用MySQL。
hive根据hive.metastore.uris参数值来判断,如果为空,则为本地模式。缺点是︰每启动一次hive服务,都内置启动了一个metastore。

本地模式特征就是∶需要安装数据库MySQL来存储元数据,但是不需要配置启动Metastore服务。

注意:Hive3版本需要用户手动进行元数据初始化动作。

#修改Hive环境变量文件 添加Hadoop_HOME
cd /opt/apps/hive-3.1.2/conf
mv hive-env.sh.template hive-env.sh
vi hive-env.sh  
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

在/opt/apps/hive-3.1.2/lib下上传mysql驱动包

vi hive-site.xml
<configuration>
  <property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&amp;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>root</value>
  </property>

  <!--关闭元数据授权-->
  <property>
  <name>hive.metastore.event.db.notification.api.auth</name>
  <value>false</value>
  </property>
  <!--关闭元数据存储版本的验证-->
  <property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
  </property>
</configuration>

开启hive操作hadoop权限
见2.2

初始化元数据
schematool -initSchema -dbType mysql -verbos

启动服务
hive

2.4.3 远程模式(重点)

​ 远程模式(Remote Metastore )下,Metastore服务在其自己的单独JVM上运行,而不在HiveServer的JVM中运行。如果其他进程希望与Metastore服务器通信,则可以使用thrift Network API进行通信。

​ 远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。元数据也采用外部数据库来存储元数据,推荐使用MySQL。

​ 在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。

image

具体配置(重要)

1.修改Hive环境变量文件 添加Hadoop_HOME

#进入到hive下的conf文件夹
cd /opt/apps/hive-3.1.2/conf
#将hive环境变量文件模版 改为可用文件
cp  hive-env.sh.template  hive-env.sh

vim hive-env.sh
#在最后添加Hadoop_Home
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/apps/hive-3.1.2/lib

shift: set nu  将第40行注释打开
export HADOOP_HEAPSIZE=1024

2.创建Hive的核心配置文件 进行配置

在hive下的conf文件夹下 直接vi一个hive-site.xml
vi  hive-site.xml
<configuration>
    <!-- 记录hive中的元数据信息  记录在mysql中 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&amp;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>
    <!-- hive在HDFS上的工作目录 -->
    <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>linux01</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.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
    <!--关闭元数据存储版本的验证-->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 添加元数据服务配置 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://linux01:9083</value>
    </property>
</configuration>

3.上传MySQL驱动包放入到Hive的lib文件夹下

Hive的lib包中默认没有mysql驱动的jar包.我们需要上传一个mysql的jdbc驱动jar包放入到hive的lib下.
cd /opt/apps/hive-3.1.2/lib
使用rz命令上传我们之前用过的jdbc的jar包即可 

hive初始化

将hive的原数据信息初始化到mysql中 用的是hive下bin中的schematool命令 我们配置了环境变量可以直接使用.
schematool -initSchema -dbType mysql

最后出现 completed初始化成功 
Initialization script completed
schemaTool completed

在mysql数据库中发现生成一个新的hive数据库 里面默认有74张表 , 说明hive初始化成功!

标签:数据库,apps,Hive,metastore,hive,3.1
From: https://www.cnblogs.com/paopaoT/p/17409760.html

相关文章

  • HIVE跨集群迁移
    查看mysql使用端口ps-ef|grepmysqlss-antp|grep[ps查出来的pid]停止HIVE写入服务创建备份路径mkdir-p/root/hivebackup/执行备份数据库命令:(在目标集群执行)mysqldump-uroot-pPassword-h1.1.1.1-P3306--databaseshive_prode>/root/jws/hiveba......
  • impala jdbc导出hive数据字典
    业务需求太多了,给完整导出为html文件,以及之前搞的publicstaticvoidmain(String[]args)throwsException{kerberos();}publicstaticvoidkerberos(){URLresource=Thread.currentThread().getContextClassLoader().getResource("");......
  • 1、通过亿级数据量在hive和impala中查询比较text、orc和parquet性能表现(二)
    文章目录9、分别在hive和impala中查询验证结果(比較HDFS存儲三種格式文件的查詢性能textfile、orc、parquet)1)、查詢總條數2)、隨便找一條信息,按照name查詢3)、按照多条件查询4)、按照時間區間查詢5)、兩張表join6)、總結1、文件存儲2、hive查詢與impala查詢速度3、不同查詢類型的查詢......
  • 小知识:设置archive_lag_target参数强制日志切换
    为客户测试一个ADG场景问题,发现测试环境的日志切换频率过低,总是需要定期手工切换,这非常影响测试心情。实际上,可以设置archive_lag_target参数强制日志切换。比如设置:altersystemsetarchive_lag_target=1800;这样即使库没任何压力,半小时也会切换一次日志。该设置同时也适......
  • 【大数据】Hive 小文件治理和 HDFS 数据平衡讲解
    目录一、Hive小文件概述二、Hive小文件产生的背景三、环境准备四、Hive小文件治理1)小文件合并(常用)1、示例演示一(非分区表)2、示例演示二(分区表)3、示例演示三(临时表)2)文件压缩3)存储格式优化4)分区表5)垃圾回收五、HDFS数据平衡1)HDFS数据倾斜2)HDFS数据平衡一、Hive小文件概述......
  • 消息推送平台的实时数仓?!flink消费kafka消息入到hive
    大家好,3y啊。好些天没更新了,并没有偷懒,只不过一直在安装环境,差点都想放弃了。上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了,austin常规的功能已经更新得差不多了,剩下的就是各种细节的完善。不知道大......
  • Hive3安装
    Hive3安装Mysql安装卸载Centos7自带的mariadb[root@node3~]#rpm-qa|grepmariadbmariadb-libs-5.5.64-1.el7.x86_64[root@node3~]#rpm-emariadb-libs-5.5.64-1.el7.x86_64--nodeps[root@node3~]#rpm-qa|grepmariadb[root@nod......
  • 【大数据】Hive Join 的原理与机制
    目录一、概述二、环境准备三、HiveJOIN类型四、Map,Shuffle,Reduce三阶段1)Map阶段2)Shuffle阶段3)Reduce阶段五、CommonJoin(Reduce阶段)六、MapJoin(Map阶段)一、概述Hive是一个基于Hadoop的数据仓库解决方案,它提供了类似于SQL的查询语言,称为HiveQL,用于处理结构化数据。在Hive中......
  • 基于Hadoop3.1.3安装Hive3.1.2
    Hive是什么?\tHive是一个基于Hadoop的数据仓库工具,它提供了类似SQL的查询语言HQL(HiveQueryLanguage),使得开发人员可以使用类SQL语言来查询和处理存储在大规模分布式文件系统(如HDFS)中的数据。Hive有哪些功能?Hive的主要功能包括数据存储、查询和分析等。通过将SQL......
  • HiveSQL调优-最常用的调优方式
    系统和其它层面:让经常where的字段进行分区,合理的多分桶、数据使用压缩、建宽表的时候用列式的orc存储、开启严格模式:会产生笛卡尔积、orderby排序后未加limit、查询分区表时未指定列的HiveSQL语句直接执行出错开启列裁剪和分区裁剪:即只查询要读取的列和分区,避免全表扫描或全列......