在通过Apache Storm Bolt将数据插入HBase时,需要解决间歇性SocketTimeoutException问题的解决方案

在通过Apache Storm Bolt将数据插入HBase时,需要解决间歇性SocketTimeoutException问题的解决方案,hbase,apache-storm,Hbase,Apache Storm,就我面临的问题寻求帮助/指点 我们有一个解决方案,其中我们通过ApacheKafka从Windows读取Web服务器日志文件,然后通过Storm进行处理,Storm随后将存储在HBase中。我们已经完成了前两部分——通过卡夫卡读取文件并通过Storm处理。但在将处理后的数据存储到HBase时,我们面临着一些问题 为了存储到HBase中,我们编写了一个Storm Bolt,它读取数据,处理数据(按照分隔符分割行的简单处理),然后将数据发送到HBase中。在本文中,我们使用ConnectionFac

就我面临的问题寻求帮助/指点

我们有一个解决方案,其中我们通过ApacheKafka从Windows读取Web服务器日志文件,然后通过Storm进行处理,Storm随后将存储在HBase中。我们已经完成了前两部分——通过卡夫卡读取文件并通过Storm处理。但在将处理后的数据存储到HBase时,我们面临着一些问题

为了存储到HBase中,我们编写了一个Storm Bolt,它读取数据,处理数据(按照分隔符分割行的简单处理),然后将数据发送到HBase中。在本文中,我们使用ConnectionFactoryJavaAPI创建了HBase连接,我们可以通过日志看到相同的情况

一旦喷口和前一个螺栓传递数据,我们就会看到HBase螺栓中存在不一致的行为。有时,它会继续并将数据插入HBase(我们能够通过bolt日志和HBase外壳验证相同的数据),但在其他时候,它会抛出SocketTimeoutException(包含在下面)。当我们重新启动HBase时,例外情况就会消失(有时一次重新启动有效,而有时我们必须重新启动2-3次)

执行代码时,会触发闩锁,但不会插入任何行。在Storm UI上,我们看到日志显示SocketTimeoutException。当我们重新启动HBase几次,然后插入行之后,这种情况就会消失。每次我们以SocketTimeoutException结束时,都必须完成重新启动HBase的过程。在此期间,我们看到喷口和之前的螺栓工作正常(在Ambari的Storm UI中更改发射和传输的编号)

我们看到两种情况:

  • 根据螺栓日志,HBase螺栓未重新拧紧。这是即使前面的螺栓和喷嘴显示正在发射数据。一旦HBase群集重新启动,这种情况就会消失

  • 与HBase相关的bolt显示通过Storm UI和bolt日志读取的数据,但未将数据插入HBase表(通过HBase SHell验证)

  • 请求提供一些关于如何最好地解决此问题的建议?我们已经尝试在清除Storm本地目录并重新启动整个集群之后执行运行

    环境详情: ApacheKafka-0.9.0 ApacheStorm-0.10.0

    例外情况详细信息

    2017-11-24 07:19:36.562 k.c.SimpleConsumer [INFO] Reconnect due to error:
    java.net.SocketTimeoutException
         at sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:211) ~[?:1.8.0_144]
         at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103) ~[?:1.8.0_144]
         at java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:385) ~[?:1.8.0_144]
         at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:81) ~[kafka-clients-0.9.0.2.4.3.0-227.jar:?]
         at kafka.network.BlockingChannel.readCompletely(BlockingChannel.scala:140) ~[kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.network.BlockingChannel.receive(BlockingChannel.scala:131) ~[kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer.liftedTree1$1(SimpleConsumer.scala:102) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer.kafka$consumer$SimpleConsumer$$sendRequest(SimpleConsumer.scala:99) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SimpleConsumer.scala:148) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:148) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:148) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply$mcV$sp(SimpleConsumer.scala:147) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply(SimpleConsumer.scala:147) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply(SimpleConsumer.scala:147) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.consumer.SimpleConsumer.fetch(SimpleConsumer.scala:146) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at kafka.javaapi.consumer.SimpleConsumer.fetch(SimpleConsumer.scala:54) [kafka_2.10-0.9.0.2.4.3.0-227.jar:?]
         at storm.kafka.KafkaUtils.fetchMessages(KafkaUtils.java:165) [storm-kafka-0.10.0.2.4.3.0-227.jar:0.10.0.2.4.3.0-227]
         at storm.kafka.PartitionManager.fill(PartitionManager.java:170) [storm-kafka-0.10.0.2.4.3.0-227.jar:0.10.0.2.4.3.0-227]
         at storm.kafka.PartitionManager.next(PartitionManager.java:132) [storm-kafka-0.10.0.2.4.3.0-227.jar:0.10.0.2.4.3.0-227]
         at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:144) [storm-kafka-0.10.0.2.4.3.0-227.jar:0.10.0.2.4.3.0-227]
         at backtype.storm.daemon.executor$fn__6191$fn__6206$fn__6235.invoke(executor.clj:601) [storm-core-0.10.0.2.4.3.0-227.jar:0.10.0.2.4.3.0-227]
         at backtype.storm.util$async_loop$fn__545.invoke(util.clj:479) [storm-core-0.10.0.2.4.3.0-227.jar:0.10.0.2.4.3.0-227]
         at clojure.lang.AFn.run(AFn.java:22) [clojure-1.6.0.jar:?]
         at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]