当前位置: 首页 > news >正文

大数据处理技术:HBase的安装与基本操作

目录

1 实验名称

2 实验目的

3 实验内容

4 实验原理

5 实验过程或源代码

5.1 Hbase数据库的安装

5.2 创建表

5.3 添加数据、删除数据、删除表

5.4 使用Java操作HBase

6 实验结果

6.1 Hbase数据库的安装

6.2 创建表

6.3 添加数据、删除数据、删除表

6.4 使用Java操作Hbase


1 实验名称

       HBase的安装与基本操作

2 实验目的

       1. 了解HBase 的概述及历史,理解HBase 的数据模型,理解HBase 的系统架构,学会HBase 的环境部署

       2、了解HBase 的数据模型和基本操作。

3 实验内容

       (1)Hbase数据库的安装

       (2)创建表

       (3)添加数据、删除数据、删除表

       (4)使用Java操作HBase

4 实验原理

       Hbase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用Hbase技术可在廉价的PC Server上搭建大规模结构化存储集群。HBase以表的形式存储数据,数据模型如下图HBase数据模型所示。表中的数据划分为多个Region,并由Master分配给对应的RegionServer进行管理。

       Hbase是一个分布式的、面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库。另一个不同的是Hbase基于列的而不是基于行的模式。Hbase使用和 BigTable非常相同的数据模型。用户存储数据行在一个表里。一个数据行拥有一个可选择的键和任意数量的列,一个或多个列组成一个ColumnFamily,一个Fmaily下的列位于一个HFile中,易于缓存数据。表是疏松的存储的,因此用户可以给行定义各种不同的列。在Hbase中数据按主键排序,同时表按主键划分为多个Region。每个Region包含了表中一段RowKey区间范围内的数据,HBase的一张数据表开始只包含一个Region,随着表中数据的增多,当一个Region的大小达到容量上限后会分裂成两个Region。您可以在创建表时定义Region的RowKey区间,或者在配置文件中定义Region的大小。

5 实验过程或源代码

5.1 Hbase数据库的安装

       1.将HBase解压到/app目录下:

mkdir /app
cd /opt
tar -zxvf hbase-2.1.1-bin.tar.gz -C /app

       2.配置JDK的路径,将JDK的路径配置到conf/下的hbase-env.sh中。输入echo $JAVA_HOME来复制JAVA_HOME的路径,编辑HBaseconf目录下的hbase-env.sh文件,将其中的JAVA_HOME指向到Java的安装目录,最后保存设置。

       3. 编辑hbase-site.xml文件,在<configuration>标签中添加如下内容:

 <configuration><property><name>hbase.rootdir</name><value>file:///root/data/hbase/data</value></property><property><name>hbase.zookeeper.property.dataDir</name><value>/root/data/hbase/zookeeper</value></property><property>     <name>hbase.unsafe.stream.capability.enforce</name><value>false</value></property>
</configuration>

       4.将Hbase的bin目录配置到/etc/profile中:vim /etc/profile,在etc/profile的文件末尾添加如下内容:

# SET HBASE_enviroment 
HBASE_HOME=/app/hbase-2.1.1
export PATH=$PATH:$HBASE_HOME/bin

       5.使刚刚的配置生效:source /etc/profile,输入命令start-dfs.sh来启动Hadoop,输入jps查看是否启动成功,接着我们输入start-hbase.sh来启动HBase,同样输入jps查看是否启动成功。

5.2 创建表

       1.启动HBase,输入hbase shell进入到Hbase shell命令行窗口;新建一个名为test的表:create 'test','data',继续在HBase中创建两张表,表名分别为:dept,emp,列都为:data,命令行:create 'dept','data'  create 'emp','data'。

       2.创建完毕,保存评测。

5.3 添加数据、删除数据、删除表

       1.启动HBase,输入hbase shell进入到Hbase shell命令行窗口。

       2.在HBase中创建表mytable,列为data,并在列族data中添加三行数据:

行号分别为:row1,row2,row3;

列名分别为:data:1,data:2,data:3;

值分别为:zhangsan,zhangsanfeng,zhangwuji。

