wjhdtx 发表于 2015-4-21 17:55:31

求助关于JournalNode超时在哪里设置

问题是这样,在虚拟机环境中搭建了cdh的hadoop集群,然后通过flume上传一个5G左右大小的日志文件到hdfs上,会报错,并导致namenode挂掉Waited 19169 ms (timeout=20000 ms) for a response for startLogSegment(60496). Succeeded so far:
下午5点27:32.641        FATAL        org.apache.hadoop.hdfs.server.namenode.FSEditLog       
Error: starting log segment 60496 failed for required journal (JournalAndStream(mgr=QJM to [<span style="line-height: 16.7999992370605px;">xxx.xxx.xxx.xxx</span><span style="line-height: 1.5;">:8485, </span><span style="line-height: 16.7999992370605px;">xxx.xxx.xxx.xxx</span><span style="line-height: 1.5;">:8485, </span><span style="line-height: 16.7999992370605px;">xxx.xxx.xxx.xxx</span><span style="line-height: 1.5;">:8485], stream=null))</span>
或者报
org.apache.hadoop.hdfs.server.namenode.FSEditLog: Error: flush failed
for required journal (JournalAndStream(mgr=QJM to [xxx:8485, xxx:8485,
xxx:8485, xxx:8485, xxx:8485], stream=QuorumOutputStream       at org.apache.hadoop.hdfs.qjournal.client.AsyncLoggerSet.waitForWriteQuorum(AsyncLoggerSet.java:137)
      at org.apache.hadoop.hdfs.qjournal.client.QuorumOutputStream.flushAndSync(QuorumOutputStream.java:107)

由于 namenode这个时间点进行了一次时间比较长的 full gc ,导致写 journalnode 超时(默认是20s), namenode进程退出。
解决办法是想通过增加journalnode的超时时间,
<property>
   <name>dfs.qjournal.start-segment.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.prepare-recovery.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.accept-recovery.timeout.ms</name>
   <value>600000000</value>
</property>

<span style="line-height: 16.7999992370605px;"><property></span>
   <name>dfs.qjournal.prepare-recovery.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.accept-recovery.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.finalize-segment.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.select-input-streams.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.get-journal-state.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.new-epoch.timeout.ms</name>
   <value>600000000</value>
</property>

<property>
   <name>dfs.qjournal.write-txns.timeout.ms</name>
   <value>600000000</value>
</property>

但是把上述代码加到hdfs-site.xml,没起作用,还会报上述错误,显示超时时间还是20000ms

求助大家,怎么设置这个超时时间???



xuanxufeng 发表于 2015-4-21 18:21:57

楼主改完之后,怎么操作的。
最好重启下集群保证生效

wjhdtx 发表于 2015-4-21 18:46:25

本帖最后由 wjhdtx 于 2015-4-21 18:47 编辑

xuanxufeng 发表于 2015-4-21 18:21
楼主改完之后,怎么操作的。
最好重启下集群保证生效
我在cm的页面中查找相关超时的配置项,并没有找到,我手工加到了所有节点的hdfs-site.xml中,重启是肯定的。

重启后还是会报错,显示的超时时间还是20000ms。

nextuser 发表于 2015-4-21 19:17:04

wjhdtx 发表于 2015-4-21 18:46
我在cm的页面中查找相关超时的配置项,并没有找到,我手工加到了所有节点的hdfs-site.xml中,重启是肯定 ...

改下下面配置试试
<property>
                <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
                <value>60000</value>
      </property>
      <property>
                <name>ipc.client.connect.timeout</name>
                <value>60000</value>
      </property>

//上面的是timeout相关配置,下面这个是拷贝image 和 edit文件的带宽限制,这里设置的是1M

      <property>
                <name>dfs.image.transfer.bandwidthPerSec</name>
                <value>1048576</value>
      </property>

wjhdtx 发表于 2015-4-23 09:51:51

本帖最后由 wjhdtx 于 2015-4-23 09:56 编辑

nextuser 发表于 2015-4-21 19:17
改下下面配置试试
在core-site-xml中设置了ha.failover-controller.cli-check.rpc-timeout.ms和ipc.client.connect.timeout,报错显示的超时时间还是20000ms。

求大神

langke93 发表于 2015-4-23 13:48:03

本帖最后由 langke93 于 2015-4-23 13:49 编辑

wjhdtx 发表于 2015-4-23 09:51
在core-site-xml中设置了ha.failover-controller.cli-check.rpc-timeout.ms和ipc.client.connect.timeout ...
楼主确保添加的配置正确,看到你贴出的配置带有html标签


1)除了调节journalnode 的写入超时时间

dfs.qjournal.write-txns.timeout.ms还可以调整下面内容:

2)调整namenode 的java参数,提前触发 full gc,这样full gc 的时间就会小一些。
3)默认namenode的fullgc方式是parallel gc,是stw模式的,更改为cms的格式。调整namenode的启动参数:

