hive了解系列一

news2024/11/16 16:34:03

417975cb8515419ab36cf4d07896b2f6_2.png


随着智能手机的普及,互联网时代红利的爆发,用户数量和产生的数据也越发庞大。为了解决这个问题,提高数据的使用价值。 Hadoop生态系统就被广泛得到应用。

在早期,Hadoop生态系统就是为处理如此大数据集而产生的一个合乎成本效益的解决方案。Hadoop实现了一个特别的计算模型,也就是MapReduce,其可以将计算任务分割成多个处理单元然后分散到一群家用的或服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性。这个计算模型的下面是一个被称为Hadoop分布式文件系统(HDFS)的分布式文件系统。这个文件系统是“可插拔的”,而且现在已经出现了几个商用(CDH\HDP)的和开源的替代方案。
这就是Hive出现的原因。Hive提供了一个被称为Hive查询语言(简称HiveQL或HQL)的SQL方言,来查询存储在Hadoop集群中的数据,简化了MapReduce的开发过程。
SQL知识分布广泛的一个原因是:它是一个可以有效地、合理地且直观地组织和使用数据的模型。即使对于经验丰富的Java开发工程师来说,将这些常见的数据运算对应到底层的MapReduce Java API也是令人畏缩的。Hive可以帮助用户来做这些苦活,这样用户就可以集中精力关注于查询本身了。Hive可以将大多数的查询转换为MapReduce任务(job),进而在介绍一个令人熟悉的SQL抽象的同时,拓宽Hadoop的可扩展性。
hive也存在诸多弊端

查询延迟高:每一次启动脚本,hive都会去调用mapdurce导致其启动时间长。
复杂查询性能有限:对于一些复杂场景(如:行列转换、递归查询等)。
数据更新和事务性操作不佳:不支持update、delete语句。
ACID:hive不是一个ACID模型数据库工具,不支持事务处理。

hive和传统数据库的对比

image.png

hive的数据存储

Hive的数据存储基于Hadoop HDFS
Hive没有专门的数据存储格式(txt、csv)
存储结构主要包括:数据库、表、视图、索引、数据(文件)
Hive默认可以直接加载文本文件(TextFile),还支持SequenceFile、RCFile
创建表时,指定Hive数据的列分隔符与行分隔符,Hive即可解析数据

Hive的系统架构

用户接口,包括 CLI,JDBC/ODBC,WebUI
元数据存储,通常是存储在关系数据库如 mysql(常见的管理数据库), derby(默认自带数据库)中
内部运行自带:解释器、编译器、优化器、执行器
Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算
image.png

Hive运行模式

hive的运行模式有三种
本地模式、伪分布式模式和分布式模式
本地模式\伪分布式:这种模式下使用的是本地文件系统。在本地模式下,当执行Hadoopjob时(包含有大多数的Hive查询),Maptask和Reducetask在同一个进程中执行。
分布式模式:没有完整URL指定的路径默认都是分布式文件系统(通常是HDFS)中的路径,而且由JobTracker服务来管理job,不同的task 在不同的进程中执行。
即使在分布式模式下执行, Hive还是可以在提交查询前 判断是否可以使用本地模式来执行这个查询。这时它会读取数据文件,然后自己管理 MapReduce task,最终提供更快的执行方式。

hive相关操作指令

本文省略安装部署
在hive的bin目录下有以下相关指令

beeline
ext
hive
hive-config.sh
hiveserver2
hplsql
metatool
schematool

image.png

beeline:

