JAVA 远程连接HBase数据库所遇到的坑

5 篇文章 0 订阅
4 篇文章 0 订阅

Hbase是安装在另一台LINUX服务器上的,需要本地通过JAVA连接HBase数据库进行操作。由于是第一次接触HBase,过程当中百度了很多资料,也遇到了很多的问题。耗费了不少时间才成功连接上。特记录下过程当中遇到的问题。

JAVA连接HBase代码如下:

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

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.2.4</version>
</dependency>
	
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

public class HBaseConnection {

    public static void main(String[] args) throws IOException {
        //第一步,设置HBsae配置信息
        Configuration configuration = HBaseConfiguration.create();    
        //注意。这里这行目前没有注释掉的,这行和问题3有关系  是要根据自己zookeeper.znode.parent的配置信息进行修改。
       configuration.set("zookeeper.znode.parent","/hbase-unsecure"); //与 hbase-site-xml里面的配置信息 zookeeper.znode.parent 一致  
        configuration.set("hbase.zookeeper.quorum","192.168.8.30");  //hbase 服务地址
        configuration.set("hbase.zookeeper.property.clientPort","2181"); //端口号
        //这里使用的是接口Admin   该接口有一个实现类HBaseAdmin   也可以直接使用这个实现类
        // HBaseAdmin baseAdmin = new HBaseAdmin(configuration);
        Admin admin = ConnectionFactory.createConnection(configuration).getAdmin();
        if(admin !=null){
            try {
                //获取到数据库所有表信息
                HTableDescriptor[] allTable = admin.listTables();
                for (HTableDescriptor hTableDescriptor : allTable) {
                    System.out.println(hTableDescriptor.getNameAsString());
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
 

注意一定要在本地HOSTS文件(C:\Windows\System32\drivers\etc\hosts)配置hbase集群地址  192.168.8.30 master

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

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

直接在官方网站下载一个安装的包  hadoop-2.7.6.tar.gz 然后直接解压放在E盘下。接着配置环境变量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 

configuration.set("zookeeper.znode.parent","/hbase-unsecure") 这行代码被注释掉后,或者zookeeper.znode.parent 的配置信息不是/hbase-unsecure 会报错。

可以在HBase安装目录中的配置文件hbase-site.xml当中查看具体信息

 

参考资料:https://blog.csdn.net/darkdragonking/article/details/72636917

                  https://blog.csdn.net/yanhang0610/article/details/77920603

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,关于在HBase数据库中使用Java创建表的方法如下: 首先,需要导入HBaseJava API相关的包: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.client.TableDescriptorBuilder; import org.apache.hadoop.hbase.io.compress.CompressionAlgorithm; import org.apache.hadoop.hbase.regionserver.BloomType; import org.apache.hadoop.hbase.util.Bytes; ``` 然后,通过以下代码建立与HBase数据库连接: ```java Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin(); ``` 其中,"localhost"为HBase数据库所在的主机名。接下来,可以使用以下代码创建表: ```java String tableName = "myTable"; TableName name = TableName.valueOf(tableName); TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(name) .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf")) .setCompressionType(CompressionAlgorithm.GZ) .setBloomFilterType(BloomType.ROWCOL) .build()) .build(); admin.createTable(tableDescriptor); ``` 这里创建了一个名为"myTable"的表,并设置了一个名为"cf"的列族,其中设置了压缩算法和Bloom过滤器类型。最后,使用admin.createTable()方法创建表。 需要注意的是,在使用完后需要关闭与HBase数据库连接: ```java admin.close(); connection.close(); ``` 以上就是使用JavaHBase数据库中创建表的方法,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值