Created 04-29-2016 09:05 AM
Hi ,
I am trying to write Storm output to HBase. It's works fine when run in local mode, but when i switch to cluster mode, it got the error:
I've also exported jar path in HADOOP variables, before to execute topology:
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:usr/hdp/current/hbase-client/lib/*.jar
without good results, same error is showed. Have any idea to solve it?
Thanks in advance. Giuseppe
Created 05-03-2016 10:42 AM
Hi All,
I've solved the issue, it is due to TableName variable declared as static in bolt statement and initialized in constructor.
In the method prepare() of bolt, it was "null" in DRPC mode because, I suppose, Storm is stateless and so no pointer to static memory is present. I have changed static to private and now works fine.
Thanks anyway.
Created 04-29-2016 03:23 PM
Any chance you can edit your question to include the complete Java stack trace, please?
Created 05-02-2016 07:36 AM
Hi Emil and Josh, thanks for your reply. I use hbase-client version 1.1.1 and I've developed a custom HbaseBolt that implemented IRichBolt interface. I have included hbase-site.xml in project to read configuration of cluster. In fact, when I create the configuration and then the connection, I read all configuration correcly:
Configuration config = HBaseConfiguration.create();
connection = ConnectionFactory.createConnection(config);
I've also checked that the xml file is added to jar root so should be read when topology is running. As write above, it works fine in local mode but issued in DRPC. This a trace of log that I can see throught Storm UI:
2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:java.io.tmpdir=/tmp 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:java.compiler=<NA> 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:os.name=Linux 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:os.arch=amd64 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:os.version=3.10.0-229.7.2.el7.x86_64 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:user.name=storm 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:user.home=/home/storm 2016-05-02 07:20:56.685 o.a.z.ZooKeeper [INFO] Client environment:user.dir=/home/storm 2016-05-02 07:20:56.686 o.a.z.ZooKeeper [INFO] Initiating client connection, connectString=swrmaster01.northeurope.cloudapp.azure.com:2181,swrmaster02.northeurope.cloudapp.azure.com:2181,swrmaster03.northeurope.cloudapp.azure.com:2181 sessionTimeout=90000 watcher=hconnection-0x5f1bd8ec0x0, quorum=swrmaster01.northeurope.cloudapp.azure.com:2181,swrmaster02.northeurope.cloudapp.azure.com:2181,swrmaster03.northeurope.cloudapp.azure.com:2181, baseZNode=/hbase-unsecure 2016-05-02 07:20:56.698 o.a.z.ClientCnxn [INFO] Opening socket connection to server swrmaster03.northeurope.cloudapp.azure.com/10.2.0.13:2181. Will not attempt to authenticate using SASL (unknown error) 2016-05-02 07:20:56.699 o.a.z.ClientCnxn [INFO] Socket connection established to swrmaster03.northeurope.cloudapp.azure.com/10.2.0.13:2181, initiating session 2016-05-02 07:20:56.719 o.a.z.ClientCnxn [INFO] Session establishment complete on server swrmaster03.northeurope.cloudapp.azure.com/10.2.0.13:2181, sessionid = 0x3546dbd44bb0011, negotiated timeout = 40000 2016-05-02 07:20:57.192 o.a.h.h.s.DomainSocketFactory [WARN] The short-circuit local reads feature cannot be used because libhadoop cannot be loaded. 2016-05-02 07:20:57.255 b.s.util [ERROR] Async loop died! java.lang.NullPointerException at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:351) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:318) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getTable(ConnectionManager.java:726) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getTable(ConnectionManager.java:708) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getTable(ConnectionManager.java:542) ~[stormjar.jar:?] at com.ecube.swarco.stormtopology.hbase.SignalGroupsHBaseBolt.prepare(SignalGroupsHBaseBolt.java:60) ~[stormjar.jar:?] at backtype.storm.daemon.executor$fn__3697$fn__3710.invoke(executor.clj:746) ~[storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at backtype.storm.util$async_loop$fn__544.invoke(util.clj:473) [storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at clojure.lang.AFn.run(AFn.java:22) [clojure-1.6.0.jar:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_60] 2016-05-02 07:20:57.260 b.s.d.executor [ERROR] java.lang.NullPointerException at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:351) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:318) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getTable(ConnectionManager.java:726) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getTable(ConnectionManager.java:708) ~[stormjar.jar:?] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getTable(ConnectionManager.java:542) ~[stormjar.jar:?] at com.ecube.swarco.stormtopology.hbase.SignalGroupsHBaseBolt.prepare(SignalGroupsHBaseBolt.java:60) ~[stormjar.jar:?] at backtype.storm.daemon.executor$fn__3697$fn__3710.invoke(executor.clj:746) ~[storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at backtype.storm.util$async_loop$fn__544.invoke(util.clj:473) [storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at clojure.lang.AFn.run(AFn.java:22) [clojure-1.6.0.jar:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_60] 2016-05-02 07:20:57.318 b.s.d.executor [INFO] Processing received message FOR 3 TUPLE: source: signalgroupsSpout:9, stream: __ack_init, id: {}, [-2915561833589860894, 6619686113940453962, 9] 2016-05-02 07:20:57.318 b.s.d.executor [INFO] BOLT ack TASK: 3 TIME: 0 TUPLE: source: signalgroupsSpout:9, stream: __ack_init, id: {}, [-2915561833589860894, 6619686113940453962, 9] 2016-05-02 07:20:57.322 b.s.d.executor [INFO] Execute done TUPLE source: signalgroupsSpout:9, stream: __ack_init, id: {}, [-2915561833589860894, 6619686113940453962, 9] TASK: 3 DELTA: 2016-05-02 07:20:57.326 b.s.d.executor [INFO] Processing received message FOR 3 TUPLE: source: signalGroupsFilterBolt:5, stream: __ack_ack, id: {}, [-2915561833589860894, 6619686113940453962] 2016-05-02 07:20:57.327 b.s.d.task [INFO] Emitting direct: 9; __acker __ack_ack [-2915561833589860894] 2016-05-02 07:20:57.327 b.s.d.executor [INFO] TRANSFERING tuple TASK: 9 TUPLE: source: __acker:3, stream: __ack_ack, id: {}, [-2915561833589860894] 2016-05-02 07:20:57.327 b.s.d.executor [INFO] BOLT ack TASK: 3 TIME: TUPLE: source: signalGroupsFilterBolt:5, stream: __ack_ack, id: {}, [-2915561833589860894, 6619686113940453962] 2016-05-02 07:20:57.327 b.s.d.executor [INFO] Execute done TUPLE source: signalGroupsFilterBolt:5, stream: __ack_ack, id: {}, [-2915561833589860894, 6619686113940453962] TASK: 3 DELTA: 2016-05-02 07:20:57.366 b.s.util [ERROR] Halting process: ("Worker died") java.lang.RuntimeException: ("Worker died") at backtype.storm.util$exit_process_BANG_.doInvoke(util.clj:332) [storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at clojure.lang.RestFn.invoke(RestFn.java:423) [clojure-1.6.0.jar:?] at backtype.storm.daemon.worker$fn__5927$fn__5928.invoke(worker.clj:636) [storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at backtype.storm.daemon.executor$mk_executor_data$fn__3530$fn__3531.invoke(executor.clj:256) [storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at backtype.storm.util$async_loop$fn__544.invoke(util.clj:485) [storm-core-0.10.0.2.3.4.0-3485.jar:0.10.0.2.3.4.0-3485] at clojure.lang.AFn.run(AFn.java:22) [clojure-1.6.0.jar:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_60] 2016-05-02 07:20:57.368 b.s.d.worker [INFO] Shutting down worker swarco-storm-topology_v01_test-5-1462173409 e3fe85d7-fecd-434e-b27e-e0e93dc76c6a 6701
Do you have any idea to solve it?
Thanks again,
Giuseppe
Created 05-02-2016 08:49 AM
No Emil, I don't set hbase.rootdir and zookeeper.znode.parent in storm config because, I think, these are read by xml. I try to do it.
I have create custom hbaseBolt because I need to customize and apply some operation before to store in hbase and this cannot be do used SimpleHbaseMapper and HbaseBolt integrated in Bolt.
Created 05-03-2016 10:42 AM
Hi All,
I've solved the issue, it is due to TableName variable declared as static in bolt statement and initialized in constructor.
In the method prepare() of bolt, it was "null" in DRPC mode because, I suppose, Storm is stateless and so no pointer to static memory is present. I have changed static to private and now works fine.
Thanks anyway.