作用: beeline是Hive的客户端工具,用于与HiveServer2进行交互式查询和操作。
功能:
允许用户通过JDBC远程连接到HiveServer2进行查询和管理Hive数据库。
支持使用HiveQL语言执行查询、创建表、加载数据等操作。
提供了连接参数配置、认证方式选择、输出格式设置等功能。
支持脚本执行,可以批量执行HiveQL脚本文件中的查询和命令。
通过beeline链接hive时,需提前启动。
在hive手册中提供以下使用命令示例

   Example:
    1. Connect using simple authentication to HiveServer2 on localhost:10000
    $ beeline -u jdbc:hive2://localhost:10000 username password

    2. Connect using simple authentication to HiveServer2 on hs.local:10000 using -n for username and -p for password
    $ beeline -n username -p password -u jdbc:hive2://hs2.local:10012

    3. Connect using Kerberos authentication with hive/localhost@mydomain.com as HiveServer2 principal
    $ beeline -u "jdbc:hive2://hs2.local:10013/default;principal=hive/localhost@mydomain.com"

    4. Connect using SSL connection to HiveServer2 on localhost at 10000
    $ beeline "jdbc:hive2://localhost:10000/default;ssl=true;sslTrustStore=/usr/local/truststore;trustStorePassword=mytruststorepassword"

    5. Connect using LDAP authentication
    $ beeline -u jdbc:hive2://hs2.local:10013/default <ldap-username> <ldap-password>

ext:

image.png
该文件夹并不是一个可执行文件,内部包含了所需的基本.shell脚本
image.png

hive

是hive 本地的一个交互工具,

hive-config.sh

此命令是为变更hive运行的环境所使用,主要涉及

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# processes --config option from command line
#

