Hive的简单学习一

一 Hive的搭建

1.1 准备好文件

  1. apache-hive-3.1.2-bin.tar.gz

2.mysql-connector-java-8.0.29.jar

3.上传到linux中

1.2 安装

1.解压

tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local/soft/

2.重命名

mv apache-hive-3.1.2-bin hive-3.1.2

3.配置环境变量

进入/etc/profile文件下

export HIVE_HOME=/usr/local/soft/hive-3.1.2

export PATH=PATH:HIVE_HOME/bin

4.刷新一下

source /etc/profile

5.进入hive-3.1.2/conf目录下

将hive-default.xml.template这个文件复制一份,改名为hive-site.xml

6.修改hive-site.xml相关内容

复制代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://master:3306/hive?useSSL=false&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf8&amp;useUnicode=true</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
  </property>
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://master:9083</value>
  </property>
  <property>
	<name>hive.server2.enable.doAs</name>
	<value>false</value>
  </property>
    
<property>
<name>hive.querylog.location</name>
<value/>
</property>

 

(同上)
<property>
<name>hive.exec.local.scratchdir</name>
<value/>
</property>

 

(同上)
<property>
<name>hive.downloaded.resources.dir</name>
<value/>
</property>
</configuration>

7.创建log4j.properties配置文件

将日志级别改成WARN,避免执行sql出现很多日志

log4j.rootLogger=WARN,CA

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout

log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n%

8.上传mysql驱动到lib目录下

cp /usr/local/soft/jars/mysql-connector-java-8.0.29.jar ./

9.将hadoop的jline-0.9.94.jar的jar替换成hive的版本。

cp ./jline-2.12.jar /usr/local/soft/hadoop-3.1.1/share/hadoop/yarn/lib/

10初始化hive元数据库

schematool -dbType mysql -initSchema

1.3启动

1.3.1xhsell交互页面启动

1.先启动hadoop集群

2.后台启动元数据服务

nohup hive --service metastore &

3.输入hive命令即可进入xhsell交互界面

1.3.2JDBC启动

1.先将hadoop/etc/hadoop/core-site.xml文件追加两条数据

<property>

<name>hadoop.proxyuser.root.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.root.groups</name>

<value>*</value>

</property>

2.如果还有问题 关闭安全模式

3.将master中的hive复制一份给node1

4.在master中启动Hadoop集群,跟nohup hive --service metastore &

5.再启动 nohup hiveserver2 &

6.再在node1中启动 beeline -u jdbc:hive2://master:10000 -n root

1.3.3 命令行启动

  1. hive -e "hive的命令"

例如 hive -e "show database;"

  1. hive -f 文件名 (文件里面是hive的命令)

二 Hive的介绍

2.1hive的介绍

1.Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce客户端。

2.2 什么是hive

1、hive是数据仓库建模的工具之一。

2、可以向hive传入一条交互式的sql,在海量数据中查询分析得到结果的平台。

2.3 hive的优点

1、操作接口采用类sql语法,提供快速开发的能力(简单、容易上手)

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

3、Hive的延迟性比较高,因此Hive常用于数据分析,适用于对实时性要求不高的场合

4、Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高。(不断地开关JVM虚拟机)

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

6、集群可自由扩展并且具有良好的容错性,节点出现问题SQL仍可以完成执行

7、如果直接使用hadoop的话,人员学习成本太高,项目要求周期太短,MapReduce实现复杂查询逻辑开发难度太大。如果使用hive的话,可以操作接口采用类SQL语法,提高开发能力,免去了写MapReduce,减少开发人员学习成本,功能扩展很方便(比如:开窗函数)。

2.4缺点

1、Hive的HQL表达能力有限

(1)迭代式算法无法表达 (反复调用,mr之间独立,只有一个map一个reduce,反复开关)

(2)数据挖掘方面不擅长

2、Hive 的效率比较低

(1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化

(2)Hive 调优比较困难,粒度较粗 (hql根据模板转成mapreduce,不能像自己编写mapreduce一样精细,无法控制在map处理数据还是在reduce处理数据)

2.5 hive的特点

1、可扩展性

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

2、延申性

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

3、容错

即使节点出现错误,SQL仍然可以完成执行

2.6 hive于MySQL的区别

2.7 hive的应用场景

日志分析:大部分互联网公司使用hive进行日志分析,如百度、淘宝等。

统计一个网站一个时间段内的pv,uv,SKU,SPU,SKC

多维度数据分析(数据仓库

海量结构化数据离线分析

构建数据仓库

2.8 hive的架构

2.元数据

元数据包括表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是 外部表)、表的数据所在目录等。

一般需要借助于其他的数据载体(数据库)

主要用于存放数据库的建表语句等信息

推荐使用Mysql数据库存放数据

3.Driver(sql怎么转化为MR任务的)

元数据存储在数据库中,默认存在自带的derby数据库(单用户局限性)中,推荐使用Mysql进行存储。

1) 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST(从3.x版本之后,转换成一些的stage),这一步一般都用第三方工具库完 成,比如ANTLR;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

2) 编译器(Physical Plan):将AST编译(从3.x版本之后,转换成一些的stage)生成逻辑执行计划。

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

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

三 Hive元数据

3.1相关表

Hive元数据库中一些重要的表结构及用途,方便Impala、SparkSQL、Hive等组件访问元数据库的理解。

1、存储Hive版本的元数据表(VERSION),该表比较简单,但很重要,如果这个表出现问题,根本进不来Hive-Cli。比如该表不存在,当启动Hive-Cli的时候,就会报错"Table 'hive.version' doesn't exist"

2、Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)

DBS:该表存储Hive中所有数据库的基本信息。

DATABASE_PARAMS:该表存储数据库的相关参数。

3、Hive表和视图相关的元数据表

主要有TBLS、TABLE_PARAMS、TBL_PRIVS,这三张表通过TBL_ID关联。 ​ TBLS:该表中存储Hive表,视图,索引表的基本信息。 ​ TABLE_PARAMS:该表存储表/视图的属性信息。 ​ TBL_PRIVS:该表存储表/视图的授权信息。 4、Hive文件存储信息相关的元数据表

主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS,由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。 ​ SDS :该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。 ​ SD_PARAMS: 该表存储Hive存储的属性信息。 ​ SERDES:该表存储序列化使用的类信息。 ​ SERDE_PARAMS:该表存储序列化的一些属性、格式信息,比如:行、列分隔符。 5、Hive表字段相关的元数据表

主要涉及COLUMNS_V2:该表存储表对应的字段信息。

相关推荐
西岸行者3 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
B站计算机毕业设计超人3 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
B站计算机毕业设计超人3 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城3 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
王九思3 天前
Hive Thrift Server 介绍
数据仓库·hive·hadoop
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2