大数据技术12:Hive简介及核心概念

前言:2007年,编写Pig虽然比MapReduce编程简单,但是还是要学习。于是Facebook发布了Hive,支持使用SQL语法进行大数据计算,写个Select语句进行数据查询,Hive会将SQL语句转化成MapReduce计算程序。这样,熟悉数据库的数据分析师和工程师便可以无门槛地使用大数据进行数据分析和处理了,Hive出现后大大降低了Hadoop的使用难度,迅速得到开发者和企业的追捧。


一、Hive简介

Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查 询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 Hadoop 上运行。

​Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。​

Hive特点

  • 简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql 但是不了解 Java 编程的人也能很好地进行大数据分析;

  • 灵活性高,可以自定义用户函数 (UDF) 和存储格式;

  • 为超大的数据集设计的计算和存储能力,集群扩展容易;

  • 统一的元数据管理,可与 prestoimpalasparksql 等共享数据;

  • 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。


二、Hive的体系架构

2.1 command-line shell & thrift/jdbc

可以用 command-line shell thriftjdbc 两种方式来操作数据:

command-line shell:通过 hive 命令行的的方式来操作数据;

thriftjdbc:通过 thrift 协议按照标准的 JDBC 的方式操作数据。

2.2 Metastore

Hive 中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认 存储在 Hive 内置的 derby 数据库中,但由于 derby 只能有一个实例,也就是说不能有多个命令行客户 端同时访问,所以在实际生产环境中,通常使用 MySQL 代替 derby

Hive 进行的是统一的元数据管理,就是说你在 Hive 上创建了一张表,然后在 prestoimpala

sparksql 中都是可以直接使用的,它们会从 Metastore 中获取统一的元数据信息,同样的你在 presto /impalasparksql 中创建一张表,在 Hive 中也可以直接使用。

2.3 HQL的执行流程

Hive 在执行一条 HQL 的时候,会经过以下步骤:

1. 语法解析:Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将 SQL 转化为抽象 语法树

AST Tree

2. 语义解析:遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock

3. 生成逻辑执行计划:遍历 QueryBlock,翻译为执行操作树 OperatorTree

4. 优化逻辑执行计划:逻辑层优化器进行 OperatorTree 变换,合并不必要的

ReduceSinkOperator,减少 shuffle 数据量;

5. 生成物理执行计划:遍历 OperatorTree,翻译为 MapReduce 任务;

6. 优化物理执行计划:物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。


三、Hive数据类型

3.1 基本数据类型

Hive 表中的列支持以下基本数据类型:

TIMESTAMP 和 TIMESTAMP WITH LOCAL TIME ZONE 的区别如下:

  • TIMESTAMP WITH LOCAL TIME ZONE:用户提交时间给数据库时,会被转换成数据库所

  • 在的时区来保存。查询时则按照查询客户端的不同,转换为查询客户端所在时区的时间。

  • TIMESTAMP :提交什么时间就保存什么时间,查询时也不做任何转换。

3.2 隐式转换

Hive 中基本数据类型遵循以下的层次结构,按照这个层次结构,子类型到祖先类型允许隐式转换。例 如 INT 类型的数据允许隐式转换为 BIGINT 类型。额外注意的是:按照类型层次结构允许将 STRING 类 型隐式转换为 DOUBLE 类型。

3.3 复杂类型

3.4 示例

如下给出一个基本数据类型和复杂数据类型的使用示例:

