java api访问 hbase——demo

57 篇文章 1 订阅
9 篇文章 0 订阅

java api访问 hbase——demo

本文主要参考:http://blog.csdn.net/kangkanglou/article/details/37329811
下面使用java api操作hbase。
1、新建web maven项目
mvn archetype:generate -DarchetypeCatalog=internal

2、pom.xml添加jar包依赖
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!--<!– https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core –>-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>2.6.0-mr1-cdh5.9.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.6.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0-b01</version>
        </dependency>

3、新建servlet:
package com.xueyoucto.hbasett;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

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.*;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * Created by Administrator on 2016-11-22.
 */
@WebServlet(name = "Servlet",urlPatterns = "/HBaseServlet")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String tableName = "test";
        String columnFamily = "cf";
        try {

            if (true == Servlet.delete(tableName)) {
                System.out.println("Delete Table " + tableName + " success!");

            }
            System.out.println("************start create table**********");
            Servlet.create(tableName, columnFamily);
            Servlet.put(tableName, "row1", columnFamily, "column1",
                    "data1");
            Servlet.put(tableName, "row2", columnFamily, "column2",
                    "data2");
            Servlet.put(tableName, "row3", columnFamily, "column3",
                    "data3");
            Servlet.put(tableName, "row4", columnFamily, "column4",
                    "data4");
            Servlet.put(tableName, "row5", columnFamily, "column5",
                    "data5");

            Servlet.get(tableName, "row1");

            Servlet.scan(tableName);

        } catch (Exception e) {
            e.printStackTrace();
        }

        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("hello world");
        out.flush();
        out.close();
    }

    static Configuration cfg;

    static {
        cfg = HBaseConfiguration.create();
        System.out.println(cfg.get("hbase.master"));
    }

    public static void create(String tableName, String columnFamily)
            throws Exception {
        HBaseAdmin admin = new HBaseAdmin(cfg);
        if (admin.tableExists(tableName)) {
            System.out.println(tableName + " exists!");
        } else {
            HTableDescriptor tableDesc = new HTableDescriptor(tableName);
            tableDesc.addFamily(new HColumnDescriptor(columnFamily));
            admin.createTable(tableDesc);
            System.out.println(tableName + " create successfully!");
        }
    }

    public static void put(String tablename, String row, String columnFamily,
                           String column, String data) throws Exception {

        HTable table = new HTable(cfg, tablename);
        Put put = new Put(Bytes.toBytes(row));

        put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column),
                Bytes.toBytes(data));

        table.put(put);

        System.out.println("put '" + row + "', '" + columnFamily + ":" + column
                + "', '" + data + "'");

    }

    public static void get(String tablename, String row) throws Exception {
        HTable table = new HTable(cfg, tablename);
        Get get = new Get(Bytes.toBytes(row));
        Result result = table.get(get);
        System.out.println("Get: " + result);
    }

    public static void scan(String tableName) throws Exception {

        HTable table = new HTable(cfg, tableName);
        Scan s = new Scan();
        ResultScanner rs = table.getScanner(s);

        for (Result r : rs) {
            System.out.println("Scan: " + r);

        }
    }

    public static boolean delete(String tableName) throws IOException {

        HBaseAdmin admin = new HBaseAdmin(cfg);
        if (admin.tableExists(tableName)) {
            try {
                admin.disableTable(tableName);
                admin.deleteTable(tableName);
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        return true;

    }
}


4、把hbase中的hbase-site.xml文件拷贝到/WEB-INF/classes文件夹下:


5、部署运行,查看输出:
http://localhost:8989/hbasewebt/HBaseServlet


6、利用hbase shell 查看表test

如果在运行是遇到问题,可能的解决方案在这里:
http://blog.csdn.net/wild46cat/article/details/53288154

源码下载:
http://download.csdn.net/detail/wild46cat/9690114
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值