设置了HDFS存储目录的磁盘空间配额,CarbonData为什么会发生异常?
问题
设置了HDFS存储目录的磁盘空间配额,CarbonData为什么会发生异常。
回答
创建、加载、更新表或进行其他操作时,数据会被写入HDFS。若HDFS目录的磁盘空间配额不足,则操作失败并发生以下异常。
org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/tenant is exceeded: quota = 314572800 B = 300 MB but diskspace consumed = 402653184 B = 384 MB at org.apache.hadoop.hdfs.server.namenode.DirectoryWithQuotaFeature.verifyStoragespaceQuota(DirectoryWithQuotaFeature.java:211) at org.apache.hadoop.hdfs.server.namenode.DirectoryWithQuotaFeature.verifyQuota(DirectoryWithQuotaFeature.java:239) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyQuota(FSDirectory.java:941) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.updateCount(FSDirectory.java:745)
若发生此异常,请为租户配置足够的磁盘空间配额。
例如:
需要的磁盘空间配置可以按照如下方法计算:
如果HDFS的副本数为3, HDFS默认的块大小为128MB,则最小需要384MB的磁盘空间用于写表的schema文件到HDFS上。计算公式:no. of block x block_size x replication_factor of the schema file = 1 x 128 x 3 = 384 MB
数据加载时,由于默认块大小为1024MB,每个fact文件需要的最小空间为3072MB。