HIVE从入门到精通------(1)hive的基本操作
1.开启hive
1.首先在master的/usr/local/soft/下启动hadoop: master : start-all.sh
start-all.sh
2.在另一个master(2)上监控hive日志: master(2): tail -F /tmp/root/hive.log
tail -F /tmp/root/hive.log
3.在master上启动元数据服务: master: nohup hive --service metastore &
nohup hive --service metastore &
4.用服务端在启动hiveserver2服务: master: nohup hiveserver2 &
nohup hiveserver2 &
5.在node1中开启服务端: node1: beeline -u jdbc:hive2://master:10000 -n root
beeline -u jdbc:hive2://master:10000 -n root
2.上传数据到hdfs
1.在hive中,将linux中创建本地文件上传至hdfs
1.首先在hive中移动到数据库,在指定的数据库下面创建表:
hive:
create table ........;
2.在master中移动到本地数据库,在该数据库下面创建本地文件,在文件内导入数据:
master:
cd /usr/local/soft/bigdata30/ //linux上的路径
vim a.txt
3.在hive中,将linux的txt文件导入到hdfs:
hive:
//inpath路径是linux上的路径,是上传数据,操作过后linux本地的数据不会消失
load data local inpath '/usr/local/soft/bigdata30/a.txt' into table a;
2.在hive中,将hdfs上面文件移动到hive表中
1.首先在hive中移动到数据库,在指定的数据库下面创建表:
hive:
create table ........;
2.通过某些任务会在hdfs上面产生数据,将hdfs上的/input1目录下的数据移动至students表对应的hdfs目录下:
hive:
//这个命令是移动数据,操作过后原位置inpath上的数据将不存在,inpath上的路径是hdfs数据目录的路径
load data inpath '/input1/students.txt' into table students;
3.当反复多次执行上传数据命令在相同路径,会产生copy文件:
//以追加的形式
再次执行,load data inpath '/input1/students.txt' into table students;
在students文件的目录下面将存在:
students.txt students_copy_1.txt
4.以覆盖的形式
load data inpath '/input1/students.txt' overwrite into table students;
3.在hive中,将已存在的表中插入自己写的sql语句
1.首先在hive中移动到数据库,在指定的数据库下面创建表students2:
hive:
create table ........;
2.将对students表进行sql操作过后的指定数据插入到空表students2中,这是复制原表数据还在
insert into table students2 select * from students;
多次执行会追加数据
3.覆盖插入
insert overwrite table students2 select * from students;
4.模板
insert overwrite table xxx.xxx partition(xxx=${xxx})
select
xxx from xxx;
4.在linux中,将本地数据传入到hdfs
1.首先在hive中移动到数据库,在指定的数据库下面创建表:
hive:
create table ........;
2.在master中移动到本地数据库,在该数据库下面将文件从Windows里面拖入:
master:
cd /usr/local/soft/bigdata30/ //linux上的路径
或vim.....
3.在master中,将linux的txt文件导入到hdfs:
master:
hadoop fs -put '本地数据' 'hive表对应的HDFS目录下'
hadoop fs -put students.txt /user/hive warehouse/bigdata30.db/students/
3.hive导出数据
1.将查询结果存放到本地
1.在master创建目录:
mkdir -p /usr/local/soft/bigdata30/hive_out1
2.在hive中将查询的数据导出到linux的目录里面:
//在本地地址下面,其中的/person_data是不存在的,在/usr/local/soft/bigdata30/hive_out1下面没有这个,是用来存放hdfs导出数据的文件夹
**insert overwrite local directory '/usr/local/soft/bigdata30/hive_out1/person_data' **
select * from students;
3.可以在导出数据的时候对数据的格式进行处理:
insert overwrite local directory '/usr/local/soft/bigdata30/hiveout1'
ROW FORMAT DELIMITED fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n'
select * from students2;
4.库操作
1.创建数据库
1.创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/.db。 这个是default库,没指定库进行创建的话就会直接在该目录下进行创建。
create database 库名;
2.避免已经存在的错误
create database [if not exists] 库名;
3.指定位置创建数据库
在指定的位置下面创建数据库,这个路径上的库名和指定创建的库名不一定要相同,只是作为映射关系
create database if not exists
库名 location '/bigdata30/db';
如果是:CREATE DATABASE IF NOT EXISTS aaa LOCATION '/user/hive/warehouse/bbb';
aaa 的路径: hdfs://master:9000/user/hive/warehouse/bbb
4.修改数据库
不可改动:
数据库名称:一旦创建了数据库,数据库的名称是不可更改的。
数据库的位置:数据库在Hive中的存储位置是指定创建时就确定的,无法后期修改。
数据库的所有者:一旦创建了数据库,数据库的所有者也是不可更改的。
alter database 库名 set dbproperties('createtime'='20240612');
5.数据库详细信息
1.显示数据库
show databases;
2.通过like进行过滤
show databases like 'students*';
3.查看详情信息
desc databases 库名;
6.切换数据库
use 库名;
7.删除数据库
1.直接删除没有表的库
drop database 库名;
2.删除有表的库
drop database if exists 库名 cascade;
3.避免不存在错误
drop database if exists 库名;
5.表操作
1.默认建表
create table 表名
(
id bigint,
name string,
age int,
gender string,
clazz string
)
row format delimited fields terminated by ','; //必选,指定分隔符
(传入的数据要和建表时侯指定的分隔符相同)
2.指定location建表
1.如果创建一张表,未指定位置,那么其会指定在/user/hive/warehouse/bigdata30.db下面创建,再hdfs上面可以看见所创建的表名。
2.如果指定位置进行创建,但是位置最后没有包含表名,再hdfs上看不到所对应的表名。
指定位置创建对应的表的时候在指定的位置最后要带上所创建的表名。
create table IF NOT EXISTS students2
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/bigdata30/students2'; // 指定Hive表的数据的存储位置,一般在数据已经上传到HDFS,想要直接使用,会指定Location,通常Locaion会跟外部表一起使用,内部表一般使用默认的location
3.指定存储格式
create table if not exists 表名
(
id bigint,
name string
)
row format delimited fields terminated by ','
stored as orc //指定存储格式为orc
location '/bigdata30/out6';
如果不指定,默认为textfile,注意:除textfile以外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。
4.将查询结果创建为一个新表
创建一张表 ,将某个语句所查询到的数据进行储存,专门用来存储查询语句的表
CREATE TABLE 新表名 AS SELECT 查询语句;
CREATE TABLE adult_students AS
SELECT * FROM students
WHERE age >= 18;
这个语句的含义是,从students
表格中选择所有年龄大于等于18岁的学生信息,并将结果存储到名为adult_students
的新表格中。
5.模仿已存在表的格式创建不带数据的相同格式的表
这个语法是在数据库中创建一个新表,但是不会复制数据,只会复制表结构,模仿另一张表的形式创建新表格。它的形式是:
CREATE TABLE 新表名 LIKE 要模仿的表名;
举个例子,假设我们有一个名为employees
的表格,其中包含员工的姓名、工号、部门等信息。我们想要创建一个结构与employees
相同但不含数据的新表格employees_backup
,可以执行以下语句:
CREATE TABLE employees_backup LIKE employees;
简单用户信息表创建:
create table t_user(
id int,
uname string,
pwd string,
gender string,
age int
)
row format delimited fields terminated by ','
lines terminated by '\n'; //满一行就换行
1,admin,123456,男,18
2,zhangsan,abc123,男,23
3,lisi,654321,女,16
复杂人员信息表创建:
create table IF NOT EXISTS t_person(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string ,city:string>
)
row format delimited fields terminated by ',' -- 列与列之间的分隔符
collection items terminated by '_' -- 元素与元素之间分隔符
map keys terminated by ':' -- Map数据类型键与值之间的分隔符
lines terminated by '\n'; -- 行与行之间的换行符
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,beng bu_anhui
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,he fei_anhui
6.表详细信息
show tables;
show tables like 'u*';
desc t_person;
desc formatted students; // 更加详细
7.修改列
查询表结构
desc students2;
添加列
alter table students2 add columns (education string);
ALTER TABLE 表名 ADD COLUMN 列名 数据类型;
查询表结构
desc students2;
更新列
alter table stduents2 change education educationnew string;
ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型;
8.删除表
drop table students2;
6.Hive内外部表
面试题:内部表和外部表的区别?如何创建外部表?工作中使用外部表
1.hive内部表
当创建好表的时候,HDFS会在当前表所属的库中创建一个文件夹
当设置表路径的时候,如果直接指向一个已有的路径,可以直接去使用文件夹中的数据
当load数据的时候,就会将数据文件存放到表对应的文件夹中
而且数据一旦被load,就不能被修改
我们查询数据也是查询文件中的文件,这些数据最终都会存放到HDFS
当我们删除表的时候,表对应的文件夹会被删除,同时数据也会被删除
默认建表的类型就是内部表
// 内部表
create table students_internal
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input2';
hive> dfs -put /usr/local/soft/data/students.txt /input2/;
2.Hive外部表
(多了个 external 关键字)
外部表说明
外部表因为是指定其他的hdfs路径的数据加载到表中来,所以hive会认为自己不完全独占这份数据
删除hive表的时候,数据仍然保存在hdfs中,不会删除。
// 外部表
create external table students_external
(
id bigint,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input3';
hive> dfs -put /usr/local/soft/data/students.txt /input3/;
删除表测试一下:
hive> drop table students_internal;
Moved: 'hdfs://master:9000/input2' to trash at: hdfs://master:9000/user/root/.Trash/Current
OK
Time taken: 0.474 seconds
hive> drop table students_external;
OK
Time taken: 0.09 seconds
hive>
一般在公司中,使用外部表多一点,因为数据可以需要被多个程序使用,避免误删,通常外部表会结合location一起使用
外部表还可以将其他数据源中的数据 映射到 hive中,比如说:hbase,ElasticSearch......
设计外部表的初衷就是 让 表的元数据 与 数据 解耦
HIVE从入门到精通------(1)hive的基本操作的更多相关文章
- Spark入门到精通--(第九节)环境搭建(Hive搭建)
上一节搭建完了Hadoop集群,这一节我们来搭建Hive集群,主要是后面的Spark SQL要用到Hive的环境. Hive下载安装 下载Hive 0.13的软件包,可以在百度网盘进行下载.链接: h ...
- 大数据入门到精通18--sqoop 导入关系库到hdfs中和hive表中
一,选择数据库,这里使用标准mysql sakila数据库 mysql -u root -D sakila -p 二.首先尝试把表中的数据导入到hdfs文件中,这样后续就可以使用spark来dataf ...
- [Hadoop大数据]——Hive部署入门教程
Hive是为了解决hadoop中mapreduce编写困难,提供给熟悉sql的人使用的.只要你对SQL有一定的了解,就能通过Hive写出mapreduce的程序,而不需要去学习hadoop中的api. ...
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...
- Spark入门实战系列--5.Hive(下)--Hive实战
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Hive操作演示 1.1 内部表 1.1.1 创建表并加载数据 第一步 启动HDFS ...
- Hadoop生态圈-Hive快速入门篇之HQL的基础语法
Hadoop生态圈-Hive快速入门篇之HQL的基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的重点是介绍Hive中常见的数据类型,DDL数据定义,DML数据操作 ...
- Hadoop生态圈-Hive快速入门篇之Hive环境搭建
Hadoop生态圈-Hive快速入门篇之Hive环境搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据仓库(理论性知识大多摘自百度百科) 1>.什么是数据仓库 数据 ...
- hive编程入门课程(加精)
hive编程入门课程 http://wenku.baidu.com/link?url=BfyZWjz48G_6UJImzWw39OLB0sUrIYEYxoxNpaFbADUQekmOvQy4FPY1f ...
- [转帖]Hive 快速入门(全面)
Hive 快速入门(全面) 2018-07-30 16:11:56 琅琊山二当家 阅读数 4343更多 分类专栏: hadoop 大数据 转载: https://www.codercto.com/ ...
- hive数据仓库入门到实战及面试
第一章.hive入门 一.hive入门手册 1.什么是数据仓库 1.1数据仓库概念 对历史数据变化的统计,从而支撑企业的决策.比如:某个商品最近一个月的销量,预判下个月应该销售多少,从而补充多少货源. ...
随机推荐
- 解决Host key verification failed.(亲测有效)
哈喽哇,今天在访问远程服务器的时候,出现了一个小问题. 原因:之前ssh联系过服务器,重置服务器后,再次连接服务器,就会出这个问题. 一.发现问题 问题如下图代码: $ ssh root@108.61 ...
- Centos 密码过期问题 password has expired
1.这个主要是由/etc/login.defs参数文件中的一些参数控制的的.它主要用于用户账号限制PASS_MAX_DAYS 60 #密码最大有效期,此处参数PASS_MAX_DAYS为60, ...
- Flutter 多线程实现
异步Isolate实现多线程 最近在看Flutter开发相关知识点,对照着Android原生,探究了下多线程实现方式.在Flutter中有 Isolate,隔离,它的实现原理并不是内存共享的,它更 ...
- linux下vim的使用以及高效率的技巧
目录 一.关于vim编辑器 二.vim编辑器的模式 三.一般模式下的基础操作 四.V模式(列模式)的基础操作 五.命令模式下的基础操作 六.自定义vim环境 七.vim同时打开多个文件 八.比较两个文 ...
- 【asp.net】滑块验证码(分享一个从github上下载的源码)
思路: 1. 准备好10张或20张不同规格的图片,按规格分类到不同文件夹,每个文件夹的图片从1开始顺序递增命名,为了随机选择图片. 2.前端提交规格比如200*300,根据规格选择原图,并初始化 ...
- tkinter小例子
from tkinter import * def on_click(): label['text'] = text.get() root = Tk(className='hello') root.m ...
- Android 13 - Media框架(31)- ACodec(七)
关注公众号免费阅读全文,进入音视频开发技术分享群! 之前的章节中我们解了 input buffer 是如何传递给 OMX 的,以及Output buffer 是如何分配并且注册给 OMX 的.这一节我 ...
- 用Yacht管理docker容器
今天是六一儿童节,祝大小朋友们节日快乐! 从今天开始起,防范区的上海市民可以自由出入小区了.始于愚人节,终于儿童节,整整两个月时间,终于迎来了期盼已久的自由和正常. 周一上午的的核酸可能是我们最后一次 ...
- MYSQL 移机重装步骤(windows11)
MYSQL 移机重装步骤(windows11) 目的:已有电脑 A,D盘安装有mysql(安装方式为免安装) , 准备在另一台电脑B上,复制安装电脑A上的mysql(8.0.23版本) . 要 ...
- (八十八)c#Winform自定义控件-转子
官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...