hbase的API并且使用多个rowkey分段直接读取数据

本文展示了一个使用Java进行HBase表扫描的具体示例,针对GPS数据,通过设定时间范围和设备ID,从HBase中批量读取并解析GPS数据。代码详细介绍了如何配置HBase客户端、创建扫描实例、设置起始和终止行键,以及如何解析结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.hopechart.dataquery.Decoder;
import com.hopechart.dataquery.RowKeyRuler;
import com.hopechart.type.TGPSV2;
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.HConstants;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        Configuration config = HBaseConfiguration.create();
        config.set("hbase.client.ipc.pool.size", "3");
        //config.set("hbase.zookeeper.quorum", "mine10");  //服务地址 zk
        //config.set("hbase.zookeeper.property.clientPort", "2181"); //端口号
        config.setLong(HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, 120000); //设置连接时长
        String recordDate ="20190205";
        String sDt = recordDate+" 00:00:00";
        String eDt = recordDate+" 23:59:59";
        SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd HH:mm:ss");
        Date dt1 = sdf.parse(sDt);
        Date dt2 = sdf.parse(eDt);
        long lTime = dt1.getTime() / 1000;
        long bTime = dt2.getTime() / 1000;
        HTable ht = new HTable(config, "t_gps_sq_"+recordDate);
        //扫描表
        List<Long> list = new ArrayList();
        list.add(1708040960L);
        list.add(1710050744L);
        Scan scan = new Scan();
        for (long v:list){
            long mdataId =v;
            byte[] startRowKey = RowKeyRuler.getRowKey(mdataId, lTime);
            byte[] endRowKey = RowKeyRuler.getRowKey(mdataId, bTime);
            scan.setStartRow(startRowKey);
            scan.setStopRow(endRowKey);
            scan.setBatch(10);
            ResultScanner rs = ht.getScanner(scan);
            for(Result result : rs) {
                for (Cell cell : result.rawCells()) {
                    byte[] cloneRow = CellUtil.cloneRow(cell);
                    long dataid = Decoder.byte4ToLongBig(cloneRow, 2);
                    byte[] cloneValue = CellUtil.cloneValue(cell);
                    TGPSV2 decode = (TGPSV2) Decoder.decode(1, cloneRow, cloneValue, 0);
                    long dataTime = decode.getDataTime();
                    System.out.println(dataid + " " + dataTime);
                }
            }
        }
        ht.close();
    }
}

 

转载于:https://www.cnblogs.com/zyanrong/p/10924227.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值