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的基本操作的更多相关文章

  1. Spark入门到精通--(第九节)环境搭建(Hive搭建)

    上一节搭建完了Hadoop集群,这一节我们来搭建Hive集群,主要是后面的Spark SQL要用到Hive的环境. Hive下载安装 下载Hive 0.13的软件包,可以在百度网盘进行下载.链接: h ...

  2. 大数据入门到精通18--sqoop 导入关系库到hdfs中和hive表中

    一,选择数据库,这里使用标准mysql sakila数据库 mysql -u root -D sakila -p 二.首先尝试把表中的数据导入到hdfs文件中,这样后续就可以使用spark来dataf ...

  3. [Hadoop大数据]——Hive部署入门教程

    Hive是为了解决hadoop中mapreduce编写困难,提供给熟悉sql的人使用的.只要你对SQL有一定的了解,就能通过Hive写出mapreduce的程序,而不需要去学习hadoop中的api. ...

  4. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

  5. Spark入门实战系列--5.Hive(下)--Hive实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Hive操作演示 1.1 内部表 1.1.1 创建表并加载数据 第一步   启动HDFS ...

  6. Hadoop生态圈-Hive快速入门篇之HQL的基础语法

    Hadoop生态圈-Hive快速入门篇之HQL的基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的重点是介绍Hive中常见的数据类型,DDL数据定义,DML数据操作 ...

  7. Hadoop生态圈-Hive快速入门篇之Hive环境搭建

    Hadoop生态圈-Hive快速入门篇之Hive环境搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据仓库(理论性知识大多摘自百度百科) 1>.什么是数据仓库 数据 ...

  8. hive编程入门课程(加精)

    hive编程入门课程 http://wenku.baidu.com/link?url=BfyZWjz48G_6UJImzWw39OLB0sUrIYEYxoxNpaFbADUQekmOvQy4FPY1f ...

  9. [转帖]Hive 快速入门(全面)

    Hive 快速入门(全面) 2018-07-30 16:11:56 琅琊山二当家 阅读数 4343更多 分类专栏: hadoop 大数据   转载: https://www.codercto.com/ ...

  10. hive数据仓库入门到实战及面试

    第一章.hive入门 一.hive入门手册 1.什么是数据仓库 1.1数据仓库概念 对历史数据变化的统计,从而支撑企业的决策.比如:某个商品最近一个月的销量,预判下个月应该销售多少,从而补充多少货源. ...

随机推荐

  1. SpringBoot模拟插入1000000万条数据

    一.数据库表准备 CREATE TABLE `student` ( `id` bigint NOT NULL COMMENT '用户id', `name` varchar(50) COLLATE ut ...

  2. mac本地搭建ollama

    mac本地搭建ollama webUI *简介:ollama-webUI是一个开源项目,简化了安装部署过程,并能直接管理各种大型语言模型(LLM).本文将介绍如何在你的macOS上安装Ollama服务 ...

  3. 🔥🔥httpsok-谷歌免费SSL证书如何申请

    httpsok-谷歌免费SSL证书如何申请 使用场景: 部署CDN证书.OSS云存储证书 证书类型: 单域名 多域名 通配符域名 混合域名 证书厂商: ZeroSSL Let's Encrypt Go ...

  4. layui表单验证抽离成单独模块手动调用

    模块名:validateForm 验证添加方法和原来一样(lay-verify=''),可以多个表单一起验证,任何任何一个验证不通过就会返回.使用: var boolResult = validate ...

  5. mybatis-puls解决多数据源事务的问题

    直接上代码: pom: <!--JTA组件核心依赖--> <dependency> <groupId>org.springframework.boot</gr ...

  6. 我对IdentityServer4的初步了解

    官网:https://identityserver4.readthedocs.io/en/latest/quickstarts/2_interactive_aspnetcore.html 官网例子:h ...

  7. 记录一次HTTPS无法访问的错误

    Https无法连接Nginx,日志报错 *2179 SSL_do_handshake() failed (SSL: error:1420918C:SSL routines:tls_early_post ...

  8. JS / jQuery 刷新页面的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 通过 InnoSetup 美化安装界面

    InnoSetup 的美化相应的帖子也比较多,但是代码不是很全...所以我专门出了这篇文章来记录下这个美化过程.废话不多说,先上个成果: 前端er们可以直接下载 vue-nw-seed 这个分支,一键 ...

  10. 申请并部署免费的 SSL/TLS 证书

    对于囊中羞涩的我们来说,只要能白嫖,就绝不乱花钱.惯常申请免费 SSL/TLS 证书的途径有: 各大云服务平台限量提供.比如阿里云会给每个账号每年 20 个证书的申请额度.缺点是不支持泛域名,一年后须 ...