(十一)Hive数据仓库的使用

佐手、 提交于 2019-12-09 12:54:23

目录

一、目的及要求:

目的:

要求:

二、环境要求:

所需环境:

集群规划:

三、详细步骤:

步骤一:启动

步骤二:数据仓库的使用

1、查看表信息

2、hive常用命令

3、Hive的数据模型_内部表;

4、Hive的数据模型_分区表

5、Hive的数据模型_外部表

6、Hive的数据模型_桶表

7、Hive的数据模型_视图

四、总结

一、目的及要求:

目的:

        掌握数据仓库Hive的使用

要求:

        1.掌握数据仓库Hive的使用;

        2.能够正常操作数据库、表、数据。

二、环境要求:

所需环境:

  1. 五台独立PC式虚拟机;
  2. 主机之间有有效的网络连接;
  3. 每台主机内存2G以上,磁盘剩余空间500M以上;
  4. 所有主机上安装CentOS7-64位操作系统;
  5. 已完成Hadoop平台的搭建;
  6. 已完成MySQL数据库平台的搭建;
  7. 已完成Hive数据仓库的安装。

集群规划:

主机名

IP地址

服务描述

Cluster-01

192.168.10.111

MC管理节点

Cluster-02

192.168.10.112

MC数据服务节点

Cluster-03

192.168.10.113

MC数据服务节点

Cluster-04

192.168.10.113

MC SQL服务节点

Cluster-05

192.168.10.114

MC SQL服务节点

 

 

 

 

 

三、详细步骤:

步骤一:启动

Hadoop、Hbase、Hive、Sqoop使用使用专门用于集群的用户admin进行。

启动HBase集群之前首先确保Zookeeper集群已被开启状态。 (实验5台)

Zookeeper的启动需要分别在每个计算机的节点上手动启动。如果家目录下执行启动报错,则需要进入zookeeper/bin目录执行启动命令。

启动HBase集群之前首先确保Hadoop集群已被开启状态。 (实验5台)

Hadoop只需要在主节点执行启动命令。

1、集群中所有主机上使用命令“zkServer.sh start”启动Zookeeper服务的脚本,使用命令“zkServer.sh status”查看该节点Zookeeper服务当前的状态,若集群中只有一个“leader”节点,其余的均为“follower”节点,则集群的工作状态正常;

2、在主节点使用“$start-all.sh”,备用主节点使用“$yarn-daemon.sh start resourcemanager”命令,启动Hadoop集群,在主节点查看Java进程信息,若有名为“NameNode”、“ResourceManager”的两个进程,则表示Hadoop集群的主节点启动成功。在每台数据节点,若有名为“DataNode”和“NodeManager”的两个进程,则表示Hadoop集群的数据节点启动成功;

 

3、确定Hadoop集群已启动状态,然后在主节点使用此命令,启动HBase集群。并在集群中所有主机上使用命令“jps”查看进程;

  

4用root用户登录,并开启mysql集群,并在管理主机上查看集群是否全部已连接;

5、在主节点使用命令“hive”启动Hive,启动成功后能够进入Hive的控制台;

6、在控制台中使用命令“show databases;”查看当前的数据库列表;

步骤二:数据仓库的使用

1、查看表信息

在http://192.168.10.111:50070/查看表信息;

2、hive常用命令

(1)修改参数允许强制分桶,也可以修改hive_site.xml文件中的参数改为true;

 

(2)创建数据库;

(3)使用数据库;

(4)创建表;

(5)删除表;

(6)删除数据库;

(7)修改配置文件,使在导入数据的工程中,如果在见表的过程中没有指定location,那么就会在hive.metastore.warehouse.dir指定路径下,以表名创建一个文件夹,之后所有的数据就会存储在此文件夹中;

配置文件“/home/admin/hive/apache-hive-2.1.1-bin/conf/hive-site.xml”

3、Hive的数据模型_内部表;

练习:启动Hive,启动成功后能够进入Hive的控制台

(1)创建数据库,并使用数据库test2;

 

(2)创建数据库,并使用数据库test3;

 

(3)创建表t1、t2、t3、t4;

(4)查看hadoop集群中Hive仓库中的表;

(5)向t1表中添加列,并显示表信息;

(6)查看/user/hive/warehouse/目录下的test2.db和test3.db文件夹;

4、Hive的数据模型_分区表

(1)创建数据库test4,并在test4数据库中准备表数据;

(2)准备文本数据:admin用户家目录下新建sampledata.txt;

 

(3)将文本数据插入到数据表;

(4)向分区表中插入数据;

 

(5)查看表的分区信息;

(6)登录http://192.168.10.111:8088/cluster/apps可以查看job执行状态;

5、Hive的数据模型_外部表

 (1)准备数据:在admin家目录下分别新建student1.txt、student2.txt、student3.txt、内容:

student1.txt内容: Tom,M,60,80,96

Mary,F,11,22,33

student2.txt内容: Jerry,M,90,11,23

student3.txt内容: Rose,M,78,77,76

Mike,F,99,98,98

 

 

 

(2)在hdfs上创建input目录,将文件放入HDFS文件系统;

(3)创建数据库test5,并在数据库test5中创建外部表external_student,并查询;

(4)删除HDFS上的student1.txt;

(5)查询外部表;

(6)将student.txt重新放入HDFS input目录下;

 

(7)查询外部表;

 

6、Hive的数据模型_桶表

(1)创建数据库test6,并新建一个非桶表;

(2)在admin用户家目录下新建user.txt内容;

(3)将文本数据插入到非桶数据表;

(4)查看桶表

7、Hive的数据模型_视图

(1)创建数据库test7,在test7中创建一个测试表test01,查看表结构;

(2)在admin用户的家目录下准备文本数据data1.txt;

 

(3)将文本数据导入 test01表,并查询test01表;

 

(4)创建一个View之前,使用explain命令查看创建View的命令是如何被Hive解释执行的;

(5)实际创建一个View;

 

(6)执行View之前,先explain查看实际被翻译后的执行过程;

(7)最后,对View执行一次查询,显示Stage-1阶段对原始表test进行了MapReduce过程;

(8)登录http://192.168.10.111:8088/cluster/apps可以查看job执行状态;

 

四、总结

问题一:

[root@localhost65apache-hive-2.1.1-bin]# hive

SLF4J: Class pathcontains multiple SLF4J bindings.

SLF4J: Found binding in[jar:file:/usr/local/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found bindingin[jar:file:/usr/local/hadoop-2.6.2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Seehttp://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual bindingis of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initializedusing configuration in file:/usr/local/apache-hive-2.1.1-bin/conf/hive-log4j2.propertiesAsync: true

Exception in thread"main" java.lang.RuntimeException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:591)

    at

 ································

The last packet sentsuccessfully to the server was 0 milliseconds ago.

原因分析:hive中的日志和hadoop中日志包冲突导致

解决方法:将hive中的日志包去除即可(不要删除,修改名称即可)。如下:

[admin@Cluster-01apache-hive-2.1.1-bin]#mv/usr/local/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar/usr/local/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar.bak

[admin@Cluater-01apache-hive-2.1.1-bin]#

 

问题二:启动hive正常,进mysql查看hive元数据库myhive也正常,但在hive中执行show databases指令报如下错误:

解决方案:经过报错信息分析发现是metastore服务没有启动。

启动metastore(进安装hive的bin目录下执行以下命令):

bin/hive --service metastore &

启动metastore后再启动hive,然后就可以正常执行show databases指令

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!