大数据学习系列之三 ----- HBase Java Api 图文详解
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,引言在上一篇中大数据学习系列之二 ----- HBase环境搭建(单机) 中,成功搭建了Hadoop+HBase的环境,本文则主要讲述使用Java 对HBase的一些操作。一、事前准备1.确认hado
千家信息网最后更新 2025年01月31日大数据学习系列之三 ----- 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安全错误
数据库的锁怎样保障安全
数据库连接打不开是什么原因
工信局网络安全检查大纲
随州好的软件开发
数据库coalesce
电竞酒店服务器配置需求
软件开发人员专业
上海软件开发区
青浦区品牌软件开发咨询热线
网络安全产品解决方案文档
从数据库获取某行的值
有没有学习网络技术的app
plc组态软件开发
服务器系统盘管理密码
五年级网络安全手抄或图画
数据库日志文件上百g
数据库创建和管理实验报告
湖南软件开发小程序开发
网络安全法培训会
如何把战神引擎sql导入数据库
泰安市公共信息网络安全监察
东芝注塑机数据库
ftp服务器原理
软件开发和影视后期哪个好就业
服务器暂时无法启动
数据库怎么连接到后端
分析网络技术的发展
高密度无线网络技术是5个嘛
面试java软件开发工程
数据库中连接运算举例
网络安全的厂商有哪些