CREATE TABLE students(
 name     STRING,   -- 姓名
 age       INT,      -- 年龄
 subject   ARRAY<STRING>,   --学科
 score     MAP<STRING,FLOAT>,  --各个学科考试成绩
 address   STRUCT<houseNumber:int, street:STRING, city:STRING, province:
STRING>  --家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

四、Hive内容格式

当数据存储在文本文件中,必须按照一定格式区别行和列,如使用逗号作为分隔符的 CSV 文件

(Comma-Separated Values) 或者使用制表符作为分隔值的 TSV 文件 (Tab-Separated Values)。但此时 也存在一个缺点,就是正常的文件内容中也可能出现逗号或者制表符。

所以 Hive 默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在文件中。Hive默认 的行和列分隔符如下表所示。

使用示例如下:
CREATE TABLE page_view(viewTime INT, userid BIGINT)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS SEQUENCEFILE;

五、Hive存储格式

5.1 支持的存储格式

Hive 会在 HDFS 为每个数据库上创建一个目录,数据库中的表是该目录的子目录,表中的数据会以文 件的形式存储在对应的表目录下。Hive 支持以下几种文件存储格式:

5.2 指定存储格式

通常在创建表的时候使用 STORED AS 参数指定:

各个存储文件类型指定方式如下:

  • STORED AS TEXTFILE

  • STORED AS SEQUENCEFILE

  • STORED AS ORC

  • STORED AS PARQUET

  • STORED AS AVRO

  • STORED AS RCFILE


六、内部表和外部表

内部表又叫做管理表 (Managed/Internal Table),创建表时不做任何指定,默认创建的就是内部表。想 要创建外部表 (External Table),则需要使用 External 进行修饰。 内部表和外部表主要区别如下:


六、Linux环境下Hive的安装

6.1、安装Hive

(1)下载并解压

下载所需版本的 Hive,这里我下载版本为 cdh5.15.2 。下载地址:http://archive.cloudera.com/cdh

5/cdh/5/

# 下载后进行解压
 tar -zxvf hive-1.1.0-cdh5.15.2.tar.gz

(2)配置环境变量

添加环境变量:

vim /etc/profile

export HIVE_HOME=/usr/app/hive-1.1.0-cdh5.15.2
export PATH=$HIVE_HOME/bin:$PATH

使得配置的环境变量立即生效:

source /etc/profile

(3)修改配置

1. hive-env.sh

进入安装目录下的 conf/ 目录,拷贝 Hive 的环境配置模板 flume-env.sh.template

cp hive-env.sh.template hive-env.sh

修改 hive-env.sh ,指定 Hadoop 的安装路径:

HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2

2. hive-site.xml

新建 hive-site.xml 文件,内容如下,主要是配置存放元数据的 MySQL 的地址、驱动、用户名和密码等信息:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop001:3306/hadoop_hive?
createDatabaseIfNotExist=true</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>root</value>
  </property>
</configuration>

(4)拷贝数据库驱动

MySQL 驱动包拷贝到 Hive 安装目录的 lib 目录下, MySQL 驱动的下载地址为:https://dev.mysql. com/downloads/connector/j/ 

(5)初始化元数据库

  • 当使用的 hive 1.x 版本时,可以不进行初始化操作,Hive 会在第一次启动的时候会自动进行初始化,但不会生成所有的元数据信息表,只会初始化必要的一部分,在之后的使用中用到其余表时会自动创建;

  • 当使用的 hive 2.x 版本时,必须手动初始化元数据库。初始化命令:

# schematool 命令在安装目录的 bin 目录下,由于上面已经配置过环境变量,在任意位置执行即可
schematool -dbType mysql -initSchema

这里我使用的是 CDH hive-1.1.0-cdh5.15.2.tar.gz ,对应 Hive 1.1.0 版本,可以跳过这一

步。

(6) 启动

由于已经将 Hive bin 目录配置到环境变量,直接使用以下命令启动,成功进入交互式命令行后执行 show databases 命令,无异常则代表搭建成功。

Mysql 中也能看到 Hive 创建的库和存放元数据信息的表

6.2、HiveServer2/beeline

Hive 内置了 HiveServer HiveServer2 服务,两者都允许客户端使用多种编程语言进行连接,但是 HiveServer 不能处理多个客户端的并发请求,因此产生了 HiveServer2HiveServer2HS2)允许远 程客户端可以使用各种编程语言向 Hive 提交请求并检索结果,支持多客户端并发访问和身份验证。 HS2 是由多个服务组成的单个进程,其包括基于 Thrift Hive 服务(TCP HTTP)和用于 Web UI 的 Jetty Web 服务。

HiveServer2 拥有自己的 CLI 工具——BeelineBeeline 是一个基于 SQLLine JDBC 客户端。由于 目前 HiveServer2 Hive 开发维护的重点,所以官方更加推荐使用 Beeline 而不是 Hive CLI。以下主 要讲解 Beeline 的配置方式。

6.2.1 修改Hadoop配置

修改 hadoop 集群的 core-site.xml 配置文件,增加如下配置,指定 hadoop root 用户可以代理本机 上所有的用户。

