Hadoop-hive

配置前必看

本帖的主要目的是用最平实的语言描述配置的进程,同时在每个章节为可能涉及的知识点提供相应的网站以供读者学习。最重要的还是给我自己留个配置的日记。这样Linux玩崩了也能找到回家的路。

  1. 本帖主要涉及的目录一共有三个,如有需要,在根目录/下创建export目录存放以下三个目录(建议)。(解压目录)servers、(软件安装目录)software、(数据/日志目录)data如果自己的目录与本帖的目录不一样,请按照自己实际情况来
  2. 本帖基于centos 7.9配置,因此配置本帖软件请先安装好系统后将软件包上传并解压好
  3. 如若配置中报错,请第一时间查看前置软件是否正确安装配置并正常运行其次查看是否兼容性问题。
  4. 本帖所有命令都在root用户下执行如果非root用户,请在命令前添加sudo

一、实验目的

1、了解Hive的作用和特点

2、理解Hive的架构及组成

3、理解Hive与Hadoop的关系

4、掌握Hive三种模式的安装步骤及配置方法

二、实验内容

1、内嵌模式安装Hive

2、独立完成本地模式安装Hive,并提交相应的实验报告

三、环境准备

JDK-version:1.8

Hadoop-version:3.2.1

四、准备知识

(一)什么是Hive?

  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

(二)为什么使用Hive?

1. 直接使用hadoop所面临以下问题

(1) 人员学习成本太高

(2) 项目周期要求太短

(3) MapReduce实现复杂查询逻辑开发难度太大

2. 使用Hive解决了以下问题

(1) 操作接口采用类SQL语法,提供快速开发的能力。

(2) 避免了去写MapReduce,减少开发人员的学习成本。

(3) 扩展功能很方便。

(三)Hive有哪些特点?

  • 可扩展

  Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

  • 延展性

  Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

  • 容错

  良好的容错性,节点出现问题SQL仍可完成执行。

(四)Hive架构原理

clip_image002

  如图,Hive通过用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口
具体详细

  • 用户接口:Client CLI(hive shell 命令行),JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)
  • 元数据:Metastore:元数据包括:表名,表所属数据库(默认是default) ,表的拥有者,列/分区字段,表的类型(是否是外部表),表的数据所在目录等;
  • 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
  • hive 使用HDFS进行存储,使用MapReduce进行计算
  • 驱动器:Driver

(1) 解析器(SQL Parser):将SQL字符转换成抽象语法树AST,这一步一般使用都是第三方工具库完成,比如antlr,对AST进行语法分析,比如表是否存在,字段是否存在,SQL语句是否有误

(2) 编译器(Physical Plan):将AST编译生成逻辑执行计划

(3) 优化器(Query Optimizer):对逻辑执行计划进行优化

(4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划,对于Hive来说,就是MR/Spark。

(五)Hive运行机制

clip_image004

  Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。

(六)Hive与Hadoop有什么关系?

Hive利用HDFS存储数据,利用MapReduce查询数据

clip_image006

(七)Hive与传统数据库对比

clip_image008

总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析

(八)Hive的数据存储

Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)

只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹

table:在hdfs中表现所属db目录下一个文件夹

external table:与table类似,不过其数据存放位置可以在任意指定路径

partition:在hdfs中表现为table目录下的子目录

bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件

(九)Hive的三种安装方式

  • Embedded metastore:内嵌模式。特点是:hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中。该模式无需特殊配置。
  • Local metastore:本地模式。特点是:hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以在同一台机器上,也可以在远程机器上。该模式只需将hive-site.xml中的ConnectionURL指向mysql,并配置好驱动名、数据库连接账号即可。
  • Remote metastore:远程模式。特点是:hive服务和metastore在不同的进程内,可能是不同的机器。 该模式需要将hive.metastore.local设置为false,并将hive.metastore.uris设置为metastore服务器URI,如有多个metastore服务器,URI之间用逗号分隔。

五、实验步骤

HIVE安装

  1. 上传并解压hive文件
1
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/servers/
  1. 修改hive目录名
1
cd /export/servers/
1
mv apache-hive-3.1.2-bin hive-3.1.2
  1. 环境变量配置,将下列文本追加到文件中
1
vi /etc/profile
1
2
3
# 配置HIVE_HOME
export HIVE_HOME=/export/servers/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
  1. 设置hive配置文件(hive-env.sh),并在文件末尾添加上HADOOP的安装路径
1
cd /export/servers/hive-3.1.2/conf
1
cp hive-env.sh.template hive-env.sh
1
vi hive-env.sh

将下述文本追加至文件末尾

1
HADOOP_HOME=/export/servers/hadoop-3.2.1

image-20231030160324900

  1. 创建HDFS存储Hive元数据的文件目录,并赋予权限
1
start-all.sh
1
hadoop fs -mkdir /tmp
1
hadoop fs -mkdir -p /usr/hive/warehouse
1
hadoop fs -chmod g+w /tmp
1
hadoop fs -chmod g+w /usr/hive/warehouse
  1. 替换冲突的包
1
cd /export/servers/hive-3.1.2/lib
1
mv guava-19.0.jar guava-19.0.jar.bak
1
cp /export/servers/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar /export/servers/hive-3.1.2/lib/
  1. 删除数据库目录
1
rm -rf metastore_db/
  1. 初始化derby数据库
1
schematool -initSchema -dbType derby

image-20231030161043407
image-20231030161105014

  1. 启动hive
1
hive
  1. 测试是否可以成功查询表
1
show tables;

image-20231030160933415