大数据学习系列之三 ----- HBase Java Api 图文详解
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,引言在上一篇中大数据学习系列之二 ----- HBase环境搭建(单机) 中,成功搭建了Hadoop+HBase的环境,本文则主要讲述使用Java 对HBase的一些操作。一、事前准备1.确认hado
千家信息网最后更新 2025年12月03日大数据学习系列之三 ----- 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安全错误
数据库的锁怎样保障安全
玩客云如何搭建服务器
电信宽带的服务器是怎么样子的
数据库重构和迁移
最新软件开发费用国家标准
笔记本网络dns服务器错误
绝地求生亚服服务器怎么找
企业网络安全安装
数据库视图有哪些优点
出国打工 软件开发
私有云储存服务器
gp数据库连接
燃烧的远征 数据库
网络安全系统一般多少钱
网络安全健康日
计算机网络安全方面的面试题
富士康和浪潮软件开发
网络安全记心中班会内容
2021网络安全宣传周晚会
网络安全数据大会
中国影响力人物数据库李东军
你怎么看待中国网络安全
mysql数据库服务删掉
软件开发专业怎么
河北交友软件开发哪家便宜
我的世界账号被服务器封号怎么办
中通快递 网络安全等级
服务器管理中工具不能用
服务器管理口配地址
武汉农商行软件开发
标题 连接到服务器