<property>

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

<value>*</value>

</property>

<property>

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

<value>*</value>

</property>

之所以要配置这一步,是因为 hadoop 2.0 以后引入了安全伪装机制,使得 hadoop 不允许上层系统 (如 hive)直接将实际用户传递到 hadoop 层,而应该将实际用户传递给一个超级代理,由该代理在 hadoop 上执行操作,以避免任意客户端随意操作 hadoop。如果不配置这一步,在之后的连接中可能 会抛出 AuthorizationException 异常。

6.2.2 启动hiveserver2

由于上面已经配置过环境变量,这里直接启动即可:

# nohup hiveserver2 &

6.2.3 使用beeline

可以使用以下命令进入 beeline 交互式命令行,出现 Connected 则代表连接成功。

# beeline -u jdbc:hive2://hadoop001:10000 -n root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/245797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python文本信息解析:从基础到高级实战‘[pp]]‘[

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python文本信息解析&#xff1a;从基础到高级实战&#xff0c;全文3600字&#xff0c;阅读大约10分钟。 文本处理是Python编程中一项不可或缺的技能&#xff0c;覆盖了广泛的…

什么是POM设计模式?

为什么要用POM设计模式 前期&#xff0c;我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本&#xff08;以快递100网站登录举栗&#xff09;&#xff1a; import timefrom selenium import webdriver from selenium.webdriver.common.by import Bydriver …

【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真程序实物演示讲解视频&#xff09; Proteus 仿真&#xff1a;Proteus 8.16(有低版本) 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;P04 1. 主要功能&#xff1a…

详解RTC:以华人文化打造链上生态

文化是人类在发展的历史长河中淘洗出来的智慧结晶&#xff0c;随着人类社会的进步和变迁&#xff0c;经历了从口口相传到互联网等不同历史时代的传承和创新。在数字技术飞速发展的当今&#xff0c;区块链技术为文化的创新与传承提供了全新的空间和方式&#xff0c;使其得以在新…

UDP特性之组播(多播)

UDP特性之组播 1. 组播的特点2. 设置主播属性2.1 发送端2.2 接收端 3. 组播通信流程3.1 发送端3.2 接收端 4. 通信代码 原文链接 在公司测试广播和多播有一点问题。。。 1. 组播的特点 组播也可以称之为多播这也是UDP的特性之一。组播是主机间一对多的通讯模式&#xff0c;是…

Java使用Microsoft Entra微软 SSO 认证接入

1. Microsoft Entra Microsoft Entra ID 是基于云的标识和访问管理服务&#xff0c;可帮助员工访问外部资源。 示例资源包括 Microsoft 365、Azure 门户以及成千上万的其他 SaaS 应用程序。 Microsoft Entra ID 还可帮助他们访问你的企业 Intranet 上的应用等内部资源&#x…

Xcode编写基于C++的动态连接库(dylib)且用node-ffi-napi测试

创建一个dylib工程示例 在 Xcode 中创建一个动态链接库&#xff08;.dylib 文件&#xff09;的步骤如下&#xff1a; 打开 Xcode&#xff1a; 打开 Xcode 应用程序。 创建新的工程&#xff1a; 选择 "Create a new Xcode project"&#xff0c;或者使用菜单 File &g…

DHTMLX Suite v8.3发布!深化JavaScript UI小部件库使用体验

DHTMLX UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件&#xff0c;这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Suite v8.3已于近日正式发布啦&#xff01;这个更新附带了一组新特性和改进&#xff0c;旨在促进您…

数据结构与算法之美学习笔记:35 | Trie树:如何实现搜索引擎的搜索关键词提示功能?

目录 前言什么是“Trie 树”&#xff1f;如何实现一棵 Trie 树&#xff1f;Trie 树真的很耗内存吗&#xff1f;Trie 树与散列表、红黑树的比较解答开篇内容小结 前言 本节课程思维导图&#xff1a; 搜索引擎的搜索关键词提示功能&#xff0c;我想你应该不陌生吧&#xff1f;为…

微信小程序---自定义组件

目录 1.局部引用组件 2.全局引用组件 3.组件和页面的区别 4.自定义组件样式 5.properties属性 6.data和properties的区别 7.数据监听器 8.纯数据字段 9.自定义组件-组件的生命周期 lifetimes节点 10.组件所在的页面的生命周期 pageLifetimes节点 11.插槽 &#x…

