
2021SC@SDUSC 山东大学软件学院软件工程应用与实践
2021SC@SDUSC
当需要进行实时读写或者随机访问大规模的数据集的时候,我们应该优先考虑使用Hbase!
Hbase是Hadoop的生态系统,是建立在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,通过利用Hadoop的文件系统提供容错能力。
Hbase作为Google Bigtable的开源实现,Google Bigtable利用GFS作为其文件存储系统类似,则Hbase利用Hadoop HDFS作为其文件存储系统;Google通过运行MapReduce来处理Bigtable中的海量数据,同样,Hbase利用Hadoop MapReduce来处理Hbase中的海量数据;Google Bigtable利用Chubby作为协同服务,Hbase利用Zookeeper作为对应。
2.Hbase生态项目架构 3.Hbase数据模型作为一个分布式、面向列的数据库,存储数据自然是其基础功能,下图为Hbase的物理数据模型:
Hbase通过表格的模式存储数据,每个表格由列和行组成,其中,每个列又被划分为若干个列族(row family)
4.Hbase架构下图为Hbase的项目组成结构:
通过上图我们可以得出Hbase中的每张表都按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过 256M 就要被分割成两个,由 HRegionServer管理,管理哪些HRegion由HMaster分配。
5.Hbase 的应用从hbase官方及github上将源码下载到本地,于虚拟机中部署测试使用相关功能及,项目启动的shell入口相关源码,然后导入到idea中,采用debug方式进行源码的分析学习。
项目部署核心流程(伪分布式安装与配置) 1.ubuntu上部署hadoop由于虚拟机之前配置过jdk1.8,所以可直接使用
echo $JAVA_HOME
命令查看jdk路径。
下载hadoop(注意hadoop和hbase的版本兼容问题,参考官方文档)
在虚拟机中解压,并移动到/usr目录下(所有步骤均由管理员用户操作)
使用vi /etc/profile 命令添加,并退出保存。
HADOOP_HOME=/usr/hadoop-3.1.2
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin: $PATH
执行命令 source /etc/profile刷新配置。
进入 $HADOOP_HOME/etc/hadoop/目录下,执行命令 vi hadoop-env.sh修改JDK环境变量,jdk路径可以通过echo $JAVA_HOME查看。
export JAVA_HOME=jdk路径
在 $HADOOP_HOME/etc/hadoop/目录下,执行命令vi core-site.xml
在 $HADOOP_HOME/etc/hadoop/目录下,执行命令vi hdfs-site.xml
修改代码如下:
(上边为core-site.xml,下边为hdfs-site.xml要插入的)
hadoop.tmp.dir file:/usr/hadoop-2.10.1/tmp Abase for other temporary directories. fs.defaultFS hdfs://localhost:9000 dfs.replication 1 dfs.namenode.name.dir file:/usr/hadoop-2.10.1/tmp/dfs/name dfs.datanode.data.dir file:/usr/hadoop-2.10.1/tmp/dfs/data
将NameNode格式化,执行hdfs namenode -format命令
接下来要开启NameNode进程和DataNode进程,命令为:start-dfs.sh(如果没配置ssh免密登路,需要输入三次密码)
输入jps命令,如果有jps,SecondaryNameNode,NameNode,DataNode则说明配置成功
下载解压导相关目录(同上)
执行 vi /etc/profile,然后配置Hbase_HOME 和 PATH,效果如下图:
保存后执行 source /etc/profile 来刷新配置。
修改 $Hbase_HOME/conf/ 目录下的 hbase-env.sh
添加 JAVA_HOME,文件中自带了,只需要取消注释即可:
(同hadoop配置)
修改 $Hbase_HOME/conf/ 目录下的 hbase-site.xml
注意:这里的url要和hadoop相关配置文件相同,如下图:
先将hadoop启动,再将hbase启动后,运行截图如下:
hbase可使用:
至此,hbase的伪分布式部署完成。
项目分工: 我负责hbase项目的读写流程的相关代码分析,后续的项目分工会根据进度动态调整。