如何构建Hive数据仓库Hive 、数据仓库的存储方式 以及hive数据的导入导出

什么是Hive

hive是基于Hadoop的一个数据仓库工具,可以将结构化数据映射为一张表。
hive支持使用sql语法对存储的表进行查询
(本质上是把sql转成mapreduce的任务执行)

Hive有三个特点:

  • hive所存储的数据是放在HDFS文件系统中的
  • hive的底层实现是mapreduce
  • 这些任务是运行在Yarn上的

如何构建Hive数据仓库

什么是数据仓库

官方定义:数据仓库是面向主题的、集成的、不可更新的、随时间的变化而不断变化的,这些特点决定了数据仓库的系统设计不能采用同开发传统的OLTP数据库一样的设计方法。

(1)安装hive
常规配置,这里不记录安装过程

唯一需要注意的地方是有一个hive.metastroe.dirname属性需要配置
配置的值是hive元数据的存储路径,一般为hdfs文件系统的路径。

安装完成后,需要在mysql中建立配置中指定的数据库并初始化Hive源数据库

(2)安装完成之后就可以启动hive

Hive数据仓库的储存方式

Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中 。

Hive主要有四种数据模型:

  • Table(表)
  • External Table(外部表)
  • Partition(分区)
  • Bucket(桶)

(1)表的概念和关系型数据库的表很像,只不过hive中的表的本质是结构化数据,存储在hdfs文件系统的目录中。这个目录就是前文着重要求的metastore的位置,文件就是存在那里的。

(2)外部表顾名思义,就是数据不存放在所属目录中,而是存放在别处。

(3)分区,这个很重要,我觉得分区的存在就是数据仓库与关系型数据库最大的区别,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。
(4)桶:对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。

Hive的元数据

Hive的元数据一般都是放在mysql中的,这样的原因是因为Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,不能将Hive的元数据存储在HDFS中。

hive数据的导入导出

导入

导入的方式有两种

  • 从本地导入数据
  • 从HDFS导入数据

(1)从本地向hive导入数据
语法:

load data local
inpath '/opt/dataaplace/...'
(overwrite) into table tablename 
partition (partitionfield = xxx);

load data:表示导入数据

local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表

partition (…)表示指定导入数据的分区字段

overwrite表示覆盖写入,如果没有则是追加写入

例子:

load data local
inpath '/opt/data/StudentId.txt'
overwrite into table Student;

(2) 加载HDFS文件到hive中
语法:

load data 
inpath '/root/data/...'
(overwrite) into table tablename 
partition (partitionfield = xxx);

不加local默认从hdfs中导入数据

hive创建表

create table tablename
(
id int,
name string
)
row format delimited fields terminated by ',';

前半部分和mysql的建表语句一样,后半部分是指定表的分隔符。

  • 插入数据
insert into table tablename values(1,"zhangsan"),(2,"lisi");

insert into:以追加数据的方式插入到表

insert overwrite into table tablename values(1,"zhangsan"),(2,"lisi");

加了overwrite 则是覆盖原来的表然后写入

  • 根据查询结果覆盖写入
insert overwrite table tablename values(3,"wangwu")
select id,name from tablename where id = 1;
  • 创建表时通过Location指定加载数据路径
create table tablename(id int, name string
)
row format delimited fields terminated by '\t'
location '/root/hive/wirehouse/...';

location 指定的是hdfs中的路径

数据导出

参考博客:添加链接描述

# 1)将查询的结果导出到本地(只能overwrite,不能into,否则会报错)
insert overwrite local directory '/opt/module/hive/datas/export/student' select * from student;# 2)将查询的结果格式化导出到本地(所有的insert语句都会跑MR)
insert overwrite local directory '/opt/module/hive/datas/export/student1' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'select * from student;# 3)将查询的结果导出到HDFS上(没有local)(是复制,原来的文件还在)
insert overwrite directory '/user/qinjl/student2'ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from student;

注意:insert 导出,导出的目录不用自己提前创建,hive会帮我们自动创建,但是由于是overwrite,所以导出路径一定要写具体,否则很可能会误删数据。

  • Hadoop命令也可以导出数据到本地
 dfs -get /user/hive/warehouse/student/student.txt/opt/module/hive/datas/export/student3.txt;
  • Hive Shell 命令导出
hive_dir/bin/hive -e 'select * from ods.order_info;' >> 
/opt/module/datas/order_info.txt
  • hive表也可以通过export 导入到hdfs上
export table ods.user_info to /user/hive/warehouse/user_info;

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

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

相关文章

Prometheus结合Grafana监控MySQL,这篇不可不读!

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

动态规划:LeetCode第10题 正则表达式匹配

题目: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: …

软考57-上午题-【数据库】-数据库的控制功能

一、事务管理 1-1、事务的定义 事务是一个操作序列,这些操作,要么都做,要么都不做。 事务和程序是两个不同的概念,一般一个程序可以包含多个事务。 1-2、事务定义的语句 1、事务开始:BEGIN TRANSACTION 2、事务提…

C++高级面试题:请解释 C++ 中的指针和引用之间的区别。

请解释 C 中的指针和引用之间的区别。 在 C 中,指针(Pointers)和引用(References)都是用于处理内存地址的工具,但它们有一些重要的区别: 语法和用法: 指针使用 * 运算符来访问其所…

【ES入门一:基础概念】