bugkuctf web随记wp

常规思路&#xff1a; 1&#xff0c;源码2&#xff0c;抓包3&#xff0c;御剑dirsearch扫后台检查是否有git文件未删除4&#xff0c;参数 本地管理员&#xff1a;1&#xff0c;cu看源码&#xff0c;sci看源码有一串东西2&#xff0c;base64解码后是test123猜测是密码3&#x…

实战——Mac M2 安装mat工具

线上环境出现内存飙升的情况&#xff0c;需要工具定位问题发生点就需要用到mat工具了&#xff0c;之前都是在intel芯片环境上安装的&#xff0c;现在换了m2芯片&#xff0c;导致出现了问题&#xff0c;经过一系列调研都解决了&#xff0c;特此记录下&#xff0c;以备后查 开发…

架构设计系列之常见架构(一)

本部分对常见架构进行简单的说明。 一、三层架构之经典 MVC 经典的 MVC 架构&#xff08;Model-View-Controller&#xff09;架构是软件系统架构设计中的经典&#xff0c;它将应用程序分为三个主要部分&#xff1a; 模型&#xff08;Model&#xff09;视图&#xff08;View&…

微信小程序 全局共享数据 mobx

前言 全局数据共享&#xff08;又叫做&#xff1a;状态管理&#xff09;是为了解决组件之间数据共享的问题。开发中常用的全局数据共享方案有&#xff1a;Vuex、Redux、MobX 等。 一. 安装 npm install --save mobx-miniprogram4.13.2 mobx-miniprogram-bindings2.1.5 安装完…

单机环境下一人一单

优惠券秒杀 添加优惠卷 店铺发布优惠券又分为平价券和特价券, 平价券可以任意购买而特价券需要秒杀抢购(限制数量和时间) tb_voucher(平价券): 优惠券的基本信息 tb_seckill_voucher(秒杀券): 有voucher_id字段表示具有优惠卷的基本信息,此外还有库存,开始抢购时间,结束抢购…

VMWare Tools 共享目录设置

vmware tools安装完成后&#xff0c;进入到工项目录设置 点击虚拟机设置->硬件->CD/DVD(SATA) &#xff0c;勾选使用物理驱动器&#xff0c;勾选自动检测 1、windows 操作系统设置 设置共享文件夹时&#xff0c;需要勾选 “ 在windows客户机中映射为网络驱动器”。 设置…

数字孪生Web3D智慧机房可视化运维云平台建设方案

前言 进入信息化时代&#xff0c;数字经济发展如火如荼&#xff0c;数据中心作为全行业数智化转型的智慧基座&#xff0c;重要性日益凸显。与此同时&#xff0c;随着东数西算工程落地和新型算力网络体系构建&#xff0c;数据中心建设规模和业务总量不断增长&#xff0c;机房管理…

AGI魔盒,会放出冥王PLUTO还是阿童木?

人机共生&#xff0c;是科幻作品永恒的主题。其中&#xff0c;《冥王PLUTO》可能是最早探讨人类与机器人如何在冲突中共存的漫画作品。 如果说阿童木是人机共生的“和平使者”&#xff0c;启蒙了几代人对机器人的信任和热爱,那么冥王PLUTO就是阿童木的反面&#xff0c;一个心怀…

nodejs+vue+微信小程序+python+PHP血液中心管理平台的设计与实现-计算机毕业设计推荐

实现采血的完整功能&#xff0c;系统用户主要分为两类&#xff0c;一类是管理员&#xff0c;一类是采血工作人员。管理员主要对采血工作人员以及血库进行管理。派发账号给员工作为采血工作人员&#xff0c;对血库的出库入库进行信息化管理。采血工作人员主要完成采血工作。通过…

快速碰撞刚性环境的机器人低阻抗控制(阻尼影响分析)

问题描述 在快速碰撞刚性环境的机器人低阻抗控制中&#xff0c;需要通过精确的碰撞检测和处理&#xff0c;以及低阻抗控制策略的优化&#xff0c;来减少碰撞对机器人和环境的影响。同时&#xff0c;我们还需要适应刚性环境&#xff0c;提高机器人的稳定性和鲁棒性&#xff0c;…
最新文章