首页 > 其他分享 >hive01_入门

hive01_入门

时间:2024-07-19 15:18:44浏览次数:17  
标签:存储 入门 压缩 数据类型 hive ORC 数据 hive01

hive简介

为什么产生 hive?

  • MapReduce 提供了通用的分布式开发能力,但是是一个通用的计算引擎,对于一些特殊的数据处理效率较低。比如常见的结构化数据用 SQL 处理,但是数据达到某个量级后单机数据库无法承受,势必要转向大数据平台,而大数据平台有自己单独的计算引擎,所以之前所有使用 SQL 编写的任务需要重构为 MapReduce 任务,但是这个工作量很大,因此可以将 SQL 自动转化为 MapReduce 任务。
  • hive 核心思想是将 HDFS 中的结构化数据映射为一张数据库表,并提供 SQL查询、功能分析,支持 SQL任务/MapReduce任务 间的转换。但是转换支持率仅有 60%。

img

Hive 的组成:

  • Client:Hive 客户端,包含 Shell客户端 Beeline、Hive Cli、JDBC客户端;
  • Driver:对提交的任务进行解析,将 HiveSQL 转换为 MapReduce 作业。
    • Driver 包含解释器、编译器、优化器、执行器,共同完成 HQL 查询语句从语法分析、编译成逻辑查询计划、优化以及转换成物理查询计划的过程;
    • 转换时,SQL处理结构化数据,hive数据以文件形式保存,所以需要将文件映射为二维表结构;
  • MetaStore 存储了元数据信息(表类型、属性、字段、权限等)用来辅助完成数据映射功能,一般使用 MySQL/Derby 作为数据存储。
  • 最终转换后的 MapReduce 任务提交到 Hadoop 平台上进行计算并返回结果。

Hive 三种部署模式

  • 本地模式:
    img

  • 单用户模式:
    img

  • 多用户模式、远程服务器模式:
    img

Hive 核心配置

hive 核心配置文件包括 hive-env.shhive-site.xml,其中 hive-site.xml 为全局配置文件,进行基础调优配置。

hive-site.xml 中重要的配置:

<configuration>
  <!-- 配置 MySQL url地址 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node02:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>

  <!-- 配置Driver驱动 -->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

  <!-- 配置UserName -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  
  <!-- 配置Password -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>DBa2020*</value>
    <description>password to use against metastore database</description>
  </property>
  .....
  .....

  <!-- 配置 Thrift 序列化服务的 host、port -->
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
  </property>
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node03</value>
  </property>
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://node03:9083</value>
  </property>
</configuration>

hive-env.sh 中重要的配置,定义 jdk路径、hadoop根路径、hive配置文件地址:

export JAVA_HOME=/usr/java/jdk1.8.0_191
export HADOOP_HOME=/opt/app/hadoop-2.10.2
export HIVE_CONF_DIR=/opt/app/apache-hive-2.3.7-bin/conf

hive 数据类型/存储格式

hive 表存储格式

img

  • TextFile:文本格式的表,默认以明文的文本方式存储,在存储时使用行式存储,并且默认不进行压缩。
    • 在计算压缩文件时,如果支持拆分可以 Split 成多个文件,从而启动多个 Map 任务并发处理;但是 TextFile 压缩后在处理时无法进行 Split,所以并发度并不高;
    • TextFile 适用于字段较少或者经常需要获取全字段数据的场景,使用 TextFile 可以很方便将数据导入到 Hive 或者导出到外部数据库的中专表中。
  • SequenceFile:同样是行式存储的表,但是存储二进制数据,比如 MapReduce 中数据读入和写出时使用的 <Key、Value> 数据,其中 Key 作为读取数据的数据行偏移量,Value 存储真正的数据。
    • SequenceFile 支持压缩,并且可以选择 None、Record、Block 三种压缩方式,默认为 Record,支持压缩文件再拆分。
    • 生产中如果需要数据进行行式存储、原生支持压缩,并且满足一定的性能要求。
  • RCFile/ORC/Parquet:这三种均为列式存储表。在存储时首先会按照行数进行切分,切分为不同的数据块进行存储(行存储);在每一个数据块中存储时又是列式存储,将表的每一列数据存放在一起,性能更高。
    • 在处理结构化数据时,一般不会用到全部数据,而是选择某几列进行运算,使用行式存储读取数据时会读数据然后过滤;而列式存储只会读取这几列数据,减少数据读取、处理需要的时间。
    • ORC 是 hive 计算的主要形式,支持 NONE、Zlib、Snappy 压缩方式,并且可以开启事务功能,以便支持数据更新、删除等操作,但事务的开启会影响表的处理性能,所以非必要情况下不需要启用事务功能。
      • ORC 表的问题在于,它是Hive特有的存储类型,所以在其它大数据产品中兼容性并不好,有些只有在较高的版本中才会支持。
    • Parquet 表也是Hive计算的主要表形式,它的计算性能稍弱于ORC表,但因为Parquet文件是Hadoop通用的存储格式,所以对于其它大数据组件而言,具有非常好的数据兼容度;
      • Parquet 表可以支持数据的多重嵌套(如JSON的属性值可以是一个对象,且支持嵌套),但 ORC 表在多重嵌套上的性能并不好。
      • Parquet 支持uncompressed\snappy\gzip\lzo压缩,其中lzo压缩方式压缩的文件支持切片;而ORC表的压缩方式不支持切分,如果单个压缩文件较大的话,性能会有影响。
  • AVRO:主要为 Hadoop 提供数据序列化和数据交换服务,支持二进制序列化方式,与 Thrift 功能类似。在数据传输中,不会直接将文本发送出去,而是先要经过序列化,然后再进行网络传输,AVRO就是Hadoop中通用的序列化和数据交换标准。

