在Mac上配置HBase伪分布式娱乐环境

2024-05-14 05:38

本文主要是介绍在Mac上配置HBase伪分布式娱乐环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HBase是运行在Hadoop分布式文件系统HDFS上进行数据存储的开源非关系型分布式数据库,2020年我尝试在Mac上配置一个伪分布式的v2.2.3 HBase环境,看看能不能进行一些基本的读写操作,以便熟悉一下分布式数据库有什么特点。

三种运行模式

单机模式

  1. Hbase不使用HDFS,仅使用本地文件系统

  2. ZooKeeper与Hbase运行在同一个JVM中

伪分布式模式

  1. 所有进程运行在同一个节点上,不同进程运行在不同的JVM当中
  2. 比较适合实验测试

完全分布式模式

  1. 进程运行在多个服务器集群中
  2. 分布式依赖于HDFS系统,因此布署Hbase之前一定要有一个正常工作的HDFS集群

那么HBase伪分布式环境部署要分几步呢?我们现在梳理一下。

  1. JDK 1.8
  2. Hadoop环境
  3. HBase环境

截止目前(2020年03月03日)我使用最新的stable HBase版本2.2.3进行配置。

JDK 1.8

HBase是使用Java开发的,因此配置需要JDK环境,目前长期稳定版LTS只支持到JDK 8(LTS JDK支持进度可到 https://hbase.apache.org/book.html#java 查看)

Screen-Shot-2020-03-03-at-5.39.03-PM

可以翻阅我之前的博客查看在Ubuntu和MacOS上安装JDK 8的过程,这里不再细述。

Hadoop

在MacOS上配置伪分布式环境的详细办法可以查看我的上一篇博文👉🏻https://fuhailin.github.io/Hadoop-on-MacOS/ 。HBase是运行在HDFS之上的分布式数据库,所以在启动HBase之前必须先启动HDFS,运行$HADOOP_HOME//sbin/start-dfs.sh启动HDFS。

HBase

Zookeeper

顾名思义 Zookeeper 就是动物园管理员,它是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 Zookeeper;Zookeeper是一个分布式的、开源的程序协调服务,是 Hadoop 项目下的一个子项目,它提供的主要功能包括:配置维护、域名服务、分布式同步、集群管理。

注:如果为了简单的话,可以选择不安装Zookeeper集群,就跟Spark默认提供自己的Scala一样,HBase默认配置自己提供的Zookeeper支持。

HBase安装

很多资料提到可以使用Hombrew直接通过’brew install hbase’进行HBase的下载配置,但是由于之前Hadoop的安装过程中Homebrew总是下载最新的JDK依赖这让我无法掌控是否兼容,于是我就直接在官网(https://hbase.apache.org/downloads.html)下载编译好的二进制版HBase进行配置。将下载好的hbase-2.2.3-bin.tar.gz解压到程序存放目录,然后将得到的bin路径添加到环境变量里,我是这样做的,vim ~/.bash_profile,添加:

# HBASE
export HBASE_HOME=/Users/vincent/opt/hbase/hbase-2.2.3
export PATH=$PATH:$HBASE_HOME/bin

关注我的公众号"赵大寳Note"(ID:StateOfTheArt),不定期分享编程相关的有趣内容,查看往期精品搜集收藏一起学习。
关注公众号趙大寳Note,回复“激活函数”下载全部代码

伪分布式配置

  1. JAVA_HOME的路径添加到hbase-env.sh文件,修改vim $HBASE_HOME/conf/hbase-env.sh:
# The java implementation to use.  Java 1.8+ required.
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
  1. 在hbase-site.xml中添加如下内容:
<configuration><property><name>hbase.rootdir</name><value>hdfs://localhost:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value></property>
</configuration>

hbase.rootdir:该参数制定了HReion服务器的位置,即数据存放的位置。主要端口号要和Hadoop相应配置一致。
hbase.cluster.distributed:HBase的运行模式。false是单机模式,true是分布式模式。若为false, HBase和Zookeeper会运行在同一个JVM里面,默认为false。

启动HBase

如果完成了以上步骤,通过source ~/.bash_profile操作使修改的环境变量生效并启动了Hadoop($HADOOP_HOME/bin/start-dfs.sh),就可以通过$HBASE_HOME/bin/start-hbase.sh脚本来启动HBase了,启动完成后通过jps命令检查HBase进程:

Screen-Shot-2020-03-03-at-7.32.34-PM

启动成功后可以看到几个正在运行的Java进程,包括Hadoop(DataNode、NameNode)、Zookeeper(HQuorumPeer)和HBase(HMaster、HRegionServer)。

通过hbase version命令查看HBase是否正常运行打印版本信息:

1583235497008

成功启动后,可以访问 HBase的Web 界面 http://localhost:16020 查看集群的运行状态信息。

Screen-Shot-2020-03-04-at-2.21.55-PM

进入HBase交互式界面hbase shellstatus命令查看HBase集群运行状态,list命令列出HBase库中的表:

Screen-Shot-2020-03-04-at-11.13.50-AM

【注意】:我几次在尝试hbase shell交互式编程时遇到ERROR: KeeperErrorCode = NoNode for /hbase/master的错误信息,通过查看$HBASE_HOME/logs/中日志可以查看详细异常信息,怀疑是HBase自带的Zookeeper存在管理问题,重启HBase后又没有问题,但还没有找出错误的规律,可以尝试单独下载配置Zookeeper程序,有线索的朋友欢迎留言

这里启动关闭Hadoop和HBase的顺序一定是:
启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop

HBase Shell 编程实践

HBase建表

HBase中用create命令创建表,具体如下:

  create 'student','Sname','Ssex','Sage','Sdept','course'

Screen-Shot-2020-03-04-at-12.16.47-PM

HBase增删查改

添加数据
HBase中用put命令添加数据,注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。

# 为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001
put 'student','95001','Sname','LiYing'
# 为95001行下的course列族的math列添加了一个数据
put 'student','95001','course:math','80'

删除数据
在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:1. delete用于删除一个数据,是put的反向操作;2. deleteall操作用于删除一行数据。

# 删除一个数据,是put的反向操作
delete 'student','95001','Ssex'
# 删除student表中的95001行的全部数据
deleteall 'student','95001'

查看数据
HBase中有两个用于查看数据的命令:1. get命令,用于查看表的某一行数据;2. scan命令用于查看某个表的全部数据

# 查看‘student’表‘95001’行的数据
get 'student','95001'
# 查看‘student’表的全部数据
scan 'student'

Screen-Shot-2020-03-04-at-7.59.26-PM

删除表
删除表有两步,第一步先让该表不可用,第二步删除表。

#先禁用表
disable 'student'
#删除表
drop 'student'

至此我们已经完成了HBase的伪分布式配置与基本的增删查改操作,那它能替换我们的MySQL和Oracle吗?

HBase与传统关系数据库对比分析:

HBase与传统的关系数据库的区别主要体现在以下几个方面:

  1. 数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串。
  2. 数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表和表之间的关系。
  3. 存储模式:关系数据库是基于行模式存储的。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的。
  4. 数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来。
  5. 数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留。
  6. 可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

HBase的适用业务场景

  1. 写密集型应用:每天写入量巨大,而相对读数量较小的应用,比如IM的历史消息、游戏的日志等等
  2. 不需要复杂查询条件来查询数据的应用:HBase只支持基于rowkey的查询,对于HBase来说,单条记录或者小范围的查询是可以接受的,大范围的查询由于分布式的原因,可能在性能上有点影响,而对于像SQL的join等查询,HBase无法支持。
  3. 对性能和可靠性要求非常高的应用:由于HBase本身没有单点故障,可用性非常高。
  4. 海量数据,而且增长量无法预估的应用:HBase支持在线扩展,即使在一段时间内数据量呈井喷式增长,也可以通过HBase横向扩展来满足功能。

References:

  1. Hbase的伪分布式安装|SlowTech

  2. HBase2.2.2安装和编程实践指南|林子雨

  3. HBase技术原理|曹世宏

  4. Apache HBase ™ Reference Guide

这篇关于在Mac上配置HBase伪分布式娱乐环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987899

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各