• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Hadoop实战:Hive操作使用

Hadoop 彭东稳 8年前 (2017-06-16) 30030次浏览 已收录 0个评论

Hive表类型测试

内部表

数据准备,先在HDFS上准备文本文件,逗号分割,并上传到/test目录,然后在Hive里创建表,表名和文件名要相同。

Hive创建表

前半部分跟我们使用SQL语法差不多,后面的设置表示我们以’,’为分隔符导入数据。

Hive加载HDFS数据

同一个文件可以多次加载(追加数据),同时会在HDFS数据目录下多生成一个文件。另外这里加载数据local关键字表示我们从本地文件加载,如果不加local表示从HDFS中加载数据。

Hive查看数据

你也可以使用select id from table_test,但是注意在Hive中除了select * from table之外可以使用全表扫描之外,其余任何查询都需要走MapRedure。

查看HDFS数据文件

注意文件权限属主为root,这是因为我是在root用户下进入hive的,一般在Hadoop用户下进入hive命令行进行创建表。

从HDFS加载数据到Hive

先上传数据到HDFS集群中。

创建表

加载数据

注意,如果从HDFS加载数据到Hive后,原有的HDFS的数据文件就不会存在了。

查看HDFS数据文件

再次上传一个文件到对应表的目录(/user/hive/warehouse/db_test.db/hdfs_table)下

再次查看Hive表

可以看到,我们追加的一个表信息也显示出来了。

分区表

创建分区表时,需要给定一个分区字段,这个分区字段可以是已经存在的,也可以是不存在(如果不存在创建表时会自动添加)。Hive分区概念跟MySQL分区差不多。下面创建一个以月为分区的分区表。

查看表信息

加载数据到Hive分区表中,需要指定对应的分区表进行数据加载

查看HDFS数据文件展示样式

可以看到多了对应的分区目录了。

查询数据,查询时有点不太一样,如果给定一个where条件指定分区字段(也就是根据查询字段来进行分区),这样就只会查询这个分区的内容,不需要加载所有表。如果查询字段不是分区字段,那么就需要扫描所有的分区了。如下两个示例:

外部表

Hive支持外部表,外部表跟内部表和分区表不同。只需要在HDFS中有了对应的文件,然后在Hive就可以创建一个表并指定对应的目录就可以直接查数据了,而不需要执行数据加载任务。下面来测试看看:

先在HDFS中创建目录和上传文件:

然后在Hive中直接创建表:

此时,直接查询此表,不需要加载数据了

Hive还支持桶表,这里就不说了,很少用,有兴趣自行查看资料。

最后来一个MapReduce处理Hive的过程

可以好好看一下处理过程,由于是测试环境所以MP时间很久。

视图

另外Hive也支持视图,使用非常简单,如下配置:

Hive元数据信息

然后我们来查看一下Hive元数据表信息,在MySQL的hive库下的DBS表中存储Hive创建的库信息:

DB_ID:库ID,具有唯一性。

DESC:库描述信息。

DB_LOCATION_URI:库在HDFS的URI地址。

NAME:库名称。

OWNER_NAME:库的所有者,用什么系统用户登录Hive创建的,其所有者就是谁,一般要在Hadoop用户下登录Hive。

OWNER_TYPE:库的所有者类型。

在hive库下的TBLS表中存储我们创建的表的元数据信息:

解释几个重要参数:

TBL_ID:表ID,具有唯一性。

CREATE_TIME:表创建时间。

DB_ID:所属库的ID。

LAST_ACCESS_TIME:最后一次访问时间。

OWNER:表的所有者,用什么系统用户登录Hive创建的,其所有者就是谁,一般要在Hadoop用户下登录Hive。

TBL_NAME:表名称。

TBL_TYPE:表类型,MANAGED_TABLE表示受托管的表(如内部表、分区表、桶表),EXTERNAL_TABLE表示外部表,两个有个很大的区别就是受托管的表,当你执行DROP TABLE动作时,会把Hive元数据信息连同HDFS数据也一同删除。而外部表执行DROP TABLE时不会删除HDFS的数据,只是把元数据信息删除了。

<参考>

Hive教程:http://www.yiibai.com/hive/hive_installation.html

使用Hive构建数据库:https://www.ibm.com/developerworks/cn/data/library/bd-hivelibrary/index.html


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!