大数据处理技术: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.删除表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Elasticsearch系列七】索引 crud

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数据结构(Day13)

一、学习内容 内存空间划分 1、一个进程启动后&#xff0c;计算机会给该进程分配4G的虚拟内存 2、其中0G-3G是用户空间【程序员写代码操作部分】【应用层】 3、3G-4G是内核空间【与底层驱动有关】 4、所有进程共享3G-4G的内核空间&#xff0c;每个进程独立拥有0G-3G的用户空间 …

计算机网络(Hub 集线器、交换机、路由器)

计算机网络 匹配符Hub 集线器实现多台电脑之间的通信&#xff1a;交换机实现两个局域网之间的通信&#xff1a;路由器 OSI参考模型TCP/IP协议族家庭宽带中&#xff1a; 无线路由器IP地址NAT 网络地址转换&#xff1a;解决IP地址不足 VPN 匹配符 Hub 集线器 群发 半双工 实现…

[数据集][目标检测]烟叶病害检测数据集VOC+YOLO格式612张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;612 标注数量(xml文件个数)&#xff1a;612 标注数量(txt文件个数)&#xff1a;612 标注类别…

【鸿蒙】HarmonyOS NEXT星河入门到实战7-ArkTS语法进阶

目录 1、Class类 1.1 Class类 实例属性 1.2 Class类 构造函数 1.3 Class类 定义方法 1.4 静态属性 和 静态方法 1.5 继承 extends 和 super 关键字 1.6 instanceof 检测是否实例 1.7.修饰符(readonly、private、protected 、public) 1.7.1 readonly 1.7.2 Private …

汽车免拆诊断案例 | 沃尔沃V40 1.9TD断续工作

故障现象 一辆04款的沃尔沃V40 1.9 TD&#xff0c;发动机代码D4192T3&#xff0c;使用博世EDC15C发动机管理。客户说车子断续工作&#xff0c;怀疑是正时皮带出现问题。卸下上皮带盖&#xff0c;检查发现皮带仍然在原来的位置上并且没有出现松动。起动发动机&#xff0c;车辆能…

安卓玩机工具-----ADB与 FASTBOOT模式 图形化 多功能玩机刷机工具

工具说明 这款工具是英文版。易于使用的工具提供了用于运行 ADB 和 Fastboot 命令的图形用户界面。ADB 功能包括旁加载、安装和卸载应用程序、测试设备以及重新启动到不同的模式。可以使用 fastboot 命令进行设备管理;其中包括检查 Antirollback 和 active slots 等变…

YOLOv8 人体姿态估计动作识别关键点检测(代码+教程)

YOLOv8 人体姿态判断 项目介绍 YOLOv8 人体姿态判断 是一个基于最新YOLOv8模型的深度学习项目&#xff0c;旨在识别和分析人体姿态。该项目利用先进的计算机视觉技术和深度学习框架&#xff0c;通过摄像头捕捉实时图像或处理存储图像&#xff0c;识别人体的关键点&#xff0c…

基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机 ds18B20读取温度&#xff0c; 设置初始心率65 设置温度阈值38 心率阈值60 100 如果超过阈值&#xff0c;蜂鸣器报警&#xff0c;led灯亮 二、硬件资源 基于KEIL5编写C代码&#…

数据库语言、SQL语言、数据库系统提供的两种语言

1.数据库语言 数据库语言有很多种&#xff0c;其中一种是SQL语言。 2. SQL语言 【几乎所有的关系数据库系统都使用SQL语言。】 SQL语言中包含很多不同的部分&#xff0c;有&#xff1a; &#xff08;1&#xff09;DDL语言&#xff08;Data definition language&#xff09;…

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…

(k8s)Kubernetes 从0到1容器编排之旅

一、引言 在当今数字化的浪潮中&#xff0c;Kubernetes 如同一艘强大的航船&#xff0c;引领着容器化应用的部署与管理。它以其卓越的灵活性、可扩展性和可靠性&#xff0c;成为众多企业和开发者的首选。然而&#xff0c;要真正发挥 Kubernetes 的强大威力&#xff0c;仅仅掌握…

pytorch 报错 the graph are freed when you call .backward() or autograd.grad()

原来 的环境 是 python 3.7 torch1.13.1 环境 下面跑通的代码 到 python 3.10 和torch 2.3.1报错 File "/mnt/workspace/t.py", line 200, in train d_loss.backward() File "/usr/local/lib/python3.10/site-packages/torch/_tensor.py", line 5…

flink 常见的缩减状态的方式

在 Apache Flink 中&#xff0c;缩减状态(state reduction)是指在流处理任务中&#xff0c;通过一定的方式减少或优化状态的存储和管理&#xff0c;降低内存消耗或加快计算速度。以下是 Flink 中常见的缩减状态的方式&#xff1a; 1. 时间窗口&#xff08;Windowing&#xff0…

C++系列-谓词predicate

谓词predicate &#x1f4a2;什么是谓词&#x1f4a2;&#x1f4a2;函数(function)谓词&#x1f4a2;&#x1f4a2;函数指针(function pointer)谓词&#x1f4a2;&#x1f4a2;函数对象(Function Object)谓词&#x1f4a2;&#x1f4a2;lambda表达式谓词&#x1f4a2;&#x1f…

加密与安全_优雅存储用户密码的最佳实践

文章目录 Pre概述最佳实践避免使用MD5、SHA1等快速哈希算法加盐哈希 &#xff08;不推荐&#xff09;使用BCrypt、Argon2等慢哈希算法 (推荐)BCrypt Code1. 自动生成和嵌入盐2. 哈希结果的格式3. 代价因子 BCrypt特点 防止暴力破解1. 登录失败锁定2. 双因素认证&#xff08;2FA…

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }

搭建VUE前端项目流程——Node.js 、Yarn、npm、Vue、Vite、Webpack

文章目录 搭建VUE前端项目流程Vue、Vite、Webpack、Yarn、Node.js 和 npm 的概念解释&#xff0c;以及它们之间的关系&#xff1a;搭建项目流程 搭建VUE前端项目流程 Vue、Vite、Webpack、Yarn、Node.js 和 npm 的概念解释&#xff0c;以及它们之间的关系&#xff1a; Node.js…

Python酷库之旅-第三方库Pandas(117)

目录 一、用法精讲 516、pandas.DataFrame.add_suffix方法 516-1、语法 516-2、参数 516-3、功能 516-4、返回值 516-5、说明 516-6、用法 516-6-1、数据准备 516-6-2、代码示例 516-6-3、结果输出 517、pandas.DataFrame.align方法 517-1、语法 517-2、参数 51…

12. DataLoader的基本使用

DataLoader的基本使用 1. 为什么要使用DataLoader DataLoader对创建好的DataSet的样本取样进行了集成操作,非常方便对于后续网络训练、测试的数据集的选择和使用 DataLoader可以集成了数据批量加载的方法,可以使用 batch_size 设置批量大小,DataLoader就会自动处理批量数据…