设为首页 收藏本站
查看: 2581|回复: 0

[经验分享] Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quo

[复制链接]

尚未签到

发表于 2017-12-25 15:08:15 | 显示全部楼层 |阅读模式

  • 集群中遇到了文件个数超出限制的错误:
  0)昨天晚上spark 任务突然抛出了异常:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /mydir is exceeded: quota=100000 file count=100001
  1)错误提示内容信息:集群中遇到了文件个数超出限制的错误。
  2)问题错误来自于hadoop quota设置了限制,但是设置限制的目的是避免集群中有过多的小文件,导致集群利用率不高的情况出现。

  我这个spark job主要处理的任务内容:
  

var conf=new SparkConf().setAppName("test_job")  
var sc
=new SparkContext(conf)  
var hiveContext
=new HiveContext(sc)  

  

import hiveContext.implicits._  

  
hiveContext.sql(
"insert into member_info select t10.*,t11.* from member as t10 inner join member_details as t11 on t10.id=t11.memberid");  



  • 关于hadoop quota的信息:
  hadoop HDFS有以下两种Quota
  

Name Quotas : 限制某个目录下的文件数量  
Space Quotas : 设置某个目录的空间大小
  

  
$hadoop fs -count -q /user/hadoop
  
QUOTA       REMAINING_QUOTA  SPACE_QUOTA  REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT CONTENT_SIZE FILE_NAME
  
none        inf               none        inf             2            1          180         /user/hadoop
  

清除Space Quota
  

$hadoop dfsadmin -clrSpaceQuota /user/hadoop  

设置Name Quota
  设置文件最大quota是1000
  

$hadoop dfsadmin -setQuota 1000 /user/hadoop  

  
$hadoop fs -count -q /user/hadoop
  
QUOTA       REMAINING_QUOTA  SPACE_QUOTA  REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT CONTENT_SIZE FILE_NAME
  
1000             997         1073741824      1073741284            2            1            180     /user/hadoop
  

清除Name Quota
  

$hadoop dfsadmin -clrQuato /user/hadoop  


  • 如何避免集群中过多小文件出现的方法:
  hive下可以通过以下几点去限制:
  1)文件合并
  

set hive.merge.mapredfiles = true #在Map-Reduce的任务结束时合并小文件  

set hive.merge.size.per.task = 128000000 #合并文件的大小  

set hive.merge.smallfiles.avgsize=128000000 #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge  

  2)Map输入合并小文件
  

  set mapred.max.split.size=256000000;  #每个Map最大输入大小  

set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小  

set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小  

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并  

  3)输出合并
  

  set hive.merge.mapfiles = true #在Map-only的任务结束时合并小文件  

set hive.merge.mapredfiles = true #在Map-Reduce的任务结束时合并小文件  

set hive.merge.size.per.task = 256000000 #合并文件的大小  

set hive.merge.smallfiles.avgsize=256000000 #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge  

  spark job下可以这么设置
  //重分区,减少文件数
  val trade_company_df_save=trade_company_df.repartition(1)
  trade_company_df_save.registerTempTable("trade_company_df");


  • 参考文章:
  http://nlslzf.iteye.com/blog/1617239
  http://wenku.baidu.com/link?url=6dxklmJNF6XTFot4zlzt-_d_UXTcoPQzuATtnQil7M9My_3g_0NYJ5mx4K7tEj1jwq6KywUoBWvgPBbMkz9s7TSfCmYT_xLNZAuZRFWk36_
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427899-1-1.html 上篇帖子: Docker部属Nsq集群 下篇帖子: 没有了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表