hive replication的报错总结

这几天在用CDH 的BDR 做hive数据同步,来唠唠遇到过的报错

目录

问题1、space quota不足

关于什么是quota :

设置quota的命令:

查看quota的命令

问题2:报错:java.lang.NullPointerException: summary file location is not present as a value of DsitcpResult

问题3 : MetaException:/user/{db}/{table}/{file-000}.txt is not a directory or unable to create one 


问题1、space quota不足

报错:java.io.IOExeption: Checksum mismatch between hdfs://distcpSourceNS/user/hive/warehouse/edmp_db.db/xxxx and hdfs://dsep-         namservice1//user/hive/warehouse/edmp_db.db/xxxx

这个报错看不出是为啥校验和会不同,接着往下翻其他的报错,看到:

The DiskSpace quota of /user/hive/warehouse/edmp_db.db is exceeded: quota =300GB but diskspace consumed = 300.11GB at xxx

看到这就明白了,是因为space quota不足,导致数据写入不成功,使得校验和失败。修改此目录的space quota

hdfs dfsadmin -setSpacequota 500t /user/hive/warehouse/edmp_db.db

关于什么是quota :

参考文献:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsQuotaAdminGuide.html

quota 有 name quota(用的name的数量)和space quota(用的空间的量),这两个完全独立。

name quota

name quota规定了此目录下文件和目录的最大个数,如果超出此限制,创建文件or目录会失败。对目录改名的话,这个name quota也会保留哦(不要妄想通过改名,去掉此限制,而且如果改名会违反quota的话,改名会失败的)。有个小tip:如果对当前目录设一个小于当前file + directory数量的quota,可以设置成功;如果将一个目录的quota设为1的话,这个目录下将不能放任何东西。

space quota

space quota就是这个目录可以占用的最大字节数。同样的,对目录改名,quota属性将保留。space quota为0时,文件依旧可以被创建,但是不会被分配block。目录不使用主机文件系统空间,也不计入space quota。用于保存文件元数据的主机文件系统空间也不计入配额中。

Storage Type Quotas

存储类型配额规定了存储类型(SSD, DISK, ARCHIVE) . 有了这个配额,你可以更加细粒度的控制集群中空间的使用。要用这个参数,首先得设置存储策略,使得数据可以存放在不同类型的存储设备上。如何设置存储策略见 HDFS Storage Policy Documentation 

 

可以通过storage type quota + name quota + space quota来管理集群的存储。例如:

  1. 对于有设置存储策略的目录,管理员可以设置SSD存储配额小一些,其他磁盘存储配额大一些。HDFS会根据存储策略和总的space quota来存储文件。

  2. 没有设置存储策略的目录,建议不要设置storage type quotas,只设置space quota就好。

  3. 只有DISK不是主存储器的时候(HDFS 将存储分为了  DISK,SSD,ARCHIVE,PROVIDED 四种),才建议使用storage type quota

设置quota的命令:

  • hdfs dfsadmin -setQuota <N> <directory>...<directory>

    设置<directory> 的 name quota 为 N,如果N不是一个正值,或者目录不存在或是个文件,或者目录超出新的quota,都会报错。下面的命令相同

  • hdfs dfsadmin -clrQuota <directory>...<directory>

    清除<directory>的 name quota

  • hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>

    设置<directory>的space quota 为 N ,(文件备份也算在空间配额中,比如一个 1G 的文件,若有两个副本,将一共消耗 3G 的配额)。N 可以写为:

    • 50g ,表示 50 GB

    • 3t , 表示 3TB

  • hdfs dfsadmin -clrSpaceQuota <directory>...<directory>

    清除 space quota

  • hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory>

    设置 storage type quota, storageTypes 有 DISK,SSD,ARCHIVE,PROVIDED .

  • hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>

    清除 storage type quota

查看quota的命令

查看quota 和 当前目录的 name数量、空间使用情况的命令:

  • hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>

     

  1. -q    也显示name quota,以及剩余多少 name 数量

  2. -h    方便“人” 看

  3. -v    显示标题

  4. -t     显示每个存储类型的quota 和剩余的额度。 如果指定storagetype,那就只显示那个存储类型的quota,否则显示所有类型的quota。

 


问题2:报错:java.lang.NullPointerException: summary file location is not present as a value of DsitcpResult

两个不同的复制计划,都报了这个错,发现是两个原因。

1、复制了view表:查看了复制的表,发现都是view,因此BDR没有侦测到需要备份的table(view是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。)

解决方法:在 advanced中 取消选择 “replicate HDFS file” 

 

2、配置的表不存在在此database中(如果是只有几张表不存在,它不会报错)。

这个是怎么排查出来的呢:

我们先kinit hive,然后用beeline连接hive server2,在hive库中

use eca_db;
show tables;

发现没有表。然后又在tn节点上,用

hdfs dfs -ls /user/hive/warehouse/eca/

查看此目录下是否有文件,发现有文件。出现这种情况,可能是因为这些表是外表,删除了表,但是hdfs文件其实还在。后来和源集群确认后,发现源集群只有文件,还没有元数据。(我们是从源集群同步hive表,源集群又是从另一个集群同步hive表,源集群只同步了hdfs文件,还没来得及同步元数据。)

 

问题3 : MetaException:/user/{db}/{table}/{file-000}.txt is not a directory or unable to create one 

先kinit hive, beeline 连接 hive server2 ,然后 use xxx_db;  show create table {table name};

检查发现是 external hive table 在 location上配置到了 file level, 导致 BDR 检查出错

解决方法:另外建立正确的table scheme,然后拷贝这个新建立的table

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值