hadoop-2.6+HBase-1.2+eclipse开始hbase编程

hbase 专栏收录该内容
3 篇文章 0 订阅

目录
1.环境搭建
2.编程
3.查看结果
4.总结

1 .环境搭建和添加jar包

  使用HBase客户端进行编程的时候,hbase,hadoop,log4j,commons-logging,commons-lang,Zookeeper等jar包对程序是必须的。除此之外commons-configuration,slf4j等jar也经常要使用到。
  如果你对具体要使用哪些jar不熟悉,可以在项目中导入lib下的所有jar,不会出错。但是在编程的时候要多注意引入包的时候,可能会产生冲突,注意别引错包,对程序运行和结果也不会有影响。

1 .首先新建一个java项目
这里写图片描述
2 .在项目根目录新建一个conf目录
这里写图片描述
3 .将hbase的hbase-site.xml文件复制到conf目录下
这里写图片描述
4 .右键项目Build Path -> Add Libraries
这里写图片描述
5 .Add External JARS
这里写图片描述
6 .定位到hbase/lib目录下,选取需要的jar
 之前提到的jar包基本要添加,还需要google的protobuf,协议jar
这里写图片描述
7 .对于conf下的配置文件的引入
 添加完jar的时候,选择Add Class Folder 选择conf文件即可

以上过程就是在eclipse编写操作hbase的环境完整搭建

2 .编程

对于编程这块我就不一一解释了,我在注释上会写的很明白

值得注意的是,运行的时候,需要启动hadoop和hbase,不然会出现拒绝连接异常

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseTableOpreateeTest{

    // 使用默认的HBase配件文件创建配置
    static Configuration cfg = HBaseConfiguration.create();

    /**
     * 创建表
     * 
     * @param tableName
     *            表名
     * @param columFamily
     *            列族
     * @throws IOException
     */
    public static void create(String tableName, String columFamily) throws IOException {
        // 如果不是使用hbase的zookeeper集群,则需要指定zookeeper集群的位置
        // cfg.set("hbase.zookeeper.quorum", "master,slave,slavex");
        // 创建一个接口来管理HBase数据库的表信息
        HBaseAdmin admin = new HBaseAdmin(cfg);
        // 如果表存在
        if (admin.tableExists(tableName)) {
            System.out.println("table Exists!");
            System.exit(0);// 退出
        } else {
            // HTableDescriptor包含了表的名字和对应的列族
            HTableDescriptor tableDesc = new HTableDescriptor(tableName);
            // 通过HColumnDescriptor的一个市里,为HTableDescriptor添加一个列族
            tableDesc.addFamily(new HColumnDescriptor(columFamily));
            // 创建表
            admin.createTable(tableDesc);
            System.out.println("create Table success!");
        }
    }

    /**
     * 插入一行数据
     * 
     * @param tableName
     *            表名
     * @param row
     *            行
     * @param columFamily
     *            列族
     * @param column
     *            列
     * @param data
     *            数据
     * @throws Exception
     */
    public static void add(String tableName, String row, String columFamily, String column, String data)
            throws Exception {

        // 实例一个与Hbase表进行通信的对象
        // 对于多线程的时候,可能会崩溃,建议使用HTablePool
        HTable table = new HTable(cfg, tableName);
        // Put 对单个行进行添加操作
        Put p = new Put(Bytes.toBytes(row));
        p.add(Bytes.toBytes(columFamily), Bytes.toBytes(column), Bytes.toBytes(data));
        table.put(p);// 向表中添值
        System.out.println("add " + row + "cloumFamily " + data + " success!");
    }

    /**
     * 删除表
     * 
     * @param tableName
     *            表名
     * @throws Exception
     */
    public static void drop(String tableName) throws Exception {
        HBaseAdmin admin = new HBaseAdmin(cfg);
        if (admin.tableExists(tableName)) {
            // 将表设为无效
            admin.disableTable(tableName);
            // 删除表
            admin.deleteTable(tableName);
            System.out.println("drop " + tableName + " success!");
        } else {
            System.out.println(tableName + " table is not exists!");
        }
    }

    /**
     * 查找一条数据
     * 
     * @param tableName
     *            表名
     * @param row
     *            所在行
     * @throws Exception
     */
    public static void finadOne(String tableName, String row) throws Exception {
        HTable table = new HTable(cfg, tableName);
        // 实例化一个获取单个行相关信息的对象
        Get g = new Get(Bytes.toBytes(row));
        // 查询结果放入结果集
        Result rs = table.get(g);
        System.out.println("Get:" + rs);
    }

    /**
     * 遍历查询表中的所有数据
     * 
     * @param tableName
     * @throws Exception
     */
    public static void scan(String tableName) throws Exception {
        HTable table = new HTable(cfg, tableName);
        // 创建全表扫描对象
        Scan s = new Scan();
        // 得到结果集
        ResultScanner rs = table.getScanner(s);
        // 对结果集的数据进行遍历
        rs.forEach((r) -> {
            System.out.println("scan:" + r);
        });

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String tableName = "hbase_Test";
        String columFamily = "cf";
        try {
            createTable.create(tableName, columFamily);
            createTable.drop(tableName);
            //这里只是简单测试,每个方法都有效
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

3 .查看结果

使用hbase shell查看运行结果

4 .总结

对于HBase编程,关键是环境的搭建,还有编程时包会不会冲突。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值