Hadoop and hbase java client.. issues with HbaseRP

2019-09-08 17:45发布

I am trying to insert the data into hbase.I am running java program from remote machine. I have mentioned the code below.

try {
    Configuration conf = HBaseConfiguration.create();
    conf.clear();
    conf.set("hbase.zookeeper.quorum", "<HOST_IP>:2181");
    conf.set("hbase.zookeeper.property.clientPort", "2181");
    conf.set("hbase.zookeeper.dns.nameserver", "<HOST_IP>");
    conf.set("hbase.regionserver.port","60020");
    conf.set("hbase.master", "<HOST_IP>:9000");
    HTable table = new HTable(conf, "test");
    Put put = new Put(Bytes.toBytes("row5"));
    put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("qual1"),
    Bytes.toBytes("val1"));
    put.add(Bytes.toBytes("colfam1"), Bytes.toBytes("qual2"),
    Bytes.toBytes("val2"));
    table.put(put);
} catch (MasterNotRunningException e) { 
    e.printStackTrace(); 
} catch (ZooKeeperConnectionException e) { 
    e.printStackTrace(); 
} catch (TableNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace();
}

I am getting the following error

INFO ipc.HbaseRPC: Server at localhost/127.0.0.1:60020 could not be reached after 1 tries, giving up.
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed setting up proxy interface org.apache.hadoop.hbase.ipc.HRegionInterface to localhost/127.0.0.1:60020 after attempts=1
    at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:355)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1176)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1195)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:898)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:797)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.relocateRegion(HConnectionManager.java:772)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:1002)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:801)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:766)
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:189)
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:163)
    at com.tcs.hbase.HbaseSample.insertData(HbaseSample.java:30)
    at com.tcs.hbase.HbaseSample.main(HbaseSample.java:82)
Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:406)
    at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:328)
    at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:883)
    at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:750)
    at org.apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.java:257)
    at $Proxy4.getProtocolVersion(Unknown Source)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:419)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:393)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:444)
    at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:349)
    ... 12 more

When i run this same code in the machine where hbase is installed its workin fine.. from the logs it is clear the rpc is resolving to localhost ip. i wanted to know how to configure the rpc ip to the ip of the machine where hbase is installed.

标签: java hbase
3条回答
该账号已被封号
2楼-- · 2019-09-08 18:16

The root cause of this issue resides in your /etc/hosts file. If you check your /etc/hosts file you will find a entry something like the one below (in my case mu machine is named domainnameyouwanttogive)

127.0.0.1 localhost 127.0.1.1 domainnameyouwanttogive

The following lines are desirable for IPv6 capable hosts

::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters

The root cause is that domainnameyouwanttogive resolves to 127.0.1.1 which is incorrect as it should resolve to 127.0.0.1 (or a external IP). As my external IP is 192.168.58.10 I created the following /etc/hosts configuration;

127.0.0.1 localhost 192.168.43.3 domainnameyouwanttogive

The following lines are desirable for IPv6 capable hosts

::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters

This will ensure that the resolving of your host processes on your localhost will be done correctly and you can start your HBase installation correctly on your development system.

查看更多
Lonely孤独者°
3楼-- · 2019-09-08 18:18

Check your hbase/conf/regionserver's IP. Give it as your localhost. I think you wont get this error.

Also Make sure that all your daemons in HDFS are up and running before starting HBASE.

查看更多
Rolldiameter
4楼-- · 2019-09-08 18:25

sudo pico /etc/hosts

if you see 127.0.1.1, change it by 127.0.0.1 if you see you external ip (wget http://ipecho.net/plain -O - -q ; echo), change it by 127.0.0.1

Usually, you only have an input 127.0.1.1 machineName and if you replace it by 127.0.0.1 HBase works (you will have 127.0.0.1 localhost and 127.0.0.1 machineName after change it)

查看更多
登录 后发表回答