IDE往集群中HBase中写数据 (简单代码)

1、创建封装对象 (列簇项)

package com.aura.bean;

import java.io.Serializable;
//hbase 列簇项
public class CategoryClickCount implements Serializable {
    //点击的品类
    private String name;
    //点击的次数
    private long count;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getCount() {
        return count;
    }

    public void setCount(long count) {
        this.count = count;
    }

    public CategoryClickCount(String name, long count) {
        this.name = name;
        this.count = count;
    }
}

2、编写接口   插入与查询 

package com.aura.dao;



import com.aura.bean.CategoryClickCount;

import java.util.List;
//插入与查询  接口
public interface HBaseDao {
    //往hbase里面插入一条数据
    public void save(String tableName,String rowkey,String family,String q,long value);
    //根据rowkey(查询)返回数据
    
/**
 * 在Hbase查询中  输入tableName与rowkey  比按(输入)family或者时间戳 更快
 * 因为(输入)family或者时间戳会降低查询性能
 */
public List<CategoryClickCount> count(String tableName,String rowkey);}
3、编写实现类


package com.aura.dao.impl;

import com.aura.bean.CategoryClickCount;
import com.aura.dao.HBaseDao;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.util.Bytes;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//实现类
public class HBaseImpl implements HBaseDao {
    HConnection htablePool = null; //HConnection 获取HBase连接  类似于JDBC
    public HBaseImpl(){//创建类自动加载
    //设置程序入口
        Configuration conf = HBaseConfiguration.create();
        //HBase自带的zookeeper
        conf.set("hbase.zookeeper.quorum","hadoop02:2181");//zookeeper监控中一个的hbase端口号
        //conf.set("zookeeper.znode.parent","/mybase"); 
    // HBase原数据存在zookeeper中的mybase目录下   (此时本集群没有配置这个参数,所以省略)
            
 try {
            htablePool = HConnectionManager.createConnection(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     *根据表名获取表对象
     * tableName 表名
     * return 表对象
     */
    public HTableInterface getTable(String tableName){//根据表名获取表对象
        HTableInterface table = null;
        try {
            table = htablePool.getTable(tableName);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return table;
    }

    /**
     * 往hbase里面插入一条数据
     * @param tableName 表名
     * @param rowkey 行键
     * @param family 列簇
     * @param q 品类
     * @param value  出现了多少次
     *  2018-12-12_电影 f q 15
     *        updateStateBykey 对内存要求要一点
     *         reduceBykey  对内存要求低一点
     * hbase: 只有一种数据类型,字节数组
     */
    @Override
    public void save(String tableName, String rowkey, String family, String q, long value) {
        HTableInterface table = getTable(tableName);//获取表对象
        try {
            //incrementColumnValue (英可乐蒙特可伦歪乐)相同的rowkey/family 的列进行value累加API
            table.incrementColumnValue(rowkey.getBytes(),family.getBytes(),q.getBytes(),value);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(table != null){
                    table.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }



    /**
     * 根据rowkey返回数据
     * @param tableName  表名
     * @param rowkey rowkey
     * @return
     */
    @Override
    public List<CategoryClickCount> count(String tableName, String rowkey) {
        ArrayList<CategoryClickCount> list = new ArrayList<CategoryClickCount>();
        HTableInterface table = getTable(tableName);
        //PrefixFilter  前缀过滤器     HBase 支持左匹配
        PrefixFilter prefixFilter = new PrefixFilter(rowkey.getBytes());
        Scan scan = new Scan();//Scan 扫描仪
        scan.setFilter(prefixFilter);//过滤器安装扫描仪中
        try {
            ResultScanner scanner = table.getScanner(scan);//对象 用扫描仪 获取数据
            for(Result result:scanner){//遍历scanner  用于一条数据封装成一个对象
                for(Cell cell: result.rawCells()){//Cell 单元格(每一个对象看作一个单元格)
                    byte[] date_name = CellUtil.cloneRow(cell);//cloneRow克隆(复制)获取rowkey
                    String name = new String(date_name).split("_")[1];
                    byte[] value = CellUtil.cloneValue(cell);//cloneValue克隆(复制)获取value
                    long count = Bytes.toLong(value);
                    CategoryClickCount categoryClickCount = new CategoryClickCount(name, count);
                    list.add(categoryClickCount);
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(table != null){
                try {
                    table.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }
}
 

4、工厂类

package com.aura.dao.factory;

import com.aura.dao.HBaseDao;
import com.aura.dao.impl.HBaseImpl;
//工厂类
public class HBaseFactory {
    public static HBaseDao getHBaseDao(){
        return new HBaseImpl();
    }
}

5、测试类

package com.aura.Test;

import com.aura.bean.CategoryClickCount;
import com.aura.dao.HBaseDao;
import com.aura.dao.factory.HBaseFactory;

import java.util.List;
//IDE往集群中HBase中写数据

 /* 往hbase里面插入一条数据
 * tableName 表名      aura
 * rowkey 行键         2018-05-23_电影
 * family 列簇         f
 * q 品类               name
 *  value  出现了多少次    10L 20L...
 */
//测试类
public class Test {
    public static void main(String[] args) {

        HBaseDao hBaseDao = HBaseFactory.getHBaseDao();
        //往HBase中插入数据
//        hBaseDao.save("aura",
//                "2018-05-23_电影","f","name",10L);
//        hBaseDao.save("aura",
//                "2018-05-23_电影","f","name",20L);
//        hBaseDao.save("aura",
//                "2018-05-21_电视剧","f","name",11L);
//        hBaseDao.save("aura",
//                "2018-05-21_电视剧","f","name",24L);
//
//        hBaseDao.save("aura",
//                "2018-05-23_电视剧","f","name",110L);
//        hBaseDao.save("aura",
//                "2018-05-23_电视剧","f","name",210L);

        List<CategoryClickCount> list = hBaseDao.count("aura", "2018-05-23");
        for(CategoryClickCount cc:list){
            System.out.println(cc.getName() + "  "+ cc.getCount());
        }

    }

}
 

6、运行结果:运行前要先打打开集群

            1)启动zookeeper :zkServer.sh start

            2 ) 启动HDFS :start-dfs.sh

            3 ) 启动HBbase  : ./start-hbase.sh   (在hbase的安装目录bin下启动:./[hadoop@hadoop02 bin]$./start-hbase.sh )

            4 ) 运行Test 测试类

            5 ) 操作hbase 数据命令:hbase shell (这里不用操作)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值