- 1.1 Hive 的起源
- 1.2 数据仓库工具 Hive
- 1.3 Hive 数据管理
- 1.4 Hive的内外表
- 1.4.2 查询表
- 1.4.2 创建内部表
- 1.4.3 创建外部表
- 1.5 Hive 小实 ***
- 1.5.1 创表并插入
- 1.5.2 实现行转列
- 1.6 Hive 安装模式
- Hive起源于Facebook(一个美国的社交服务网络)。Facebook有着大量的数据,而Hadoop是一个开源的MapReduce实现,可以轻松处理大量的数据。
- 但是MapReduce程序对于Java程序员来说比较容易写,但是对于其他语言使用者来说不太方便。此时Facebook最早地开始研发Hive,它让对Hadoop使用SQL查询(实际上SQL后台转化为了MapReduce)成为可能,那些非Java程序员也可以更方便地使用。hive最早的目的也就是为了分析处理海量的日志。
- Hive是一个数据仓库技术,一次将一个SQL语句转化为 Mapreduce 代码,然后对代码进行编译,最后优化执行。
- Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。
- Hive做为 Hadoop 的数据仓库处理工具,它所有的数据都存储在Hadoop 兼容的文件系统中。
- 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可以用来对数据进行提取转换加载。
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仅仅删除外部表的元数据,数据是不会删除。
查询表是内部表还是外部表。例如:show create table person;
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 安装模式
- 嵌入模式
- 本地模式
- 远程模式
内置的Derby主要问题是并发性能很差,可以理解为单线程 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)