Java操作远程Hbase详细步骤

来源:互联网 发布:邮政小包业务流程优化 编辑:程序博客网 时间:2024/06/03 20:02

         本人最近在一个广告公司做点击率预估算法研究,由于数据源在Hbase中,故需要通过Java远程访问Hbase,在网上搜了很多相关程序,试了很久才跑通,过程中各种报错,心力交瘁,我总结下原因大致是对各种ip地址和端口号不理解,所以,就此叙述下详细的步骤(有说的不合理的地方,希望包含)。

      首先,简述下访问远程Hbase数据库的过程,第一,需要查询远程服务器的ip地址,假设为“10.1.8.241”,这台机器是物理机,真实存在的,其次,将在这台物理机中的虚拟机上配置hadoop多结点集群(这一般是别人配置好的),结点分为两大类角色,一类是master,作为主节点,负责管理文件系统的命名空间和客户端对文件系统的访问操作;另一类是slave,作为从结点,负责管理存储的数据。这里最重要的是由于主节点和每个从结点都会有一个ip地址,在访问hbase的时候,千万别配置成结点的ip地址,因为你根本就访问不到,而是配置为服务器的ip地址,然后服务器会通过一个端口号和master结点建立链接,因此我们还需要配置一个端口号,假设为“2181”。这样就成功访问到了Hbase。

      在弄清楚访问远程Hbase数据库的过程后,然后,需要修改“C:\Windows\System32\drivers\etc”下的hosts文件,用于建立与服务器之间的映射关系,即,添加一行“10.1.8.241master”,其中“10.1.8.241”为服务器的ip地址。

      最后,就可以开始写代码了,首先,导入需要的jar包,这里我是直接从maven中导入:

      <dependency>      <groupId>org.apache.hbase</groupId>     <artifactId>hbase-server</artifactId><version>0.96.1-hadoop2</version>      </dependency>

         下面是访问远程Hbase数据库,遍历并打印出Hbase数据库中所有表的Java代码以及程序跑通后的截图:

package Utils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.client.HBaseAdmin;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class HbaseTest {    private HBaseAdmin admin = null;    // 定义配置对象HBaseConfiguration    private static Configuration configuration;    public HbaseTest() throws Exception {        configuration = HBaseConfiguration.create();        configuration.set("hbase.zookeeper.quorum","10.1.8.241");  //hbase 服务地址        configuration.set("hbase.zookeeper.property.clientPort","2181"); //端口号        admin = new HBaseAdmin(configuration);    }    // Hbase获取所有的表信息    public List getAllTables() {        List<String> tables = null;        if (admin != null) {            try {                HTableDescriptor[] allTable = admin.listTables();                if (allTable.length > 0)                    tables = new ArrayList<String>();                for (HTableDescriptor hTableDescriptor : allTable) {                    tables.add(hTableDescriptor.getNameAsString());                    System.out.println(hTableDescriptor.getNameAsString());                }            }catch (IOException e) {                e.printStackTrace();            }        }        return tables;    }    public static void main(String[] args) throws Exception {        HbaseTest hbaseTest = new HbaseTest();        hbaseTest.getAllTables();    }}