如何在Java中连接到远程HBase?

leo*_*eon 39 hbase

我有一个Standlone HBase服务器.这是我的hbase-site.xml:

<configuration>
 <property>
    <name>hbase.rootdir</name>
    <value>file:///hbase_data</value>
  </property>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个Java程序来操作HBase中的数据.

如果我在HBase服务器上运行程序,它可以正常工作.但我不知道如何配置它进行远程访问.

  Configuration config = HBaseConfiguration.create();
   HTable table = new HTable(config, "test");
   Scan s = new Scan();
Run Code Online (Sandbox Code Playgroud)

我试过添加IP和端口,它不起作用:

config.set("hbase.master", "146.169.35.28:60000")
Run Code Online (Sandbox Code Playgroud)

谁能告诉我怎么做?

谢谢!

Qui*_*nnG 27

这是我们用来创建我们用来连接HBase的HTable的系统的片段

Configuration hConf = HBaseConfiguration.create(conf);
hConf.set(Constants.HBASE_CONFIGURATION_ZOOKEEPER_QUORUM, hbaseZookeeperQuorum);
hConf.setInt(Constants.HBASE_CONFIGURATION_ZOOKEEPER_CLIENTPORT, hbaseZookeeperClientPort);

HTable hTable = new HTable(hConf, tableName);
Run Code Online (Sandbox Code Playgroud)

HTH

编辑:示例值:

public static final String HBASE_CONFIGURATION_ZOOKEEPER_QUORUM                     = "hbase.zookeeper.quorum";
public static final String HBASE_CONFIGURATION_ZOOKEEPER_CLIENTPORT                 = "hbase.zookeeper.property.clientPort";
...
hbaseZookeeperQuorum="PDHadoop1.corp.CompanyName.com,PDHadoop2.corp.CompanyName.com";
hbaseZookeeperClientPort=10000;
tableName="HBaseTableName";
Run Code Online (Sandbox Code Playgroud)

  • 不是HConstants吗? (3认同)

vla*_*man 12

hbase.master是@Deprecated.客户端使用Zookeeper获取其HBase服务器的当前主机名/端口.

@Deprecated
config.set("hbase.master", "146.169.35.28:60000")
Run Code Online (Sandbox Code Playgroud)

Hadoop和HBase对DNS和/etc/hosts配置非常敏感.确保您的主机名不指向127.0.0.1否则它将启动仅在localhost上侦听的许多服务.尽量不要在设置中的任何地方使用IP地址.

我的/etc/hosts:

192.168.2.3     cloudera-vm     # Added by NetworkManager
127.0.0.1       localhost.localdomain   localhost
127.0.1.1       cloudera-vm-local localhost
Run Code Online (Sandbox Code Playgroud)

/etc/hbase/hbase-site.xml应该有设置set distributed=false(因为你只使用它进行测试):

<property>
  <name>hbase.cluster.distributed</name>
  <value>false</value>
</property>
Run Code Online (Sandbox Code Playgroud)

/etc/zookeeper/zoo.cfg

# the port at which the clients will connect
clientPort=2181
server.0=cloudera-vm:2888:3888
Run Code Online (Sandbox Code Playgroud)

我的Java进程列表:

root@cloudera-vm:~# jps
1643 TaskTracker
1305 JobTracker
1544 SecondaryNameNode
2037 Bootstrap
9622 DataNode
10144 Jps
9468 NameNode
1948 RunJar
9746 HMaster
Run Code Online (Sandbox Code Playgroud)


Mar*_*uez 7

简而言之,这就是我使用的:

    Configuration hBaseConfig =  HBaseConfiguration.create();
    hBaseConfig.setInt("timeout", 120000);
    hBaseConfig.set("hbase.master", "*" + hbaseHost + ":9000*");
    hBaseConfig.set("hbase.zookeeper.quorum",zookeeperHost);
    hBaseConfig.set("hbase.zookeeper.property.clientPort", "2181");
Run Code Online (Sandbox Code Playgroud)

对于hBaseHost和zookeeperHost,我只需传递安装了zookeeper的集群计算机的ip地址.当然,您也可以参数化端口号.我不是100%确定这是确保连接成功的最佳方法,但到目前为止它没有任何问题.