大数据学习系列之三 ----- HBase Java Api 图文详解
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,引言在上一篇中大数据学习系列之二 ----- HBase环境搭建(单机) 中,成功搭建了Hadoop+HBase的环境,本文则主要讲述使用Java 对HBase的一些操作。一、事前准备1.确认hado
千家信息网最后更新 2024年09月22日大数据学习系列之三 ----- 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安全错误
数据库的锁怎样保障安全
移动服务器密码是什么意思
知道域名怎么查服务器
数据库设计是否要加冗余字段
信息软件开发瀑布模型
ibm4252服务器价格
企业管理erp服务器
小学生网络安全知识教育图片
奥林软件开发有限公司
数据库系统概念df
我的世界全部服务器
窝窝网络安全
云端服务器会监控吗
网络技术与电子商务 书本
数据库管理员权限 漏洞
福州扫码洗车软件开发
腾讯网络安全中心最新风险网址
怎么让电脑成为服务器
地籍数据的属性数据库
商丘软件开发公司工资
北京软件开发商名录
识别软件开发招标文件
网络安全节目观后感
龙之谷南方电信大区服务器名称
做软件开发的前景怎么样
东营服务器管理系统设备
四川智慧管理平台软件开发
如何设置默认数据库文件夹里
关系数据库中关系是记录吗
玉溪快火互联网科技有限公司
qt post 上传数据库