Hadoop-hive
Hadoop-hive
小植配置前必看
本帖的主要目的是用最平实的语言描述配置的进程,同时在每个章节为可能涉及的知识点提供相应的网站以供读者学习。最重要的还是给我自己留个配置的日记。这样Linux玩崩了也能找到回家的路。
一、实验目的
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架构原理
如图,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运行机制
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
(六)Hive与Hadoop有什么关系?
Hive利用HDFS存储数据,利用MapReduce查询数据
(七)Hive与传统数据库对比
总结: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安装
- 上传并解压hive文件
1 | tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/servers/ |
- 修改hive目录名
1 | cd /export/servers/ |
1 | mv apache-hive-3.1.2-bin hive-3.1.2 |
- 环境变量配置,将下列文本追加到文件中
1 | vi /etc/profile |
1 | 配置HIVE_HOME |
- 设置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 |
- 创建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 | 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 | rm -rf metastore_db/ |
- 初始化derby数据库
1 | schematool -initSchema -dbType derby |
- 启动hive
1 | hive |
- 测试是否可以成功查询表
1 | show tables; |