Hadoop:Hive 数据管理、内外表、安装模式操作

x33g5p2x  于2021-11-21 转载在 Hadoop  
字(2.7k)|赞(0)|评价(0)|浏览(735)

① Hive 数据管理、内外表、安装模式操作

② Hive:用SQL对数据进行操作,导入数据、清洗脏数据、统计数据订单

③ Hive:多种方式建表,需求操作

④ Hive:分区原因、创建分区、静态分区 、动态分区

⑤ Hive:分桶的简介、原理、应用、创建

⑥ Hive:优化 Reduce,查询过程;判断数据倾斜,MAPJOIN

1.1 Hive 的起源

  1. Hive起源于Facebook(一个美国的社交服务网络)。Facebook有着大量的数据,而Hadoop是一个开源的MapReduce实现,可以轻松处理大量的数据。
  2. 但是MapReduce程序对于Java程序员来说比较容易写,但是对于其他语言使用者来说不太方便。此时Facebook最早地开始研发Hive,它让对Hadoop使用SQL查询(实际上SQL后台转化为了MapReduce)成为可能,那些非Java程序员也可以更方便地使用。hive最早的目的也就是为了分析处理海量的日志。
  3. Hive是一个数据仓库技术,一次将一个SQL语句转化为 Mapreduce 代码,然后对代码进行编译,最后优化执行。
  4. Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。
  5. Hive做为 Hadoop 的数据仓库处理工具,它所有的数据都存储在Hadoop 兼容的文件系统中。
  6. Hive将元数据存储在关系数据库管理系统 (RDBMS) 中,一般常用 MySQL和Derby。默认情况下,Hive 元数据保存在内嵌的 Derby数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则需要一个独立的元数据库,使用MySQL 作为元数据库,Hive内部对 MySQL 提供了很好的支持。

1.2 数据仓库工具 Hive

  • Hive提供了一个类似SQL查询语句,即HQL来查询数据;
  • Hive将SQL语句转换成M/R Job,然后在Hadoop上执行;
  • Hive是建立在Hadoop HDFS上的数据仓库基础架构;
  • Hive可以用来对数据进行提取转换加载。

1.3 Hive 数据管理

Hive的表= HDFS的目录
Hive数据=HDFS文件

  • 元信息反应的是表的信息,和表中数据无关。
  • Hive中的元数据包括表的名字、列(字段)名字、分区名字及其属性、表的属性(是否为外部表)、表的数据所在目录等。

在设置 hive-site.xml 配置了原数据的存储位置。

什么叫做 Hive的表= HDFS的目录?
进入hive,输入命令显示数据库,show databases;

在HDFS查询下元数据存储位置:fs -ls /user/hive/warehouse

可以看出,在Hive数据库的sptest,是HDFS的一个目录sptest.db 。

sptest的表 person,也是一个目录,里面的数据是HDFS的文件。

1.4 Hive的内外表

Hive的create创建表的时候,选择的创建方式:

  • 内部表:create table [表名] (默认内部表)
  • 外部表:create external table [表名] location ‘hdfs_path ’(hdfs_path必须是文件夹, 否则会报错 )

特点:

  • 在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而内部表则不一样;
  • 在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除。
1.4.2 查询表

查询表是内部表还是外部表。例如:show create table person;

1.4.2 创建内部表
CREATE TABLE `article_as`(
`sentence` string);

load data local inpath '/usr/hadoop/badou/The_Man_of_Property.txt' overwrite into table article_as;

select * from article_as limit 5;

Hive已经有article_as,再看看HDSFhadoop fs -ls /user/hive/warehouse/sptest.db/a*

当我们把article_as表删除,那HDFS的文件是否也同样删除呢?

drop table article_as;

desc article_as;

hadoop fs -ls /user/hive/warehouse/sptest.db

在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉。

1.4.3 创建外部表
CREATE EXTERNAL TABLE `article_as`(
`sentence` string);

load data local inpath '/usr/hadoop/badou/The_Man_of_Property.txt' overwrite into table article_as;

select * from article_as limit 1;

Hive已经有article_as,再看看HDSFhadoop fs -ls /user/hive/warehouse/sptest.db/a*

当我们把article_as表删除,那HDFS的文件是否也同样删除呢?

drop table article_as;
desc article_as;
hadoop fs -ls /user/hive/warehouse/sptest.db/a*

删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除。

1.5 Hive 小实操

1.5.1 创表并插入

创建一个数据库 badou,插入文件The_Man_of_Property.txt 作为 article_as。

create database badou;
use badou;

CREATE TABLE `article_as`(
`sentence` string);
load data local inpath '/usr/hadoop/badou/The_Man_of_Property.txt' overwrite into table article_as;
select * from article_as limit 2;

1.5.2 实现行转列
select word, count(*) AS cnt from (select explode(split(sentence,' ')) word
from article_as) t
group by word limit 10

1.6 Hive 安装模式

  1. 嵌入模式
  2. 本地模式
  3. 远程模式

内置的Derby主要问题是并发性能很差,可以理解为单线程操作。

相关文章