一、常见的NoSQL数据库
NoSQL数据库的说明与定义
NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称。它不依赖于业务逻辑来存储有关联的数据,而是以键值对、列族、文档、图形等非关系模型的形式进行数据存储。
分类
NoSQL数据库通常包括键值数据库(如Redis)、列族数据库(如HBase)、文档数据库(如MongoDB)和图形数据库(如Neo4j)等。
特点
- 灵活的可扩展性:NoSQL数据库去掉了关系数据库的关系型特性,数据之间无关系,因此能够轻松地进行横向扩展,以应对大规模数据和高并发访问的需求。
- 灵活的数据模型:NoSQL数据库采用多种非关系模型,允许在一个数据元素里存储不同类型的数据,提供了更高的数据模型灵活性。
- 高性能:NoSQL数据库通过优化数据存储、读写操作等方面的设计,能够提供更高的性能和吞吐量,特别是在处理大规模数据和高并发场景时表现优异。
- 弱一致性:与关系数据库的强一致性不同,NoSQL数据库一般采用最终一致性或者柔性事务的方式来保证数据的一致性,这有助于提升系统的可用性和性能。
- 低成本:NoSQL数据库通常采用分布式架构,使用廉价的硬件设备,相对于传统的关系型数据库而言成本较低。
常见的NoSQL数据库
HBase——分布式列数据库:面向列存储,适用于大规模数据处理,如日志分析。
Redis——高性能键值数据库:内存存储,支持多种数据结构,常用于缓存和会话管理。
MongoDB——文档型NoSQL数据库:存储BSON格式文档,支持动态查询,适用于非结构化数据存储。
二、HBase的体系架构和表结构
HBase的体系架构
其中Region表示列簇。
在Region中,数据将优先存储在内存的MemStore上。当MemStore中的数据量达到一定的阈值时,为了释放内存空间,HBase会将MemStore中的数据刷写到磁盘上,形成Store Files(也称为HFiles)。HFiles是HBase中存储数据的物理文件,它们的大小并不是与DataNode的大小一致,而是随着数据的写入而逐渐增长,直到达到HBase配置的某个大小阈值。之后,这些HFiles会被存储在HDFS的DataNode上,以实现数据的持久化存储。
HBase的表结构
-- 插入行键为's01'的数据到'info'列族中的'name'列
PUT '表名', 's01', 'info:name', 'Tom'
-- 插入行键为's01'的数据到'info'列族中的'age'列
PUT '表名', 's01', 'info:age', '24'
-- 插入行键为's01'的数据到'grade'列族中的'Chinese'列
PUT '表名', 's01', 'grade:Chinese', '98'
-- 插入行键为's02'的数据到'info'列族中的'name'列
PUT '表名', 's02', 'info:name', 'Sam'
-- 插入行键为's02'的数据到'info'列族中的'age'列
PUT '表名', 's02', 'info:age', '29'
-- 插入行键为's02'的数据到'grade'列族中的'Chinese'列
PUT '表名', 's02', 'grade:Chinese', '51'
-- 插入行键为's03'的数据到'info'列族中的'name'列
PUT '表名', 's03', 'info:name', 'Mike'
三、搭建HBasa环境
1.本地模式
特点
- 不需要HDFS支持,数据存储在操作系统之中
部署
上传安装介质–》解压–》环境变量–》参数文件
参数配置
.bash_profile
HBASE_HOME=/root/training/hbase-1.3.1
export HBASE_HOME
PATH=$HBASE_HOME/bin:$PATH
export PATH
hbase-env.sh
export JAVA_HOME=/root/training/jdk1.8.0_181
hbase-site.sml
<property>
<name>hbase.rootdir</name>
<value>file:///root/training/hbase-1.3.1/data</value>
</property>
效果
2.伪分布模式
特点
在单机上模拟分布式环境,具备HBase的所有功能,多用于开发和测试
部署
上传安装介质–》解压–》环境变量–》参数文件
参数配置
hbase-env.sh
export HBASE_MANAGES_ZK=true
hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.80.111:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.80.111</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
regionservers
192.168.80.111
效果
全分布模式
部署
主节点安装HBase介质,并设置相关环境变量
参数配置
hbase-env.sh
export JAVA_HOME=/root/training/jdk1.8.0_181
export HBASE_MANAGES_ZK=true
hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.80.112:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.80.112</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
regionservers
192.168.80.113
192.168.80.114
将主节点的HBase文件夹复制到从节点上
scp -r hbase-1.3.1/ root@bigdata113:/root/training
scp -r hbase-1.3.1/ root@bigdata114:/root/training
启动
在主节点上运行如下代码
start-all.sh
start-hbase.sh
效果
HA模式
HA:设置备用的主节点HMaster,当112上的主节点失效时,切换即可
部署:建立好分布式模式即可
切换主节点代码
hbase-daemon.sh start master