目录
一、目的及要求:
目的:
掌握数据仓库Hive的使用
要求:
1.掌握数据仓库Hive的使用;
2.能够正常操作数据库、表、数据。
二、环境要求:
所需环境:
- 五台独立PC式虚拟机;
- 主机之间有有效的网络连接;
- 每台主机内存2G以上,磁盘剩余空间500M以上;
- 所有主机上安装CentOS7-64位操作系统;
- 已完成Hadoop平台的搭建;
- 已完成MySQL数据库平台的搭建;
- 已完成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指令
来源:CSDN
作者:T.machine
链接:https://blog.csdn.net/weixin_39329758/article/details/103455266