Since the HBase Master may move around, clients bootstrap by looking to ZooKeeper for
current critical locations. ZooKeeper is where all these values are kept. Thus clients
require the location of the ZooKeeper ensemble information before they can do anything else.
Usually this the ensemble location is kept out in the hbase-site.xml
and
is picked up by the client from the CLASSPATH
.
If you are configuring an IDE to run a HBase client, you should
include the conf/
directory on your classpath so
hbase-site.xml
settings can be found (or
add src/test/resources
to pick up the hbase-site.xml
used by tests).
Minimally, a client of HBase needs the hbase, hadoop, log4j, commons-logging, commons-lang,
and ZooKeeper jars in its CLASSPATH
connecting to a cluster.
An example basic hbase-site.xml
for client only
might look as follows:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.zookeeper.quorum</name> <value>example1,example2,example3</value> <description>The directory shared by region servers. </description> </property> </configuration>
The configuration used by a java client is kept
in an HBaseConfiguration instance.
The factory method on HBaseConfiguration, HBaseConfiguration.create();
,
on invocation, will read in the content of the first hbase-site.xml
found on
the client's CLASSPATH
, if one is present
(Invocation will also factor in any hbase-default.xml
found;
an hbase-default.xml ships inside the hbase.X.X.X.jar
).
It is also possible to specify configuration directly without having to read from a
hbase-site.xml
. For example, to set the ZooKeeper
ensemble for the cluster programmatically do as follows:
Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); // Here we are running zookeeper locally
If multiple ZooKeeper instances make up your ZooKeeper ensemble,
they may be specified in a comma-separated list (just as in the hbase-site.xml
file).
This populated Configuration
instance can then be passed to an
HTable,
and so on.