-XX:+UseCompressedOops
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC
-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75
-XX:SoftRefLRUPolicyMSPerMB=0

参考namenode gc导致的故障及解决办法记录

wjhdtx 发表于 2015-4-23 14:11:49

本帖最后由 wjhdtx 于 2015-4-23 14:13 编辑

langke93 发表于 2015-4-23 13:48
楼主确保添加的配置正确,看到你贴出的配置带有html标签



该帖子已看过,jvm的设置已改,现在就这个超时时间没法修改。谢谢你!

wjhdtx 发表于 2015-8-28 17:35:44

Error: flush failed for required journal (JournalAndStream(mgr=QJM to , stream=QuorumOutputStream starting at txid 1670026))
java.io.IOException: Timed out waiting 20000ms for a quorum of nodes to respond.
        at org.apache.hadoop.hdfs.qjournal.client.AsyncLoggerSet.waitForWriteQuorum(AsyncLoggerSet.java:137)
        at org.apache.hadoop.hdfs.qjournal.client.QuorumOutputStream.flushAndSync(QuorumOutputStream.java:107)
        at org.apache.hadoop.hdfs.server.namenode.EditLogOutputStream.flush(EditLogOutputStream.java:113)
        at org.apache.hadoop.hdfs.server.namenode.EditLogOutputStream.flush(EditLogOutputStream.java:107)
        at org.apache.hadoop.hdfs.server.namenode.JournalSet$JournalSetOutputStream$8.apply(JournalSet.java:533)
        at org.apache.hadoop.hdfs.server.namenode.JournalSet.mapJournalsAndReportErrors(JournalSet.java:393)
        at org.apache.hadoop.hdfs.server.namenode.JournalSet.access$100(JournalSet.java:57)
        at org.apache.hadoop.hdfs.server.namenode.JournalSet$JournalSetOutputStream.flush(JournalSet.java:529)
        at org.apache.hadoop.hdfs.server.namenode.FSEditLog.logSync(FSEditLog.java:638)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2559)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2431)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:552)
        at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.create(AuthorizationProviderProxyClientProtocol.java:108)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:388)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:587)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1026)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1642)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007)
晚上9点29:42.538        WARN        org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager       
Aborting QuorumOutputStream starting at txid 1670026
晚上9点29:42.540        INFO        org.apache.hadoop.util.ExitUtil       
Exiting with status 1
晚上9点29:42.541        INFO        org.apache.hadoop.hdfs.server.namenode.NameNode       
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hdp198/XXX.XXX.XXX.198
************************************************************/




求助下,线上集群又出现这个问题,是网络或namenode jvm的full gc导致的么?
如何调整下

Alkaloid0515 发表于 2015-8-28 20:38:45

wjhdtx 发表于 2015-8-28 17:35
Error: flush failed for required journal (JournalAndStream(mgr=QJM to


楼主试试这个办法
namenode gc导致的故障及解决办法记录

wjhdtx 发表于 2015-8-31 10:23:08

Alkaloid0515 发表于 2015-8-28 20:38
楼主试试这个办法
namenode gc导致的故障及解决办法记录

看过这个,但在cdh上没有找到在哪设置超时时间。
页: [1] 2
查看完整版本: 求助关于JournalNode超时在哪里设置