乐趣区

关于后端:每天百亿数据存入HBase如何保证数据的存储正确和在规定时间里全部录入完毕不残留数据

锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步! 接下来的是今日的面试题:

1.请详细描述 HBase 中一个 cell 的构造?**

HBase 中通过 row 和 columns 确定的为一个存贮单元称为 cell。

Cell:由 {row key, column(=<family> + <label>), version} 惟一确定的单元。cell 中的数据是没有类型的,全副是字节码模式存贮。

2.以 start-hbase.sh 为终点,HBase 启动的流程是什么?**

start-hbase.sh 的流程如下:

1. 运行 hbase-config.sh

hbase-config.sh 的作用:

① 装载相干配置,如 HBASE_HOME 目录,conf 目录,regionserver 机器列表,JAVA_HOME 目录等,它会调用 $HBASE_HOME/conf/hbase-env.sh;

② 解析参数(0.96 版本及当前才能够带惟一参数 autorestart,作用就是重启);

③ 调用 hbase-daemon.sh 来启动 master;

④ 调用 hbase-daemons.sh 来启动 regionserver zookeeper master-backup。

  1. hbase-env.sh 的作用:

次要是配置 JVM 及其 GC 参数,还能够配置 log 目录及参数,配置是否须要 hbase 治理 ZK,配置过程 id 目录等。

  1. hbase-daemons.sh 的作用:

依据须要启动的过程,如 zookeeper,则调用 zookeepers.sh 如 regionserver,则调用 regionservers.sh,如 master-backup,则调用 master-backup.sh。

  1. zookeepers.sh 的作用:

如果 hbase-env.sh 中的 HBASE_MANAGES_ZK”=”true”,那么通过 ZKServerTool 这个类解析 xml 配置文件,获取 ZK 节点列表,而后通过 SSH 向这些节点发送近程命令执行。

  1. regionservers.sh 的作用:

与 zookeepers.sh 相似,通过配置文件,获取 regionserver 机器列表,而后 SSH 向这些机器发送近程命令。

6.master-backup.sh 的作用:

通过 backup-masters 这个配置文件,获取 backup-masters 机器列表,而后 SSH 向这些机器发送近程命令。

3.简述 HBase 中 compact 用处是什么,什么时候触发,分为哪两种,有什么区别,有哪些相干配置参数?**

在 hbase 中每当有 memstore 数据 flush 到磁盘之后,就造成一个 storefile,当 storeFile 的数量达到肯定水平后,就须要将 storefile 文件来进行 compaction 操作。

Compact 的作用:

① 合并文件

② 革除过期,多余版本的数据

③ 进步读写数据的效率

HBase 中实现了两种 compaction 的形式:minor and major. 这两种 compaction 形式的区别是:

1、Minor 操作只用来做局部文件的合并操作以及包含 minVersion=0 并且设置 ttl 的过期版本清理,不做任何删除数据、多版本数据的清理工作。

2、Major 操作是对 Region 下的 HStore 下的所有 StoreFile 执行合并操作,最终的后果是整顿合并出一个文件。

4.每天百亿数据存入 HBase,如何保证数据的存储正确和在规定工夫里全副录入结束,不残留数据?**

需要剖析:

1)百亿数据:证实数据量十分大;

2)存入 HBase:证实是跟 HBase 的写入数据无关;

3)保证数据的正确:要设计正确的数据结构保障正确性;

4)在规定工夫内实现:对存入速度是有要求的。

解决思路:

1)数据量百亿条,什么概念呢?假如一整天 60x60x24 = 86400 秒都在写入数据,那么每秒的写入条数高达 100 万条,HBase 当然是反对不了每秒百万条数据的,所以这百亿条数据可能不是通过实时地写入,而是批量地导入。批量导入举荐应用 BulkLoad 形式(举荐浏览:Spark 之读写 HBase),性能是一般写入形式几倍以上;

2)存入 HBase:一般写入是用 JavaAPI put 来实现,批量导入举荐应用 BulkLoad;

3)保证数据的正确:这里须要思考 RowKey 的设计、预建分区和列族设计等问题;

4)在规定工夫内实现也就是存入速度不能过慢,并且当然是越快越好,应用 BulkLoad。

退出移动版