可以通过 ps -ef|grep hive 来看hive 的端口号,然后kill 掉相关的进程。
用来启动metastore
用来启动hiveserver2
可以通过查看日志,来确认是否正常启动。
注意!如果 hiveserver2 不启动,jdbc将无法正常连接
摘要: Hive , Shell
Hive复制表包括两种
对于非分区表如果要完全复制一张表到另一张表,直接使用CREATE TABLE ... AS语句即可,比如以下复制一个表的两个字段以及字段的值到另一个表
对于分区表如果使用CREATE TABLE ... AS语句则分区失效,但是可以执行不报错,且字段和数据都能完全复制
以上有一张分区表,以dt字段作为分区,使用CREATE TABLE ... AS进行全表复制
检查表结构和表数据量都没有问题
检查分区,报错此表不是分区表,is not a partitioned table,但是在表结构中确实存在本来的分区字段dt,此时dt字段的分区功能失效,但是数据保留住了
分区表的全称复制且带有分区的 *** 作方法需要使用 LIKE 语句复制到分区信息,具体步骤如下
第一步复制得到一张空表,具有原表的表结构和分区信息
下一步使用hdfs命令 *** 作将原表在hdfs的存储路径复制到新表的路径, 一张表的存储路径是一个目录,该目录下还存在子目录,每一个子目录代表一个分区,在分区目录下就是数据文件,数据文件是part开头格式,由Hive的分桶策略将同一分区下的数据进行划分
复制语句采用 * 通配符将原表目录下所有文件复制到新表路径下,查看新表的hdfs路径下数据文件
此时新表虽然对应数仓目录下有数据文件,但是在Hive客户端还是查不到数据为空表, 因为一个个数据分区不存在在新表的元数据中,数据是以分区目录为单位聚合的,新表目前查不到一个分区则自然查不到数据
下一步修复表的分区元数据,使用 MSCK REPAIR TABLE 命令
由输出的执行过程可见MSCK REPAIR TABLE命令先检查了表的分区信息是否存在在元数据,然后对不存在的分区信息进行修复,修复后该表即可正常使用
MSCK REPAIR TABLE 的作用是 只需要只用这一个命令就可以 快速 , 自动化 地添加(修复)全部分区 ,在Hive中如果先建分区表,并且以数据拷贝到对应HDFS目录这种方式作为初始化,需要手动添加分区才能使用,如果分区过多,使用 ALTER TABLE ADD PARTITION 极为不变,下面做一下测试看ALTER TABLE ADD PARTITION是否也能完成分区表的完全复制
下一步采用手动添加1个分区dt='20201209'
验证了手动分区能够完成, MSCK REPAIR TABLE只是自动化的扫描一遍数仓目录下的分区信息(dt='20201209' 到 dt='20210317') ,如果编写一个Shell脚本也能实现如下
运行这个Shell脚本后能达到同样的效果,但是这个脚本执行了15分钟,需要频繁启动和关闭Hive进程
相比mysql,hive有严格模式存在,为了不错误扫描整个数据,hive的分区表会将数据分成几个分区。查询分区表中的数据时,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。也就是说用户不允许扫描所有的分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速,如果没有进行分区限制的查询会消耗很大的资源来处理这个表
在查询数据时无需加where条件指定分区。默认情况下hive就是非严格模式。
可以防止在查询数据时因为误 *** 作扫描整个数据。(你知道的,当数据很大时,扫描所有数据会非常耗时间)
我们在没设置初始化文件.hiverc的时候,在hive命令行中输入
但是这种方法不是很可靠,因为他只存在在这一次hive中,当你关闭hive后再打开,他就会恢复成默认。那么我们需要修改hive启动的初始化文件.hiverc
这个文件在: hive的安装文件夹中/bin
写入
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)