美文网首页
Hadoop -Hive1

Hadoop -Hive1

作者: 大空翼123 | 来源:发表于2020-12-16 15:00 被阅读0次

Hive是什么

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

用写sql的形式来写mapreduce

本质是:将HQL转化成MapReduce程序

1)Hive处理的数据存储在HDFS

2)Hive分析数据底层的实现是MapReduce

3)执行程序运行在Yarn上

Hive的缺点

Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。

Hive的HQL表达能力有限,数据挖掘方面不擅长

Hive的效率比较低

元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;推荐使用MySQL存储Metastore

HIve实际操作

退出 quit;

删除已创建的student表 drop table student;

 ROW FORMAT DELIMITED FIELDS TERMINATED   BY '\t';  分隔符换行

文件加载到数据表 load data local inpath '/opt/module/datas/student.txt' into table student;

Mysql

mysql -u root -p  输入密码

退出MySQL quit;

有了MySQL 可以启动多个hive

HiveJDBC

启动hiveservicer2先退出hive quit;   bin/hiveserver2

在启动hiveservicer2.启动后没有显示,换一个窗口启动beeline   bin/beeline

退出!quit

连接hiveserver2

!connect jdbc:hive2://zy100:10000(回车)

beeline可以更好的结构化显示数据表

“-e”不进入hive的交互窗口执行sql语句     eg:bin/hive -e "select idfrom student;"

-f”执行脚本中sql语句      eg:bin/hive -f /opt/module/datas/hivef.sql

在hive cli命令窗口中如何查看hdfs文件系统

hive(default)>dfs -ls /;

在hive cli命令窗口中如何查看本地文件系统

hive(default)>! ls/opt/module/datas;

! ls -l /opt/module/datas;

Hive数据类型

类型转化

隐式类型转换规则如下

(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。

(2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。

(3)TINYINT、SMALLINT、INT都可以转换为FLOAT。

(4)BOOLEAN类型不可以转换为任何其它的类型。

数据库DDL

创建数据库

创建一个数据库,数据库在HDFS上的默认存储路径是/user/hive/warehouse/*.db

避免要创建的数据库已经存在错误,增加if not exists判断。

创建一个数据库,指定数据库在HDFS上存放的位置

create database db_hive2 location '/db_hive2.db';

显示数据库信息

desc database db_hive;

删除数据库

删除空数据库  drop database db_hive2;

数据库不为空,可以采用cascade命令,强制删  drop database db_hive cascade;

创建表

REATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

[(col_name data_type [COMMENT col_comment], ...)]  [ROW FORMAT row_format]

管理表(内部表)

当我们删除一个管理表时,Hive也会删除这个表中数据


外部表

删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

外部表删除后,hdfs中的数据还在,但是metadata中stu_external的元数据已被删除

管理表与外部表的可以互相转换


分区表

Hive中的分区就是分目录

分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。

创建分区表

create table dept_partition(

deptno int, dname string, locstring

)

partitioned by (month string)

row format delimited fieldsterminated by '\t';

加载数据到分区

load data local inpath'/opt/module/datas/dept.txt' into table default.dept_partitionpartition(month='201707’);

查询分区表中数据

select * from dept_partitionwhere month='201709';

可以增加删除分区

可以创建二级分区表

可以正常加载数据

load data local inpath'/opt/module/datas/dept.txt' into table

 db_hive.dept_partition2partition(month='201709', day='13');

把数据直接上传到分区目录上,让分区表和数据产生关联

 dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=10;

load data local inpath'/opt/module/datas/dept.txt' into table dept_partition2partition(month='201709',day='10');

增加/修改/替换列信息


DML数据操作

语法

hive> load data [local]inpath '/opt/module/datas/student.txt' [overwrite] into table student[partition (partcol1=val1,…)];

(1)load data:表示加载数据

(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表 HDFS中代入数据直接剪切源文件

(3)inpath:表示加载数据的路径

(4)overwrite:表示覆盖表中已有数据,否则表示追加  ;有分区insert overwrite会只重写当前分区数据。

(5)into table:表示加载到哪张表

(6)student:表示具体的表

(7)partition:表示上传到指定分区

数据导出

Insert导出

查询结果导出

insert overwrite local directory '/opt/module/datas/export/student'

            select * fromstudent;

格式化导出
insert overwrite local directory '/opt/module/datas/export/student1'

           ROW FORMATDELIMITED FIELDS TERMINATED BY '\t'            select * from student;

导出到HDFS:去掉local

Hadoop命令导出到本地

dfs -get /user/hive/warehouse/student/month=201709/000000_0

/opt/module/datas/export/student3.txt;

Export导出到HDFS上

export table default.student to

 '/user/hive/warehouse/export/student';

Import数据到指定Hive表中

import table student2 partition(month='201709') from

 '/user/hive/warehouse/export/student';

根据目录里的内容包含数据与元数据

清除表中数据(Truncate)

注意:Truncate只能删除管理表,不能删除外部表中数据

hive (default)> truncate table student;

相关文章

网友评论

      本文标题:Hadoop -Hive1

      本文链接:https://www.haomeiwen.com/subject/wpywgktx.html