共计 1717 个字符,预计需要花费 5 分钟才能阅读完成。
锁屏面试题百日百刷,每个工作日保持更新面试题。 请看到最初就能获取你想要的, 接下来的是今日的面试题:
1.Hbase 中的 memstore 是用来做什么的?**
hbase 为了保障随机读取的性能,所以 hfile 外面的 rowkey 是有序的。当客户端的申请在达到 regionserver 之后,为了保障写入 rowkey 的有序性,所以不能将数据立即写入到 hfile 中,而是将每个变更操作保留在内存中,也就是 memstore 中。memstore 可能很不便的反对操作的随机插入,并保障所有的操作在内存中是有序的。当 memstore 达到肯定的量之后,会将 memstore 外面的数据 flush 到 hfile 中,这样能充分利用 hadoop 写入大文件的性能劣势,进步写入性能。
因为 memstore 是寄存在内存中,如果 regionserver 因为某种原因死了,会导致内存中数据失落。所有为了保证数据不失落,hbase 将更新操作在写入 memstore 之前会写入到一个 write ahead log(WAL) 中。WAL 文件是追加、程序写入的,WAL 每个 regionserver 只有一个,同一个 regionserver 上所有 region 写入同一个的 WAL 文件。这样当某个 regionserver 失败时,能够通过 WAL 文件,将所有的操作程序从新加载到 memstore 中。
2.HBase 在进行模型设计时重点在什么中央?一张表中定义多少个 Column Family 最合适?为什么?**
Column Family 的个数具体看表的数据,一般来说划分规范是依据数据拜访频度,如一张表里有些列拜访绝对频繁,而另一些列拜访很少,这时能够把这张表划分成两个列族,离开存储,进步拜访效率。
整体来说, 通常倡议越少越好, 太多的列族会影响咱们整个 hbase 的读写效率, 导致读取一行数据须要逾越更多的列族 (底层逾越更多的内存页和文件)
3. 如何进步 HBase 客户端的读写性能?请举例说明 **
1 开启 bloomfilter 过滤器,开启 bloomfilter 比没开启要快 3、4 倍
2 Hbase 对于内存有特地的需要,在硬件容许的状况下配足够多的内存给它
3 通过批改 hbase-env.sh 中的 export HBASE_HEAPSIZE=3000 #这里默认为 1000m
4 增大 RPC 数量通过批改 hbase-site.xml 中的 hbase.regionserver.handler.count 属性,能够适当的放大 RPC 数量,默认值为 10 有点小。
4.HBase 集群装置注意事项?**
① HBase 须要 HDFS 的反对,因而装置 HBase 前确保 Hadoop 集群装置实现;
② HBase 须要 ZooKeeper 集群的反对,因而装置 HBase 前确保 ZooKeeper 集群装置实现;
③ 留神 HBase 与 Hadoop 的版本兼容性;
④ 留神 hbase-env.sh 配置文件和 hbase-site.xml 配置文件的正确配置;
⑤ 留神 regionservers 配置文件的批改;
5 留神集群中的各个节点的工夫必须同步,否则启动 HBase 集群将会报错;
5. 请形容如何解决 HBase 中 region 太小和 region 太大带来的抵触?**
Region 过大会产生屡次 compaction,将数据读一遍并重写一遍到 hdfs 上,占用 io,region 过小会造成屡次 split,region 会下线,影响拜访服务,最佳的解决办法是调整 hbase.hregion. max.filesize 为 256m。
6.Hbase 是怎么进行预分区操作?**
解: 在 Hbase 中次要有二种预分区计划, 一种为手动预分区, 一种为主动预分区, 手动预分区指的是咱们在建表的时候, 通过命令或者的 API 进行预分区操作, 在手动分区下, 咱们能够自定义分区, 也能够基于 hbase 提供的分区算法来实现, 分区后, 多个 region 会被 master 调配到不同的 regionServer 上进行治理, 从而保障负载平衡. 而主动预分区则指的是, 随着咱们表中数据越来越多 当表中数据, 也就是 region 中数据达到肯定的阈值后, 会主动进行分区, 阈值的多少取决于上面的这个公式来计算:
全部内容在 git 上, 理解更多请点我头像或到我的主页去取得,谢谢 **