0
votes

I create the storm topology that having hbase bolt to write the tuple into hbase. But when I run the topology, it is always show the error below. Does anybody know how to solve this problem?

java.lang.IllegalArgumentException: HBase configuration not found using key 'null'
at org.apache.storm.hbase.bolt.AbstractHBaseBolt.prepare(AbstractHBaseBolt.java:60) 

I already serialize the hbase-site.xml in the pom.xml file, like below:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <transformers>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
                    </transformer>
                </transformers>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>java</executable>
                <includeProjectDependencies>true</includeProjectDependencies>
                <includePluginDependencies>false</includePluginDependencies>
                <classpathScope>compile</classpathScope>
                <mainClass>${storm.topology}</mainClass>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>${basedir}/conf</directory>
            <filtering>false</filtering>
            <includes>
                <include>hbase-site.xml</include>
            </includes>
        </resource>
    </resources>

Thank you for your help in advance.

1

1 Answers

0
votes

Pass hbase config parameter to your topology.

public static final String HBASE_CONFIG_KEY = "hbase.conf";

1) In storm config put new setting HBASE_CONFIG_KEY.

Config config = new Config();
String rootDir = topologyConfig.getProperty("hbase.rootdir");
Map<String, Object> hbConf = new HashMap<>();
hbConf.put("hbase.rootdir", rootDir);
config.put(HBASE_CONFIG_KEY, hbConf);
StormSubmitter.submitTopology(topologyName, config, buildTopology());

2) In Hbase Bolt config set config Key HBASE_CONFIG_KEY

HBaseBolt hBaseBolt = new HBaseBolt(topologyConfig.getProperty(CFG_HBASE_BOLT_TABLE_NAME), new  CbossCdrRecordMapper())
            .withConfigKey(HBASE_CONFIG_KEY)
            .withBatchSize(1000)
            .withFlushIntervalSecs(flushInterval)
            .withBatchSize(Integer.valueOf(topologyConfig.getProperty(CFG_HBASE_BOLT_BATCH_SIZE)));

That worked for me.