大数据学习系列之三 ----- HBase Java Api 图文详解
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,引言在上一篇中大数据学习系列之二 ----- HBase环境搭建(单机) 中,成功搭建了Hadoop+HBase的环境,本文则主要讲述使用Java 对HBase的一些操作。一、事前准备1.确认hado
千家信息网最后更新 2026年11月01日大数据学习系列之三 ----- HBase Java Api 图文详解
引言
在上一篇中大数据学习系列之二 ----- HBase环境搭建(单机) 中,成功搭建了Hadoop+HBase的环境,本文则主要讲述使用Java 对HBase的一些操作。
一、事前准备
1.确认hadoop和hbase成功启动
2.确认防火墙是否关闭
3.maven所需要的依赖架包
org.apache.hadoop hadoop-common 2.8.2 org.apache.hadoop hadoop-client 2.8.2 org.apache.hadoop hadoop-hdfs 2.8.2 org.apache.hadoop hadoop-mapreduce-client-core 2.8.2 org.apache.hadoop hadoop-yarn-common 2.8.2 org.apache.hbase hbase-hadoop-compat 1.3.1 org.apache.hbase hbase-server 1.1.2 org.apache.hbase hbase-client 1.1.2 org.apache.hbase hbase-common 1.1.2 4.修改hosts文件(可选)
修改Windows C:\Windows\System32\drivers\etc 目录下的hosts文件,添加hbase的主机ip和主机名做关系映射。
192.168.238.128 master
注:如果不使用映射,那么将代码中的主机名改成IP即可。
5.HBase的原理
这篇文章介绍得很详细:
http://blog.csdn.net/woshiwanxin102213/article/details/17584043
二、测试示例
1.创建表
创建两张表 t_student、t_student_info 这两张表,并添加两个列族
创建成功之后可以在 hbase shell和16010界面中看到。
2.添加数据
成功创建表之后,在这两张表中插入数据。
因为HBase是动态数据库,所以列是可以新增的。
HBase的新增和修改是一个方法,数据相同的,后来的数据会将前面的覆盖掉!
3.查询数据
分别根据表名、行健、列族、列来查询
4.删除数据
删除其中的一条数据
三、代码示例
工具类
import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;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.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.Admin;import org.apache.hadoop.hbase.client.Connection;import org.apache.hadoop.hbase.client.ConnectionFactory;import org.apache.hadoop.hbase.client.Delete;import org.apache.hadoop.hbase.client.Get;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.client.Table;import org.apache.hadoop.hbase.util.Bytes;import com.alibaba.fastjson.JSONObject;/** * * Title: HBaseUtil * Description: HBase工具类 * Version:1.0.0 * @author pancm * @date 2017年12月6日 */public class HBaseUtil { /** hadoop 连接 */ private static Configuration conf = null; /** hbase 连接 */ private static Connection con = null; /** 会话 */ private static Admin admin = null; private static String ip ="master"; private static String port ="2181"; private static String port1 ="9001"; // 初始化连接 static { // 获得配制文件对象 conf = HBaseConfiguration.create(); // 设置配置参数 conf.set("hbase.zookeeper.quorum", ip); conf.set("hbase.zookeeper.property.clientPort", port); //如果hbase是集群,这个必须加上 //这个ip和端口是在hadoop/mapred-site.xml配置文件配置的 conf.set("hbase.master", ip+":"+port1); } /** * 获取连接 * * @return */ public synchronized static Connection getConnection() { try { if (null == con || con.isClosed()) { // 获得连接对象 con = ConnectionFactory.createConnection(conf); } } catch (IOException e) { System.out.println("获取连接失败!"); e.printStackTrace(); } return con; } /** * 连接关闭 */ public static void close() { try { if (admin != null) { admin.close(); } if (con != null) { con.close(); } } catch (IOException e) { System.out.println("连接关闭失败!"); e.printStackTrace(); } } /** * 创建表 * * @param tableName * 表名 * @param columnFamily * 列族 */ public static void creatTable(String tableName, String[] columnFamily) { if(null==tableName||tableName.length()==0){ return; } if(null==columnFamily||columnFamily.length==0){ return; } // 创建表名对象 TableName tn = TableName.valueOf(tableName); // a.判断数据库是否存在 try { // 获取会话 admin = getConnection().getAdmin(); if (admin.tableExists(tn)) { System.out.println(tableName + " 表存在,删除表...."); // 先使表设置为不可编辑 admin.disableTable(tn); // 删除表 admin.deleteTable(tn); System.out.println("表删除成功....."); } // 创建表结构对象 HTableDescriptor htd = new HTableDescriptor(tn); for (String str : columnFamily) { // 创建列族结构对象 HColumnDescriptor hcd = new HColumnDescriptor(str); htd.addFamily(hcd); } // 创建表 admin.createTable(htd); System.out.println(tableName + " 表创建成功!"); } catch (IOException e) { e.printStackTrace(); } finally { close(); } } /** * 数据单条插入或更新 * * @param tableName * 表名 * @param rowKey * 行健 (主键) * @param family * 列族 * @param qualifier * 列 * @param value * 存入的值 * @return */ public static void insert(String tableName, String rowKey, String family, String qualifier, String value) { Table t = null; try { t = getConnection().getTable(TableName.valueOf(tableName)); Put put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value)); t.put(put); System.out.println(tableName + " 更新成功!"); } catch (IOException e) { System.out.println(tableName + " 更新失败!"); e.printStackTrace(); } finally { close(); } } /** * 数据批量插入或更新 * * @param tableName * 表名 * @param list * hbase的数据 * @return */ public static void insertBatch(String tableName, List> list) { if (null == tableName ||tableName.length()==0) { return; } if( null == list || list.size() == 0){ return; } Table t = null; Put put = null; JSONObject json = null; List puts = new ArrayList(); try { t = getConnection().getTable(TableName.valueOf(tableName)); for (int i = 0, j = list.size(); i < j; i++) { json = (JSONObject) list.get(i); put = new Put(Bytes.toBytes(json.getString("rowKey"))); put.addColumn(Bytes.toBytes(json.getString("family")), Bytes.toBytes(json.getString("qualifier")), Bytes.toBytes(json.getString("value"))); puts.add(put); } t.put(puts); System.out.println(tableName + " 更新成功!"); } catch (IOException e) { System.out.println(tableName + " 更新失败!"); e.printStackTrace(); } finally { close(); } } /** * 数据删除 * @param tableName 表名 * @param rowKey 行健 * @return */ public static void delete(String tableName, String rowKey) { delete(tableName,rowKey,"",""); } /** * 数据删除 * @param tableName 表名 * @param rowKey 行健 * @param family 列族 * @return */ public static void delete(String tableName, String rowKey, String family) { delete(tableName,rowKey,family,""); } /** * 数据删除 * @param tableName 表名 * @param rowKey 行健 * @param family 列族 * @param qualifier 列 * @return */ public static void delete(String tableName, String rowKey, String family, String qualifier) { if (null == tableName ||tableName.length()==0) { return; } if( null == rowKey || rowKey.length() == 0){ return; } Table t = null; try { t = getConnection().getTable(TableName.valueOf(tableName)); Delete del = new Delete(Bytes.toBytes(rowKey)); // 如果列族不为空 if (null != family && family.length() > 0) { // 如果列不为空 if (null != qualifier && qualifier.length() > 0) { del.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier)); } else { del.addFamily(Bytes.toBytes(family)); } } t.delete(del); } catch (IOException e) { System.out.println("删除失败!"); e.printStackTrace(); } finally { close(); } } /** * 查询该表中的所有数据 * * @param tableName * 表名 */ public static void select(String tableName) { if(null==tableName||tableName.length()==0){ return; } Table t = null; List 测试代码
import java.util.ArrayList;import java.util.List;import com.alibaba.fastjson.JSONObject;/** * * Title: hbaseTest* Description: HBase 相关测试* Version:1.0.0 * @author pancm* @date 2017年11月23日 */public class hbaseTest { public static void main(String[] args) { test(); } /** * 一些测试 */ private static void test() { String tableName1="t_student",tableName2="t_student_info"; String []columnFamily1={"st1","st2"}; String []columnFamily2={"stf1","stf2"}; HBaseUtil.creatTable(tableName1, columnFamily1); HBaseUtil.creatTable(tableName2, columnFamily2); HBaseUtil.insert(tableName1, "1001", columnFamily1[0], "name", "zhangsan"); HBaseUtil.insert(tableName1, "1002", columnFamily1[0], "name", "lisi"); HBaseUtil.insert(tableName1, "1001", columnFamily1[1], "age", "18"); HBaseUtil.insert(tableName1, "1002", columnFamily1[1], "age", "20"); HBaseUtil.insert(tableName2, "1001", columnFamily2[0], "phone", "123456"); HBaseUtil.insert(tableName2, "1002", columnFamily2[0], "phone", "234567"); HBaseUtil.insert(tableName2, "1001", columnFamily2[1], "mail", "123@163.com"); HBaseUtil.insert(tableName2, "1002", columnFamily2[1], "mail", "234@163.com"); HBaseUtil.select(tableName1); //查询该表所有数据 HBaseUtil.select(tableName1, "1001"); //根据表名和行健查询 HBaseUtil.select(tableName2, "1002",columnFamily2[0]); //根据表名、行健和列族查询 HBaseUtil.select(tableName2, "1002",columnFamily2[1],"mail"); //根据表名、行健、列族、和列查询 HBaseUtil.select(tableName1, "1002"); //根据表名和行健查询 HBaseUtil.delete(tableName1, "1002", columnFamily1[0]);//删除数据 HBaseUtil.select(tableName1, "1002"); //根据表名和行健查询 }}其他
版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm
个人博客出处:http://www.panchengming.com
原创不易,转载请标明出处,谢谢!
数据
查询
成功
对象
出处
文件
更新
测试
主机
代码
配置
到时
博客
工具
数据库
环境
示例
结构
学习
明细
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
广东猪兼强互联网科技有限公司
新华互联网科技学院
科技互联网技术
猪兼强互联网科技
互联网 科技创业
猫创互联网科技
火传媒上海互联网科技
互联网科技公司介绍
镁科技互联网资讯平台
顺网科技2021年互联网排名
华中科技有哪些互联网大佬
湖南洣水互联网科技有限公司扣款
深圳市运趣互联网科技有限公司
恒银科技与互联网金融
互联网科技有哪些公司
厦门比较好的科技互联网公司
内蒙古九一互联网科技
群盈汇互联网科技有限公司
求路客互联网科技电话
A股互联网金融科技公司
科技互联网项目
易互联网科技有限公司
互联网科技寓意
金融科技与互联网金融相同和不同
互联网校园科技培训
重庆互联网医院沙龙医盟信息科技
花神(南京)互联网科技有限公司
21世纪互联网科技成就
数字互联网科技有限公司