集群层面上的基础概念 集群 由多个es实例组成的叫做集群 节点 单个ES的服务实例叫做节点。每个实例都有自己的名字,就是在配置文件中配置的‘node.name’中的内容。为了标识每个节点,每个节点启动后都会分配一个UID,存储在data目录。每个…

MySQL 查询语句

表格创建: -- 员工管理(带约束) create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32) default 123456 comment 密码,name varcha…

C#(C Sharp)学习笔记_数组的遍历【十】

输出数组内容 一般而言,我们会使用索引来输出指定的内容。 int[] arrayInt new int[] {4, 5, 2, 7, 9}; Console.WriteLine(arrayInt[3]);但这样只能输出指定的索引指向的内容,无法一下子查看数组全部的值。所以我们需要用到遍历方法输出所有元素。 …

限流、流量削峰思考

学MQ的时候,经常会有人拿秒杀这个场景去介绍流量削峰。这很好理解,将请求放到一个中转站去暂存,虽然生产者生产很快,但消费者可以慢慢去中转站获取。 关于限流,之前一直以为限流的思想类似MQ,不过是内存中…

HTB Perfection

Perfection User Namp ┌──(kali㉿kali)-[~/HTB/machine/Perfection] └─$ nmap -A 10.129.226.58 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-03 21:10 EST Nmap scan report for 10.

线程的同步互斥机制3月4日

题目&#xff1a; 代码&#xff1a; #include <stdio.h> #include <pthread.h> #include <string.h> #include <semaphore.h> #include <unistd.h>sem_t sem1,sem2;void* callback1(void*arg) {while(1){if(sem_wait(&sem1)<0) //等待…

SwiftUI之CoreData详解(一)

coreData 是一种数据持久化的方案&#xff0c;是对SQLite的一种封装。一说到这种桌面化的数据库&#xff0c;我就无比的怀念Foxbase|Foxpro, 多好的数据库产品&#xff0c;被微软扼杀了&#xff0c;相当年教大学生妹子们国家二级数据库时都是手把手教的&#xff0c;呃~~~&#…

Java轻量延迟重试队列实现

背景 很多开放平台都使用Webhook的方式进行外部系统数据同步或者通知&#xff0c;对于Webhook请求的对外发送不进行重试显然有点说不过去。使用简单的while一个条件去重试N次好像达不到什么效果&#xff0c;只能是说有重试而已&#xff0c;而使用消息队列中间件好像依赖又太重…

【论文阅读】High-Resolution Image Synthesis with Latent Diffusion Model

High-Resolution Image Synthesis with Latent Diffusion Model 引用&#xff1a; Rombach R, Blattmann A, Lorenz D, et al. High-resolution image synthesis with latent diffusion models[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern re…

SkyWalking链路追踪上下文TraceContext的追踪身份traceId生成的实现原理剖析

结论先行 SkyWalking 通过字节码增强技术实现&#xff0c;结合依赖注入和控制反转思想&#xff0c;以SkyWalking方式将追踪身份traceId编织到链路追踪上下文TraceContext中。 是不是很有趣&#xff0c;很有意思&#xff01;&#xff01;&#xff01; 实现原理剖析 TraceConte…

1.1_2 性能指标——速率、带宽、吞吐量

文章目录 1.1_2 性能指标——速率、带宽、吞吐量&#xff08;一&#xff09;速率&#xff08;二&#xff09;带宽&#xff08;三&#xff09;吞吐量 1.1_2 性能指标——速率、带宽、吞吐量 &#xff08;一&#xff09;速率 速率即数据率或称数据传输率或比特率。 速率就是“快…

Redis的设计与实现

Redis的设计与实现 数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型&#xff0c;它们分别是&#xff1a;string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合)&#xff0c;但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的…

Docker Protainer可视化平台,忘记登录密码,重置密码。

由于好久没有登录portainer系统&#xff0c;导致忘记了登录密码&#xff0c;试了好多常用的密码都不对&#xff0c;无奈只能重置密码。 一、停止protainer 容器 查看容器ID和COMMAND 用于停止容器 docker ps -a停止容器 docker stop portainer二、查找volume data 宿主机所在…

基于uView组件库封装的地址选择弹框组件

在用uniapp做h5页面时&#xff0c;需要一个类似京东的地址选择弹框组件&#xff0c;故基于uView自己动手封装了一个&#xff08;如若需要做回显&#xff0c;可以绑定v-model&#xff0c;然后监听value的变化&#xff1b;或者直接在调用open方法时从外部传入参数过来&#xff0c…

JavaEE之多线程

一.认识线程 1.多进程实现并发编程的不足之处&#xff1a; 引入多个进程的核心&#xff1a;实现并发编程&#xff08;c的CGI技术就是通过多进程的方式实现的网站后端开发&#xff09;。因为现在是一个多核cpu的时代&#xff0c;并发编程就是刚需。多进程实现并发编程&#xf…

达梦、金仓、南大、瀚高、优炫:从社区建设看企业技术自信心

正文约950字&#xff0c;预计阅读时间2分钟 国产技术厂商在面对自身产品问题时&#xff0c;往往保持回避态度&#xff0c;不愿公之于众&#xff0c;主要原因有2方面&#xff1a; 1&#xff0c;产品技术层面问题较多&#xff0c;如某些根本性缺陷难以攻克&#xff0c;或问题发…