【hbase】解决Java API不能远程访问linux服务器HBase的问题(亲测可用)

今天我在虚拟机里面安装了Hbase 1.2.4,说在windows上Java API调用访问下玩玩,结果始终连接不上。

现象是启动程序后,程序出现卡死的状态,没报错也不停止,大约半分钟后才打印一堆日志出来,说连接重试了多次也连接不上:
在这里插入图片描述
这个问题纠结了我半天,一查看发现HBase绑定的是本地IP:127.0.0.1,这当然访问不了
然后我想可以把HBase的绑定在指定IP上,去查Hbase官网,却没有这样的配置项

后面百度下,发现HBase的这个问题要特殊处理
分下面三步走,即可访问
1、配置Linux的hostname 配置教程
2、配置Linux的hosts,映射ip的hostname的关系
3、配置访问windows的hosts

首先通过POM将需要的JAR包导入。如果怕版本不一致,可以将安装HBase的lib里面的jar导入程序当中

    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-client</artifactId>
      <version>1.2.0</version>
    </dependency>
   
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase-server</artifactId>
      <version>1.2.0</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.hbase</groupId>
      <artifactId>hbase</artifactId>
      <version>1.2.0</version>
    </dependency>
  </dependencies>

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;

import java.io.IOException;

/**
 * @Author: Stephen
 * @Date: 2020/2/13 9:42
 * @Content:
 */
public class MyHbase {
    public static void main(String[] args) throws IOException {
        Configuration config = HBaseConfiguration.create();
        config.set("hbase.rootdir","hdfs://192.168.56.122:9000/hbase");// 和hadoop中的core_site.xml信息一置
        config.set("hbase.zookeeper.quorum","192.168.56.122");// zookeeper地址
        config.set("hbase.zookeeper.property.clientPort","2181");// 端口号
        Connection connection = ConnectionFactory.createConnection(config);
        Table table = connection.getTable(TableName.valueOf("mtest:demo"));
        Put put = new Put("1".getBytes());
        put.addColumn("base".getBytes(),"name".getBytes(),"hehe".getBytes());
        put.addColumn("base".getBytes(),"sex".getBytes(),"female".getBytes());
        table.put(put);
        table.close();
    }
}

查看虚拟机hostname以及ip
在这里插入图片描述
在这里插入图片描述
**注意一定要在本地HOSTS文件(C:\Windows\System32\drivers\etc\hosts)配置hbase集群地址 **

在末尾添加 192.168.56.122 hw1

问题1:java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set

处理方法:在本地安装一个HADOOP,然后配置环境变量 配置详解HADOOP_HOME 尽管是调用的远程的Hadoop下的HBASE,所以这个问题困扰了我好久。

直接在官方网站下载一个安装的包 hadoop-2.7.6.tar.gz 然后直接解压放在硬盘下。接着配置环境变量HADOOP_HOME 并添加到Path当中。
在这里插入图片描述
在这里插入图片描述
上面步骤完成之后启动报错

问题2:java.io.IOException: Could not locate executable E:\hadoop-2.7.6\hadoop-2.7.6\bin\winutils.exe in the Hadoop binaries.

需要下载winutils.exe hadoop.dll等组件放在hadoop安装目录的bin当中。下载地址:https://github.com/srccodes/hadoop-common-2.2.0-bin

虽然是2.2.0的,但是亲测试可用的。下载完毕解压,将里面的bin里面的全部复制,然后拷贝到hadoop安装目录的bin当中,如果有相同的替换掉就是了

在上述步骤解决后还有一个问题
问题3:The node /hbase is not in ZooKeeper. It should have been written by the master

zookeeper.znode.parent 的配置信息不是/hbase-unsecure 会报错。
可以在HBase安装目录中的配置文件hbase-site.xml当中查看具体信息

[root@hw1 ~]# vi /opt/soft/hbase120/conf/hbase-site.xml 

<configuration>
<property>
        <name>hbase.rootdir</name>
        <value>hdfs://192.168.56.122:9000/hbase</value>
</property>
<property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
</property>
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>hw1:2181,hw2:2181,hw3:2181</value>
</property>
<property>
        <name>hbase.master.info.port</name>
        <value>16010</value>
</property>
# 需要添加的部分
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.56.122</value>
</property>
</configuration>

最后重启 hadoop以及hbase就能够远程连接了
在这里插入图片描述

发布了109 篇原创文章 · 获赞 125 · 访问量 6296

猜你喜欢

转载自blog.csdn.net/beautiful_huang/article/details/104291561
今日推荐