this="$0"
while [ -h "$this" ]; do
  ls=`ls -ld "$this"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '.*/.*' > /dev/null; then
    this="$link"
  else
    this=`dirname "$this"`/"$link"
  fi
done

# convert relative path to absolute path
bin=`dirname "$this"`
script=`basename "$this"`
bin=`cd "$bin"; pwd`
this="$bin/$script"

# the root of the Hive installation
if [[ -z $HIVE_HOME ]] ; then
  export HIVE_HOME=`dirname "$bin"`
fi

#check to see if the conf dir is given as an optional argument
while [ $# -gt 0 ]; do    # Until you run out of parameters . . .
  case "$1" in
    --config)
        shift
        confdir=$1
        shift
        HIVE_CONF_DIR=$confdir
        ;;
    --auxpath)
        shift
        HIVE_AUX_JARS_PATH=$1
        shift
        ;;
    *)
        break;
        ;;
  esac
done


# Allow alternate conf dir location.
HIVE_CONF_DIR="${HIVE_CONF_DIR:-$HIVE_HOME/conf}"

export HIVE_CONF_DIR=$HIVE_CONF_DIR
export HIVE_AUX_JARS_PATH=$HIVE_AUX_JARS_PATH

# Default to use 256MB 
export HADOOP_HEAPSIZE=${HADOOP_HEAPSIZE:-256}

以上是hive-config.sh指令的文件内容,通过解读该指令文件的源码,该指令主要是接收
–config
–auxpath
两个指令参数,用变更hive的HIVE_CONF_DIR、HIVE_AUX_JARS_PATH环境变量,该操作方式并不推荐,读者可以忽略

hiveserver2

因为早期 HiveServer 不能处理多于一个客户端的并发请求,这是由于 HiveServer 使用的 Thrift 接口所导致的限制,不能通过修改 HiveServer 的代码修正。因此在 Hive-0.11.0 版本中重写了 HiveServer 代码得到了HiveServer2 ,进而解决了该问题。 HiveServer2 支持多客户端的并发和认证,为开放 API 客户端如 JDBC 、 ODBC 提供更好的支持。

image.png


nohup hive --service metastore &   
nohup hive --service hiveserver2 &

启动hiveserver2,必须先启动其元数据库,源数据库的配置可参照往期hive的安装博客

hplsql

hplsql是一个客户端工具,hqlsql 通常用于执行hive的SQL脚本语句;

hqlsql -H 

可以查看到相关的指令参数
image.png

示例

在当前路径创建一个用于hive 执行的一个SQL脚本文件

[hadoop@hadoop ~]$ cat hive_text.sql 
use test_db;
create table hqlsqpl_text(id integer);
select *  from hqlsqpl_text;

使用hplsql指令去运行该脚本文件

hplsql -f hive_text.sql 

进入客户端可以看到表结构已经创建。
image.png
f参数是一个较为常用的指令。
e参数的使用范例

hplsql -e "USE test_db; SELECT * FROM hqlsqpl_text;"


image.png
这个指令其实较为鸡肋,hive并没有有效的

metatool

metatool是一个管理员对元数据进行管理和操作的一个指令。
能够在引用 NN 的元存储记录中搜索和替换 HDFS NN (NameNode) 位置。一种用途是将 Hive 部署转换为 HDFS HA NN(HDFS 高可用性名称节点)。
用于对元存储执行 JDOQL 的命令行工具 。对元存储执行 JDOQL 的功能对于用户和 Hive 开发人员来说都是一个有用的调试工具。
在使用metatool指令时,可指定以下参数


-serdePropKey <serde-prop-key>
S 特定于 SerDe 属性键,其值字段可能引用 HDFS NameNode 位置,因此可能需要更新。例如,若要更新 Haivvero 架构 URL,请为此参数指定 schema.url。

此选项仅对 updateLocation 选项有效。

-help
打印命令选项及其说明的列表。
-listFSRoot
打印当前文件系统根目录 (NameNode) 的位置。该值以 前缀。hdfs:// scheme

-dryRun
执行 updateLocation 更改的试运行 。将显示 updateLocation 更改,但不会保留。

此选项仅对 updateLocation 选项有效。

-executeJDOQL <query-string>
执行给定的 JDOQL 查询。
-tablePropKey <table-prop-key>
指定表属性键,其值字段可能引用 HDFS NameNode 位置,因此可能需要更新。例如,若要更新 Avro SerDe 架构 URL,请为此参数指定 avro.schema.url。

此选项仅对 updateLocation 选项有效。

-updateLocation <new-loc> <old-loc>
更新 Hive 元存储中的记录以指向新的 NameNode 位置(文件系统根位置)。new-loc 和 old-loc 都应该是具有有效主机名和方案的有效 URI。要升级到 HDFS HA NN,new-loc 应与属性的值匹配 。old-loc 应与 listFSRoot 选项返回的值匹配。dfs.nameservices

使用 dryRun 选项运行时 ,将显示更改,但不会保留更改。使用 serdepropKey/tablePropKey 选项运行时,updateLocation 会查找指定的 serde-prop-key/table-prop-key,并在找到时更新其值。

代码示例

查看元数据状态

hive --service metatool -listFSRoot

image.png

以上展示信息

hdfs://hadoop:9000/user/hive/warehouse:这是 Hive 默认的数据仓库目录。在这个目录下存放了所有 Hive 表的数据文件。

hdfs://hadoop:9000/user/hive/warehouse/test_db.db:这是一个数据库目录,test_db 是数据库的名称,.db 是数据库的后缀。在这个目录下存放了数据库 test_db 中所有表的数据文件。

-updateLocation示例

hive --service metatool -updateLocation hdfs://localhost:9000 hdfs://namenode2:8020 -tablePropKey avro.schema.url -serdePropKey avro.schema.url

使用 updateLocation ,tabletablePropKey 和 serdePropKey 选项将 NameNode 位置从 hdfs:// namenode2:8020 更新为 hdfs:// localhost:9000.

-executeJDOQL
执行给定的 JDOQL 查询。
查询所有表信息

hive --service metatool -executeJDOQL "select tableName from org.apache.hadoop.hive.metastore.model.MTable"

schematool

在安装hive 的时候 常用于初始化元数据库

schematool -dbType mysql -initSchema -verbose

查看当前版本以及元数据库JDBCurl信息

schematool -info -dbType mysql

image.png
这里显示的2.3并不是元数据库的信息 而是hive的版本号。
后续系列,马上更新,多多关注
d039e3de615a44d8aab79311e90c474c_2.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 整数转罗马数字

罗马数字包含以下七种字符:I&#xff0c;V&#xff0c;X&#xff0c;L&#xff0c;C,D和M。 例如&#xff0c;罗马数字2写做 II &#xff0c;即为两个并列的 1。12 写做XII&#xff0c;即为XII。27写做 XXVII,即为XXV II 。 通常情况下&#xff0c;罗马数字中小的数字在大的数字…

MoJoCo 入门教程(七)XML 参考

系列文章目录 前言 表格第二列中的符号含义如下&#xff1a; ! 必填元素&#xff0c;只能出现一次 ? 可选元素&#xff0c;只能出现一次 * 可选元素&#xff0c;可多次出现 R 可选元素&#xff0c;可递归出现多次 一、简介 本章是 MuJoCo 中使用的 MJCF 建模语言的参考手册。…

03-JAVA设计模式-享元模式

享元模式 什么是享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种对象结构型设计模式&#xff0c;用于减少创建对象的数量&#xff0c;以减少内存占用和提高系统性能。它通过共享已经存在的对象来避免创建大量相似的对象&#xff0c;从而降低内存消耗。 在…

vue3.0项目生成标签条形码(插件:jsbarcode)并打印(插件:Print.js)支持pda扫码枪扫描

文章目录 功能场景生成条形码设置打印功能踩坑 功能场景 功能场景&#xff1a;供应链中对一些货品根据赋码规则进行赋码&#xff0c;赋码之后生成根据赋码结果生成条形码&#xff0c;执行打印功能&#xff0c;贴在货品之上&#xff0c;打印之后可以用pda的手枪进行扫描&#x…

蓝桥杯2024年第十五届省赛真题-数字接龙

思路&#xff1a;DFS&#xff0c;因为输入的i&#xff0c;j的顺序导致&#xff0c;方向向量中x是行编号&#xff0c;y是列编号。方向向量可能和直觉上不同。 错的 //int dx[8]{0,1,1,1,0,-1,-1,-1}; //int dy[8]{1,1,0,-1,-1,-1,0,1}; 对的 int dx[]{-1,-1,0,1,1,1,0,-1}; int…

Hotcoin4月16日上新热门资产:头部RWA技术提供方Centrifuge(CFG)

Hotcoin持续为全球600万用户发掘优质潜力资产&#xff0c;热门币种交易上热币。一文快速了解今日上新资产:Centrifuge(CFG) 推荐指数 8.2 交易对 CFG/USDT 交易时间 4月16日 19:00 资产赛道 RWA 项目简介 Centrifuge是一个去中心化资产融资协议&#xff0c;专注于释放现实世界资…

计算机视觉——基于OpenCV和Python进行模板匹配

模板匹配&#xff1f; 模板匹配是它允许在一幅较大的图像中寻找是否存在一个较小的、预定义的模板图像。这项技术的应用非常广泛&#xff0c;包括但不限于图像识别、目标跟踪和场景理解等。 目标和原理 模板匹配的主要目标是在一幅大图像中定位一个或多个与模板图像相匹配的…

05.MySQL索引事务

1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的…

链表创建的陷阱与细节

链表是线性表的一种&#xff0c;它在逻辑结构上是连续的&#xff0c;在物理结构上是非连续的。 也就是说链表在物理空间上是独立的&#xff0c;可能是东一块西一块的。如下顺序表和链表在内存空间上的对比&#xff1a; 而链表的每一块空间是如何产生联系实现在逻辑结构上是连续…

pycharm永久改变sys.path

进入pycharm&#xff0c;选择file->settings->interpreter 在这里选择图中所示show all 再单击左上角减号右侧第三个&#xff0c;长得像思维导图的图标 之后添加你的路径&#xff0c;确认即可

vim使用指南:指令、配置、插件、异常

文章目录 vi / vim命令模式插入模式光标定位复制粘贴删除撤销替换删除查找 底行模式保存退出行号查找多开其他 视图模式注释 异常vim配置vim插件 vi / vim vim的本质是一个编辑器&#xff0c;是一种多模式的编辑器&#xff0c;只能进行读写操作&#xff0c;不能进行编译编辑器…

jmeter-while控制器用法

condition中添加while结束循环的条件&#xff0c;以下语句的意思是&#xff0c;当percent等于100时&#xff0c;就跳出while循环继续执行 ${__javaScript("${percent}" ! 100)} 举例&#xff0c;以下方法是getPercent为一个引出的异步接口&#xff0c;该接口的返回包…

uni-admin中引入uni-cms的缺少schema及uni-media-library缺少云函数的问题

1. 在管理端运行提示一些表找不到&#xff0c;因为是uni-admin关联的uni-starter的服务空间&#xff0c;在uni-admin的uniCloud中没有内容&#xff0c;在uni-starter的uniCloud中也没有发现对应的表&#xff0c;后面干脆在云端找到对应的表之后新建了&#xff0c;然后再下载到本…

盲人导航功能特点:革新出行体验的实时避障应用深度解析

作为一名资深记者&#xff0c;我有幸亲历并详尽报道一款专为盲人群体设计的导航应用叫做蝙蝠避障&#xff0c;它不仅提供了精准的路线指引&#xff0c;更创新性地融入了实时避障功能。这款应用凭借其盲人导航功能特点&#xff0c;正以前所未有的方式提升盲人的出行自由度与安全…

https证书是什么,怎么申请

https证书的名称有很多&#xff0c;其本名是SSL/TLS数字证书&#xff0c;本意是实现https访问的证书&#xff0c;故而很多人会称之为https证书&#xff0c;又因为其需要部署于域名服务器之上&#xff0c;所以也有人称之为域名证书。 所以https证书又名SSL证书、域名证书等。 h…

【Web】Dest0g3 520迎新赛 题解(全)

目录 phpdest EasyPHP SimpleRCE funny_upload EasySSTI middle PharPOP ezip NodeSoEasy Really Easy SQL&easysql EzSerial ljctr phpdest 尝试打pearcmd&#xff0c;但似乎没有写文件的权限 ?config-create/&file/usr/local/lib/php/pearcmd.php&a…

FreeRTOS_day3

1.总结任务调度算法之间的区别&#xff0c;重新实现一遍任务调度算法的代码。 抢占式调度&#xff1a;高优先级的任务可以打断低优先级的任务执行 时间片轮转&#xff1a;相同优先级的任务有相同的时间片&#xff08;1ms&#xff09;&#xff0c;时间片耗尽任务会强制退出 协…

2024 抖音欢笑中国年(五):Wasm、WebGL 在互动技术中的创新应用

前言 随着 Web 前端技术的不断发展&#xff0c;越来越多的新兴技术方案被引入到 Web 开发中&#xff0c;其中 Wasm 和 WebGL 作为前端领域的两大利器&#xff0c;为开发者带来了更多的可能性。 本文将结合2024 年抖音欢笑中国年的部分项目&#xff0c;重点介绍如何利用 Wasm 和…

前端三剑客 HTML+CSS+JavaScript ② HTML相关概念

他们这样形容我 是暴雨浇不灭的火 —— 24.4.18 学习目标 理解 HTML的概念 HTML的分类 HTML的关系 HTML的语义化 应用 HTML骨架格式 sublime基本使用 一、HTML初识 HTML指的是超文本标记语言&#xff0c;是用来描述网页的一种语言 HTML不是一种编程语言&#xff0c;而是一种标记…

C语言开发的医学影像数字化PACS系统源码 带三维重建和还原的PACS源码

C语言开发的医学影像数字化PACS系统源码 带三维重建和还原的PACS源码 PACS全称Picture Archivingand Communication Systems。它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#xf…