课外作业四:HBase
- 作业详情
内容
一、安装配置伪分布式HBase,前提是参考实验《搭建Hadoop环境》已经安装启动伪分布式Hadoop。关闭顺序与启动顺序相反:先关闭HBase,之后再关闭Hadoop。 • hbase官网下载地址(官网下载太慢): Index of /hbase • 国内镜像hbase-2.4.16: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.16/hbase-2.4.16-bin.tar.gz • 下载命令: wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.16/hbase-2.4.16-bin.tar.gz • 解压缩: tar -zxvf hbase-2.4.16-bin.tar.gz -C /opt/ • 改名: mv /opt/hbase-2.4.16 /opt/hbase • 配置环境变量: echo 'export HBASE_HOME=/opt/hbase/' >> /etc/profile echo 'export PATH=$PATH:$HBASE_HOME/bin' >> /etc/profile source /etc/profile • 配置文件
- 配置 /opt/hbase/conf/hbase-env.sh,Linux命令行输入 echo "export JAVA_HOME=/usr/java8" >> /opt/hbase/conf/hbase-env.sh echo " HBASE_CLASSPATH=/opt/hbase/conf " >> /opt/hbase/conf/hbase-env.sh echo " HBASE_MANAGES_ZK=true " >> /opt/hbase/conf/hbase-env.sh
- vim /opt/hbase/conf/hbase-site.xml
-
- <name>hbase.rootdir</name>
-
- <value>hdfs://localhost:9000/hbase</value>
-
- <name>hbase.cluster.distributed</name>
-
- <value>true</value>
- • 启动HBase(先启动Hadoop): start-hbase.sh • jps包含(之外还有Hadoop的进程): HMaster、HRegionServer、HQuorumPeer 访问Web页面: http://EIP:16010
• 操作HBase: Linux客户端输入hbase shell,进入HBase操作数据表。 exit退出hbase shell • 停止HBase(后停止Hadoop) stop-hbase.sh 实验要求:
- 操作HBase常用Shell命令(参考教材4.6.1或后面的华为云实验)创建学生信息表并添加数据(列数不少于5个,数据记录不少于10条),数据表名字是自己姓名全拼接学号后四位,表数据有自己的姓名。
- 命令行显示表的所有数据,截图。
- HDFS的Web页面显示数据表,截图。
• Hadoop与HBase的兼容版本:
二、华为云KooLabs实验 - 《HBase数据表基本操作》KooLabs云实验_在线实验_上云实践_云计算实验_AI实验_华为云官方实验平台-华为云
- 《HBase数据仓库加载》KooLabs云实验_在线实验_上云实践_云计算实验_AI实验_华为云官方实验平台-华为云
三、简要回答“课堂考核”内容
- 你从哪里下载的HBase? https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.16/hbase-2.4.16-bin.tar.gz
- HBase伪分布式配置文件hbase-site.xml,配置的是什么? HBase伪分布式配置文件hbase-site.xml配置的是HBase和zookeeper写入数据的路径
- 启动HBase之前要不要启动Hadoop?为什么? 启动HBase之前需要启动Hadoop,因为hbase底层是hdfs,依赖Hadoop
- HBase启动之后看到哪些进程节点,分别是干什么的? HMaster进程:HMaster进程是HBase集群的管理节点,负责协调和管理RegionServer进程。它负责处理客户端请求、负载均衡、Region的分配、合并和删除等一系列管理工作 RegionServer进程:RegionServer进程是数据存储节点,负责存储和处理数据。每个Region所对应的数据都被存储在一个RegionServer上,多个Region可以共用同一个RegionServer。RegionServer还负责处理读写请求、维护WAL(Write-Ahead-Log)、切分和合并region等操作 ZooKeeper进程:ZooKeeper是HBase集群的协调服务,主要用于管理HBase集群中各种元数据信息,如正在使用的region信息、是否有新的region需要分裂等。ZooKeeper还可以帮助协调多个HMaster之间的选举过程以及监控和管理整个集群 HQuorumPeer进程:该进程是ZooKeeper服务启动时创建的内部组件,主要用于处理各种会话请求,并维护集群机器与其他机器之间的连接状态。
- HBase创建的表放在HDFS的哪个路径下? 每个Region都有一个单独的目录,该目录包含对应Region的数据文件和元数据文件。这些目录默认位于/hbase/data/<table-name>/<region-name>路径下,其中<table-name>为表名,<region-name>为Region名称。例如,如果创建了名为"employee"的表,则其数据目录将位于/hbase/data/employee路径下。
- 说说HBase是如何读数据的?如何写数据的? 读数据:客户端向HBase Master节点请求查询某张表的行键,得到这张表在HDFS上的存储路径。客户端根据行键Hash算法找到对应的RegionServer节点,向其发送读取请求。RegionServer查找客户端请求指定的行数据所在的HFile文件,并用内存中的Block Cache缓存数据(如果存在)。如果数据不在内存缓存中,则会从磁盘中读取,并将其加载到Block Cache中供下次查询使用。RegionServer将查询结果返回给客户端。 写数据:客户端向HBase Master节点请求写入某张表,得到表的合适RegionServer节点。客户端将新插入(或修改)的行键和列值信息打包成Request,发送给RegionServer。RegionServer创建一个Memstore并缓存修改前的原始数据。如果该Memstore已满,则会将其中所有数据保存为新生成的HFile文件,并清空该Memstore,然后再开始写入新数据。如果完成了所有修改操作,则客户端收到确认消息,结束本次写操作。 四、习题 • 4.8 习题
- 试述在Hadoop体系架构中HBase与其他组成部分的相互关系。 HBase利用Hadoop MapReduce来处理HBase中的海量数据,实现高性能计算;利用Zookeeper作为协同服务,实现稳定服务和失败恢复;使用HDFS作为高可靠的底层存储,利用廉价集群提供海量数据存储能力; Sqoop为HBase的底层数据导入功能,Pig和Hive为HBase提供了高层语言支持,HBase是BigTable的开源实现。
- 请阐述 HBase和BigTable的底层技术的对应关系。 项目 BigTable HBase 文件存储系统 GFS HDFS 海量数据处理 MapReduce Hadoop MapReduce 协同服务管理 Chubby Zookeeper
- 请阐述HBase和传统关系数据库的区别。 区别 传统关系数据库 HBase 数据类型 关系模型 数据模型 数据操作 插入、删除、更新、查询、多表连接 插入、查询、删除、清空,无法实现表与表之间关联 存储模式 基于行模式存储,元组或行会被连续地存储在磁盘也中 基于列存储,每个列族都由几个文件保存,不同列族的文件是分离的 数据索引 针对不同列构建复杂的多个索引 只有一个行键索引 数据维护 用最新的当前值去替换记录中原来的旧值 更新操作不会删除数据旧的版本,而是生成一个新的版本 可伸缩性 很难实现横向扩展,纵向扩展的空间也比较有限 轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩
- HBase支持哪些类型的访问接口? HBase提供了Native Java API , HBase Shell , Thrift Gateway , REST GateWay , Pig , Hive 等访问接口
- 请以实例说明HBase数据模型。 Info Name Age Sex 2022611771 zhangqiuling 20 02 2022611770 zhoushuangfeng 18 02
- 分别解释HBase中行键、列键和时间戳的概念。 行键是唯一的,在一个表里只出现一次,否则就是在更新同一行,行键可以是任意的字节数组。 列族需要在创建表的时候就定义好,数量也不宜过多。列族名必须由可打印字符组成,创建表的时候不需要定义好列。 时间戳,默认由系统指定,用户也可以显示设置。使用不同的时间戳来区分不同的版本。
- 请列举实例来阐述HBase的概念视图和物理视图的区别。 HBase数据概念视图: 行键 时间戳 列族contents 列族anchor “com.cnn.www” T5 Anchor:cnnsi.com=”CNN” T3 Anchor:my.look.ca=”CNN” “com.cnn.www” T3 Content:html=”...”
T2 Content:html=”...”
T1 Content:html=”...”
HBase数据物理视图: 行键 时间戳 列族anchor “com.cnn.www” T5 Anchor:cnnsi.com=”CNN” T4 Anchor:my.look.ca=”CNN” 行键 时间戳 列族contents “com.cnn.www” T3 Content:html=”...” T2 Content:html=”...” T1 Content:html=”...” - 试述HBase各功能组件及其作用。 库函数:链接到每个客户端 一个Master主服务器:主服务器Master主要负责表和Region的管理工作 许多个Region服务器:Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求
- 请阐述HBase的数据分区机制。 HBase采用分区存储,一个大的表会被分拆许多个Region,这些Region会被分发到不同的服务器上实现分布式存储。
- HBase中的分区是如何定位的? 通过构建的映射表的每个条目包含两项内容,一个是Regionde 标识符,另一个是Region服务器标识,这个条目就标识Region和Region服务器之间的对应关系,从而就可以知道某个Region被保存在哪个Region服务器中。
- 试述HBase的三层结构中各层次的名称和作用。 层次 名称 作用 第一层 Zookeeper文件 记录了-ROOT-表的位置信息 第二层 -ROOT-表 记录了.META.表的Region位置信息
-ROOT-表只能有一个Region。通过-ROOT-表,就可以访问.META.表中的数据 第三层 .META.表 记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息
- 请阐述在HBase三层结构下,客户端是如何访问到数据的。 首先访问Zookeeper,获取-ROOT表的位置信息,然后访问-Root-表,获得.MATA.表的信息,接着访问.MATA.表,找到所需的Region具体位于哪个Region服务器,最后才会到该Region服务器读取数据。
- 试述HBase系统基本架构及其每个组成部分的作用。 客户端:客户端包含访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续数据访问过程 Zookeeper服务器:Zookeeper可以帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避免了Master的“单点失效”问题 Master:主服务器Master主要负责表和Region的管理工作:管理用户对表的增加、删除、修改、查询等操作;实现不同Region服务器之间的负载均衡;在Region分裂或合并后,负责重新调整Region的分布;对发生故障失效的Region服务器上的Region进行迁移 Region服务器:Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求
- 请阐述Region服务器向HDFS中读写数据的基本原理 Region服务器内部管理一系列Region对象和一个HLog文件,其中,HLog是磁盘上面的记录文件,它记录着所有的更新操作。每个Region对象又是由多个Store组成的,每个Store对象了表中的一个列族的存储。每个Store又包含了MemStore和若干个StoreFile,其中,MemStore是在内存中的缓存。
- 试述HStore的工作原理。 每个Store对应了表中的一个列族的存储。每个Store包括一个MenStore缓存和若干个StoreFile文件。MenStore是排序的内存缓冲区,当用户写入数据时,系统首先把数据放入MenStore缓存,当MemStore缓存满时,就会刷新到磁盘中的一个StoreFile文件中,当单个StoreFile文件大小超过一定阈值时,就会触发文件分裂操作。
- 试述HLog的工作原理。 HBase系统为每个Region服务器配置了一个HLog文件,它是一种预写式日志(Write Ahead Log),用户更新数据必须首先写入日志后,才能写入MemStore缓存,并且,直到MemStore缓存内容对应的日志已经写入磁盘,该缓存内容才能被刷写到磁盘。
- 在HBase中,每个Region服务器维护一个HLog,而不是每个Region都单独维护一个 HLog。请说明这种做法的优点和缺点。 优点: 多个Region对象的更新操作所发生的日志修改,只需要不断把日志记录追加到单个日志文件中,不需要同时打开、写入到多个日志文件中 缺点:如果一个Region服务器发生故障,为了恢复其上次的Region对象,需要将Region服务器上的对象,需要将Region服务器上的HLog按照其所属的Region对象进行拆分,然后分发到其他Region服务器上执行恢复操作。
- 当一台Region服务器意外终止时,Master如何发现这种意外终止情况?为了恢复这台发生意外的Region服务器上的Region,Master会做出哪些处理(包括如何使用HLog进行恢复)? Zookeeper会实时监测每个Region服务器的状态,当某个Region服务器发生故障时,Zookeeper会通知Master。Master首先会处理该故障Region服务器上面遗留的HLog文件,这个遗留的HLog文件中包含了来自多个Region对象的日志记录。系统会根据每条日志记录所属的Region对象对HLog数据进行拆分,分别放到相应Region对象的目录下,然后,再将失效的Region重新分配到可用的Region服务器中,并把与该Region对象相关的HLog日志记录也发送给相应的Region服务器。Region服务器领取到分配给自己的Region对象以及与之相关的HLog日志记录以后,会重新做一遍日志记录中的各种操作,把日志记录中的数据写入到MemStore缓存中,然后,刷新到磁盘的StoreFile文件中,完成数据恢复。
- 请列举几个HBase常用的命令,并说明其使用方法。 create:创建表 list:列出HBase中所有的表信息 put:向表、行、列指定的单元格添加数据 get:通过指定名、行、列、时间戳、时间范围和版本号来获得相应单元格的值 scan:浏览表的相关信息 alter:修改列族模式 count:统计表中行数 describe:显示表的相关信息 enable/disable:使表有效或无效 delete:删除指定单元格的数据 drop:删除表 exists:判断表是否存在 truncate:使表无效,删除该表,然后重新建立表 exit:退出HBase Shell shutdown:关闭HBase集群 version:输出HBase版本信息 status:输出HBase集群状态信息