5.4 使用Java操作HBase

       1.使用Java代码在HBase中创建表。命令行start-dfs.sh   start-hbase.sh。代码实现如下:

Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象
Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象
Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象
TableName tableName = TableName.valueOf("dept");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes ("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表
tableName = TableName.valueOf("emp");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;
tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象
tableDescriptor.setColumnFamily(family);//设置列族
admin.createTable(tableDescriptor.build());//创建表

       2.使用Java代码向HBase集群中创建表并添加数据。代码实现如下:

Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象TableName tableName = TableName.valueOf("tb_step2");//定义表名
//TableDescriptor对象通过TableDescriptorBuilder构建;TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);ColumnFamilyDescriptor family = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//构建列族对象tableDescriptor.setColumnFamily(family);//设置列族admin.createTable(tableDescriptor.build());//创建表Table table = connection.getTable(tableName);//获取Table对象try {byte[] row = Bytes.toBytes("row1");    //定义行Put put = new Put(row);                //创建Put对象byte[] columnFamily = Bytes.toBytes("data");    //列簇byte[] qualifier = Bytes.toBytes(String.valueOf(1)); //列byte[] value = Bytes.toBytes("张三丰");    //值put.addColumn(columnFamily, qualifier, value);table.put(put);        //向表中添加数据row = Bytes.toBytes("row2");    //定义行put = new Put(row);                //创建Put对象columnFamily = Bytes.toBytes("data");    //列簇qualifier = Bytes.toBytes(String.valueOf(2)); //列value = Bytes.toBytes("张无忌");    //值put.addColumn(columnFamily, qualifier, value);table.put(put);        //向表中添加数据} finally {//使用完了要释放资源table.close();}

       3.获取HBase中已存在表的数据并输出。代码实现如下:

Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象TableName tableName = TableName.valueOf("t_step3");//定义表名Table table = connection.getTable(tableName);//获取Table对象//获取数据Get get = new Get(Bytes.toBytes("row1"));    //定义get对象Result result = table.get(get);            //通过table对象获取数据// System.out.println("Result: " + result);//很多时候我们只需要获取“值” 这里表示获取 data:1 列族的值byte[] valueBytes = result.getValue(Bytes.toBytes("data"), Bytes.toBytes("1")); //获取到的是字节数组//将字节转成字符串String valueStr = new String(valueBytes,"utf-8");System.out.println("value:" + valueStr);tableName = TableName.valueOf("table_step3");//定义表名table = connection.getTable(tableName);//获取Table对象Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan);try {for (Result scannerResult: scanner) {// System.out.println("Scan: " + scannerResult);byte[] row = scannerResult.getRow();System.out.println("rowName:" + new String(row,"utf-8"));}} finally {scanner.close();}

       4.删除表。代码实现如下:

Configuration config = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象Connection connection = ConnectionFactory.createConnection(config); //config为前文的配置对象Admin admin = connection.getAdmin(); //使用连接对象获取Admin对象     TableName tableName = TableName.valueOf("t_step4");admin.disableTable(tableName);    //禁用表admin.deleteTable(tableName);    //删除表

6 实验结果

6.1 Hbase数据库的安装

       1.复制JAVA_HOME的路径

       2.编辑HBaseconf目录下的hbase-env.sh文件

       3.etc/profile的文件末尾添加内容

       4.启动成功

6.2 创建表

       1.Hbase shell命令行窗口

       2.成功新建一个名为test的表

       3.余下两张表创建成功

6.3 添加数据、删除数据、删除表

       1.创建表mytable

6.4 使用Java操作Hbase

       1.使用Java代码在HBase中创建表。

       2.使用Java代码向HBase集群中创建表并添加数据。

       3.获取HBase中已存在表的数据

       4.删除表。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 二级C语言2023-9易错题
  • 数据结构与算法-Trie树添加与搜索
  • IDEA甚至前进后退跳转键
  • 【第十三章:Sentosa_DSML社区版-机器学习聚类】
  • 携手阿里云CEN:共创SD-WAN融合广域网
  • 吃透这本大语言模型入门指南,LLM就拿下了
  • python脚本编译为.so速度对比
  • 使用LangGPT提示词让大模型比较浮点数
  • 如何查看Android设备的dpi
  • Springboot+Shiro+Mybatis+mysql实现权限安全认证
  • Webpack:现代前端项目的强大打包工具
  • redis分布式锁(看门枸机制)
  • linux如何对c++进行内存分析
  • Davinci 大数据可视化分析
  • 数字电子技术-编码器
  • ES6指北【2】—— 箭头函数
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【个人向】《HTTP图解》阅后小结
  • 07.Android之多媒体问题
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 4个实用的微服务测试策略
  • Angular 2 DI - IoC DI - 1
  • CSS实用技巧干货
  • eclipse(luna)创建web工程
  • Java 网络编程(2):UDP 的使用
  • JavaWeb(学习笔记二)
  • jdbc就是这么简单
  • MySQL用户中的%到底包不包括localhost?
  • python_bomb----数据类型总结
  • React组件设计模式(一)
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 从PHP迁移至Golang - 基础篇
  • 分享一份非常强势的Android面试题
  • 机器学习中为什么要做归一化normalization
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 深入 Nginx 之配置篇
  • 责任链模式的两种实现
  • #HarmonyOS:基础语法
  • #vue3 实现前端下载excel文件模板功能
  • (2020)Java后端开发----(面试题和笔试题)
  • (3)STL算法之搜索
  • (CPU/GPU)粒子继承贴图颜色发射
  • (C语言)fgets与fputs函数详解
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (七)Knockout 创建自定义绑定
  • (四)js前端开发中设计模式之工厂方法模式
  • (四)事件系统
  • (算法二)滑动窗口
  • (推荐)叮当——中文语音对话机器人
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)linux下的时间函数使用
  • (转载)OpenStack Hacker养成指南
  • (自用)交互协议设计——protobuf序列化