通过Hive执行任务,异常——Hive:Connection refused;Hadoop:too many open files
来源:互联网 发布:法尔奈斯庄园赏析知乎 编辑:程序博客网 时间:2024/06/07 13:13
问题背景:
工作中需要用到Hiveserver提交任务到hadoop进行离线计算,在正常测试运行整个离线计算任务几遍后,在后面提交任务的运行过程中遇到该异常。
问题表现:
从监控模块放回的异常与Hive中日志异常一样,均为如下所示:
2013-03-01 15:14:12 [ERROR] [SummaryReport] [orderNumStatics/订单量] File '/home/hadoop/hive-0.7.1-cdh3u3/lib/py/hive_service/ThriftHive.py', line 87, in recv_execute
raise result.ex
HiveServerException:HiveServerException(errorCode=12, message='Query returned non-zero code: 12, cause: FAILED: Hive Internal Error: java.lang.RuntimeException(java.net.ConnectException: Call to nn/10.28.168.128:41000 failed on connection exception: java.net.ConnectException: Connection refused)', SQLState='42000')
hadoop集群中datanode的日志文件报异常:
DataXceiverServer: IOException due to:java.io.IOException: Too many open files
在后面的测试中进一步得到如下情况:
在遇到该异常后,立即直接通过Hive(非Thrift)提交查询语句,返回同样的错误;等待几分钟后,重新提交Hive语句,可执行成功。继续提交,当达到一定量之后,又返回之前的错误。重新启动hiveserver或hadoop,均可以很好地解决只能执行少量任务的问题。
问题原因:
目前我们应用的hadoop版本hadoop-0.20.2-cdh3u3,其存在一个Bug,编号: HDFS-2028 —— 3.cn/uQ1t4B
Bug 描述如下:
When I load data into tables of hive via hiver cli or hive server, there are always some ESTABLISHED or CLOSE_WAIT status socket connections. And these tcp connections won't be released unless you quit hive or restart hiveserver.
意思是: 当用户通过hive 与 hive server执行hadoop任务时, 系统中会存在一些状体为 ESTABLISHED 与CLOSE_WAIT 的socket连接,而这些tcp连接只有在退出hive,或重启hiveserver服务时才会释放。
通过这个Bug的描述,发现这正是我们当前遇到的问题。
解决方法:
1. 修复上述中的Bug, path 补丁文件 1010-HDFS-1836.-Thousand-of-CLOSE_WAIT-socket.patch, 重新生成hadoop-core-0.20.2-cdh3u3.jar,然后替换掉之前的jar包;
2. 修改hadoop集群节点的/etc/security/limits.conf文件,在文件末尾加入下内容:
* soft nofile 65536
* hard nofile 65536
此操作的含义是修改Linux系统允许打开的最大文件数,其中系统默认的文件打开数为1024,这里修改成65536,根据实际情况设置成相应的值即可。
3. 修改hadoop配置文件 hdfs-site.xml,修改dfs.datanode.max.xcievers属性的值,可根据实际情况设置大一点
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
解决效果:
在与hadoop小组同时的沟通过程中得知,解决方法中的步骤一已经实施,但在我们的实际情况中依然会遇到本文中描述的问题。分析原因可能有如下几种:
1. hadoop-0.20.2-cdh3u3的这个bug并未真正修复;
2. hadoop-0.20.2-cdh3u3已修复该bug,而处理这些未及时关闭的链接,采取的方案可能是等待操作关闭,即需要某个设定的时间再关闭。
在实施解决方案中的步骤2、3之后,经过多次测试,没有再遇到本文中提到的问题。继续测试发现未关闭的链接数保持在一定值,呈现上下浮动,并没有一直往上增长,故大胆猜测,执行步骤一未能解决问题的原因很可能是上述的第2点。具体是哪种原因,以及上述原因2中可能的等待时间是多长,本人还在学习当中。
- 通过Hive执行任务,异常——Hive:Connection refused;Hadoop:too many open files
- too many open files
- too many open files
- Too many open files
- too many open files
- Too many open files
- too many files open
- too many open files
- too many open files
- Too many open files
- Open Too Many files
- Too many open files
- Too many open files
- too many open files
- Too many open files
- too many open files
- too many files open
- too many open files
- hdu2845
- OA项目总结
- python操作MySQL数据库
- Item Styles in OA Framework
- 你真懂JavaScript吗?
- 通过Hive执行任务,异常——Hive:Connection refused;Hadoop:too many open files
- UNIX--stat、fstat和lstat函数
- ArrayList应用举例
- pthread_cond_write
- .playvideobyvideoview
- 【练习01】 简单题(1)1012
- c语言基本数据类型
- 项目实践之Facade模式
- 【Delphi】Webbrowser加载Flash后方向键失效问题