今天在Java访问hdfs上文件的时候,报错:
2018-05-03 22:40:53.343 INFO 10158 --- [eduler_Worker-4] org.apache.hadoop.ipc.Client : Retrying connect to server: master/172.16.80.70:8020. Already tried 37 time(s); maxRetries=45
2018-05-03 22:40:56.292 INFO 10158 --- [eduler_Worker-5] o.a.c.httpclient.HttpMethodDirector : I/O exception (java.net.ConnectException) caught when processing request: Connection timed out
我去看了一下hadoop环境,原来是在做迁移,整个hadoop环境已经坏了。我的需求是:当hdfs文件系统挂了,读取不到文件的时候,往mysql中插入一条失败记录。但是请求在连接超时后,一直在尝试重新连接,从日志看出,一直要连接45次,于是百度了一下配置文件参数配置,设置:
Configuration conf = new Configuration();
//在连接超时后,客户端连接重试次数 conf.setInt("ipc.client.connect.max.retries.on.timeouts",1);
fs = FileSystem.get(URI.create(uri), conf);
然后捕获异常,成功在catch中插入记录到mysql。
注意要和客户端连接重试次数区分开:
客户端连接重试次数:
ipc.client.connect.max.retries=10