大数据处理技术: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.xdnf.cn/news/1536988.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux进阶 修改文件权限

linux文件权限 查看文件权限 用 ls -l 查看当前目录下文件权限 各部分对应的内容: 第一个字符代表这个文件类型[d]:目录[-] :文件[l]:连结档(link file);[b]:装置文件里面的可供储存的接口设备(可随机存取装置)[c]:装置文件里面的串行端口设备,例如键盘、鼠标(一次性…

Linux常用目录结构

一、Linux常用目录结构 目录名 目录作用 /bin/ 存放系统命令的目录,普通用户和超级用户都可以执行。 是/usr/bin/目录的软链接 /sbin/ 存放系统命令的目录,只有超级用户才可以执行。是/ usr/ sbin/目录的软链接 /usr/bin/ 存放系统命令的目录,普通用户和超级用户都可以…

在麒麟操作系统中查看进程运行时间

在麒麟操作系统中查看进程运行时间 1、使用ps命令查看进程运行时间1.1 基本命令结构1.2 示例&#xff1a;查看sshd进程的运行时间 2、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux操作系统中&#xff0c;包括麒麟&#xff08…

神经网络通俗理解学习笔记(4) 深度生成模型VAE、GAN

深度生成模型 什么是生成式模型蒙特卡洛方法变分推断Variational Inference变分自编码器VAE生成对抗网络Generative Adversarial NetworkDiffusion 扩散模型VAE和GAN 代码实现 什么是生成式模型 判别式和生成式模型 判别式:CNN/RNN/transformer;生成式:AE/VAE/GAN 判别式模型学…

【例题】lanqiao3236 小蓝的零花钱

样例输入 6 3 1 2 3 4 5 6样例输出 2解题思路 在序列中选取一个位置将序列分成两段&#xff0c;要求每一段中偶数和奇数的数量都相等尽可能多地进行这个操作&#xff0c;但每次操作都需要花费代价切割需要花费的代价为切割两端的元素的差的绝对值在他的预算范围内&#xff0…

基于51单片机的智能风扇控制系统Protues仿真设计

目录 一、设计背景 二、实现功能 三、仿真演示 四、源程序&#xff08;部分&#xff09; 一、设计背景 在当今这个科技日新月异的时代&#xff0c;家电产品正以前所未有的速度向智能化、自动化迈进&#xff0c;旨在为用户带来更加便捷、舒适的生活体验。电风扇&#xff0c;…

一次RPC调用过程是怎么样的?

注册中心 RPC&#xff08;Remote Procedure Call&#xff09;翻译成中文就是 {远程过程调用}。RPC 框架起到的作用就是为了实现&#xff0c;调用远程方法时&#xff0c;能够做到和调用本地方法一样&#xff0c;让开发人员更专注于业务开发&#xff0c;不用去考虑网络编程等细节…

数据库基础(MySQL)

目录 1. 概述 2. MySQL安装准备 3. SQL概述 3.1 什么是SQL 3.2 SQL通用语法 3.3 SQL分类 4. DDL 4.1 操作数据库 4.1.1 C(Create)创建 4.1.2 R(Retrieve)查询 4.1.3 U(Update):修改 4.1.4 D(Delete):删除 4.1.5 使用数据库 4.2 操作表 4.2.1 C(Create):创建 4.2…

苹果已确定9月iPhone 16系列发布会,然而这些产品不会亮相

近日&#xff0c;科技巨头苹果公司正式宣布将于9月举办一年一度的iPhone 16系列发布会。 这场备受瞩目的活动吸引了全球众多科技爱好者的目光。 然而&#xff0c;在发布会前夕&#xff0c;有消息传出&#xff0c;部分备受期待的产品将不会亮相。 究竟哪些产品会惊艳登场&…

QT + WebAssembly + Vue环境搭建

Qt6.7.2安装工具 emsdk安装 git clone https://github.com/emscripten-core/emsdk.git cd emsdk emsdk install 3.1.50 emsdk activate 3.1.50 Qt Creator配置emsdk 效果 参考 GitHub - BrockReece/vue-wasm: Vue web assembly loader Emscripten cmake多版本编译-CSDN博客 …

我的标志:奇特的头像

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>与妖为邻</title><style>figure.log…

【PHP代码审计】 PHP环境搭建

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 安装phpstudy 泥菩萨-CSDN博客 安装vscode 直接去官网下载安装包&#xff0c;然后双击安装即可。官网地址&#xff1a;htt…

re题(27)BUUFCTF-[MRCTF2020]Transform

BUUCTF在线评测 (buuoj.cn) 先到ida&#xff0c;先看一下字符串 找到主函数 int __cdecl main(int argc, const char **argv, const char **envp) {char Str[104]; // [rsp20h] [rbp-70h] BYREFint j; // [rsp88h] [rbp-8h]int i; // [rsp8Ch] [rbp-4h]sub_402230(argc, arg…

Virtuoso配置文件(virtuoso.ini)详解

目录 前言1. Virtuoso ini 文件的作用2. 如何使用 virtuoso.ini3. Virtuoso ini 文件结构详解3.1 数据库相关配置3.2 服务器参数配置3.3 网络设置3.4 内存优化3.5 复制与高可用性配置3.6 SPARQL 查询设置 4. virtuoso.ini文件示例5. 结语 前言 Virtuoso 是一款强大的通用数据集…

深度学习--------------序列模型

目录 序列数据统计工具&#xff08;方案一&#xff09;马尔可夫假设&#xff08;方案二&#xff09;潜变量模型总结 序列模型基于马尔可夫假设方式该部分总代码 单步预测多步预测k步预测该部分总代码 序列数据 实际中数据是有时序结构的。 统计工具 在时间t观察带 x t x_t xt…

git push : RPC failed; HTTP 400 curl 22 The requested URL returned error: 400

git push 出现RPC failed; HTTP 400 curl 22 The requested URL returned error: 400 问题 git push Enumerating objects: 11, done. Counting objects: 100% (11/11), done. Delta compression using up to 8 threads Compressing objects: 100% (10/10), done. error: RPC …

通用接口开放平台设计与实现——(31)API服务线程安全问题确认与修复

背景 在本系列的前面一篇博客评论中&#xff0c;有小伙伴指出&#xff0c;API服务存在线程安全问题&#xff1a; https://blog.csdn.net/seawaving/article/details/122905199#comments_34477405 今天来确认下&#xff0c;线程是否安全&#xff1f;如不安全&#xff0c;如何…

【AIGC】CFG:基于扩散模型分类器差异引导

摘要 分类器指导是最近引入的一种方法&#xff0c;在训练后在条件扩散模型中权衡模式覆盖率和样本保真度&#xff0c;在精神上与其他类型的生成模型中的低温采样或截断相同。分类器引导将扩散模型的分数估计与图像分类器的梯度相结合&#xff0c;因此需要训练与扩散模型分离的…

C#语言依然是主流的编程语言之一,不容置疑

C#语言是由微软在2000年发布的现代面向对象编程语言。尽管在编程语言市场中的占有率相对较低&#xff0c;但C#依然保持了强大的存在感&#xff0c;并未像一些其他语言那样逐渐被淘汰。C#语言不仅有其存在的独特理由&#xff0c;而且拥有许多令人无法忽视的优势。以下从多个方面…

积分电路和滤波电路的主要区别点和应用场合

文章目录 前言一、滤波电路的分类二、有源滤波器和无源滤波器的优缺点和实用范围三、积分电路3.1 无源积分电路3.2 RC充放电的电路响应3.2.1 RC电路的零状态响应3.2.2 RC电路的零输入响应3.2.3 RC电路的全响应3.2.4 选取合适的时间常数四 、无源RC低通滤波器4.3.1 截止频率推导…