生产环境中,一般使用较多的是 TextFile、ORC、Parquet

  • TextFile 一般作为数据导入、导出的中转表。
  • ORC、Parquet 作为分析运算的主要表类型,如果需要支持事务,使用 ORC;如果需要兼容性,使用 Parquet

压缩方式

img

  • bzip2lzo 支持压缩后文件再拆分;
  • 这几种压缩算法,按照压缩比的排名为 bzip2 > gzip > deflate > snappy > lzo;压缩解压缩速度排名正好相反。

hive 数据类型

数值型

  • tinyint; 1字节(-128 ~ 127)
  • smallint;2字节(-32768 ~ 32767)
  • int/integer:4字节(Integer.MIN_VALUE, Integer.MAX_VALUE);
  • bigint:8字节有符号整数;
  • float:4字节单精度浮点数;
  • double:8字节双精度浮点数;
  • decimal:不可变的、任意精度的、有符号的十进制数;
  • numeric:类似于 decimal;

其中 decimal 数据类型可以使用 decimal(precision, scale) 进行创建,precision 为数字(整数+小数)的总长度(默认为10),scale 为小数部分的长度。

-- float 数据类型转换
select CAST(123.56 AS DECIMAL(4,1));  
> 123.6

-- 小数部分超过四舍五入
select CAST(123456.5 AS DECIMAL);  
> 123457

-- 整数部分超过直接转换为 NULL
select CAST(12345678910.5 AS DECIMAL);
> NULL

-- 转换其它数据类型为 decimal
select CAST('123456789.1234567' AS DECIMAL(20,5)); 
123456789.12346

字符型

  • string:可变长字符串;
  • varchar:可变长字符串,最大字符数(1~65535),超过自动截断;
  • char:固定长度字符穿。
select CAST("ABCDEFGHIGK" AS VARCHAR(10)); 
> ABCDEFGHIG
select CAST("ABCDEFGHIGK" AS STRING); 
> ABCDEFGHIGK

日期型

  • TIMESTAMP:时间戳格式(YYYY-MM-DD HH:mm:ss.sss),存储整型、浮点型、字符串类型时间数据;
  • DATE:日期格式(YYYY-MM-DD),只能由 Date、TIMESTAMP、String 类型转换过来;
  • intervals:处理年、月、日、分、秒 部分的数据。

img

img

img

img

其他类型

  • boolean:布尔;
  • binary:二进制字节数组;
  • array:一段有序字段,所有字段数据类型相同;
  • map:键值对,键的类型必须是原生数据类型,值可以为原生/复杂数据类型;
  • struct:理解为结构体,字段数据类型可以不同;
  • union:一组数据类型的集合;

标签:存储,入门,压缩,数据类型,hive,ORC,数据,hive01
From: https://www.cnblogs.com/istitches/p/18311537

相关文章

  • Dart 入门教程
    01. Dart介绍02. Dart开发环境搭建和开发工具的配置03. Dart语言的基础语法04. Dart数据类型05. Dart运算符06. Dart条件表达式07. Dart类型转换08. Dart循环语句09. Dartbreak和continue语句10. Dart集合类型ListsetMap详解以及相关循环语......
  • 神仙级AI大模型入门教程(非常详细),从零基础入门到精通,从看这篇开始!
    一.初聊大模型1.为什么要学习大模型?在学习大模型之前,你不必担心自己缺乏相关知识或认为这太难。我坚信,只要你有学习的意愿并付出努力,你就能够掌握大模型,并能够用它们完成许多有意义的事情。在这个快速变化的时代,虽然新技术和概念不断涌现,但希望你能静下心来,踏实地学习。一......
  • 快速入门:弄懂Kafka的消息流转过程
    Kafka的架构图可以分为四个部分:ProducerCluster:  生产者集群。一般由许多个实际的业务项目组成,其不断地往Kafka集群中写入数据。KafkaCluster:    Kafka服务器集群。这里就是Kafka作为重要的一部分,这里负责接收生产者写入的数据,并将其持久化到文件里,最终将消......
  • Python小白菜鸟从入门到精通
    前言Python由荷兰国家数学与计算机科学研究中心的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版......
  • 笔记本新手入门:从零开始的全面指南
        踏入笔记本电脑的世界,就像打开了一扇通往无限可能的大门。无论你是学生、职场新人,还是追求生活品质的自由职业者,一台得心应手的笔记本都能成为你学习、工作和娱乐的得力伙伴。然而,对于笔记本新手而言,初次接触时的困惑和挑战在所难免。从开机那一刻起,如何快速掌握基......
  • Android 小白菜鸟从入门到精通教程
    前言Android一词最早出现于法国作家利尔亚当(AugusteVilliersdel'Isle-Adam)在1886年发表的科幻小说《未来的夏娃》(L'èvefuture)中。他将外表像人的机器起名为Android。从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了Android应用程序开发应该掌握的各方面......
  • Lamp 小白菜鸟从入门到精通
    前言“LAMP包”的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也......
  • 都2024年了,还在问网络安全怎么入门,气得我当场脑血栓发作
    前言本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。正题首先,在准备进入这个行业之前,我们要问一下我们的内心,工作千......
  • C# 小白菜鸟从入门到精通(第3版)教程
    前言C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NETFramework和.NET?Core(完全开源,跨平台)之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员AndersHejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包......
  • [K8S] k8s快速入门(1)
    文章目录K8S简介主要概念架构关键功能和优势使用场景k8s快速入门之命令行1.k8s集群搭建2.NameSpace命名空间2.1namespace常见语法3.Pod:调度的最小单元3.1Pod常用命令3.2查看Pod3.3创建Pod3.4运行pod3.5Pod扩容4.kubectl4.1kubectl常用命令4.2kubectlget命令4......