面试题百日百刷-HBase中HTable API有没有线程安全问题,在程序是单例还是多例?

这篇具有很好参考价值的文章主要介绍了面试题百日百刷-HBase中HTable API有没有线程安全问题,在程序是单例还是多例?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的,接下来的是今日的面试题:



 

1.HBase内部机制是什么?

Hbase是一个能适应联机业务的数据库系统

物理存储:hbase的持久化数据是将数据存储在HDFS上。

存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上Region内部还可以

划分为store,store内部有memstore和storefile。

版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并Region

的split。

集群管理:ZooKeeper + HMaster + HRegionServer。

2.HTable API有没有线程安全问题,在程序是单例还是多例?

在单线程环境下使用hbase的htable是没有问题,但是突然高并发多线程情况下就可能出现问题。

以下为Htable的API说明:

This class is not thread safe for updates; the underlying write buffer can be corrupted if multiple threads contend over a single HTable instance. 当有多个线程竞争时可能把当前正在写的线程corrupted,那么原因是什么呢?

根据Htable的源码:

public HTable(final byte [] tableName)throws IOException{  this(HBaseConfiguration.create(), tableName);}public static Configuration create() {  Configuration conf = new Configuration();  return addHbaseResources(conf);}

 

从上面我们可以看到每一个HTable的实例化过程都要创建一个新的conf,我们甚至可以认为一个conf对应的是一个HTable的connection,因此如果客户端对于同一个表,每次新new 一个configuration对象的话,那么意味着这两个HTable虽然操作的是同一个table,但是建立的是两条链接connection,它们的socket不是共用的,在多线程的情况下,经常会有new Htable的情况发生,而每一次的new都可能是一个新的connection,而我们知道zk上的链接是有限制的如果链接达到一定阈值的话,那么新建立的链接很有可能挤掉原先的connection,而导致线程不安全。

因此hbase官方文档建议我们:HTable不是线程安全的。建议使用同一个HBaseConfiguration实例来创建HTable实例,这样可以共享ZooKeeper和socket实例。例如,最好这样做:

HBaseConfiguration conf = HBaseConfiguration.create();HTable table1 = new HTable(conf, "myTable");HTable table2 = new HTable(conf, "myTable");

 

而不是这样:

HBaseConfiguration conf1 = HBaseConfiguration.create();HTable table1 = new HTable(conf1, "myTable");HBaseConfiguration conf2 = HBaseConfiguration.create();HTable table2 = new HTable(conf2, "myTable");

 

当然最方便的方法就是使用HTablepool了,维持一个线程安全的map里面存放的是tablename和其引用的映射,可以认为是一个简单的计数器,当需要new 一个HTable实例时直接从该pool中取,用完放回。

3.HBase有没有并发问题?

针对HBase在高并发情况下的性能,我们进行如下测试:

测试版本:hbase 0.94.1、 hadoop 1.0.2、 jdk-6u32-linux-x64.bin、snappy-1.0.5.tar.gz

测试hbase搭建:14台存储机器+2台master、DataNode和regionserver放在一起。

测试一:高并发读(4w+/s) + 少量写(允许分拆、负载均衡)

症状:1-2天后,hbase挂掉(系统性能极差,不到正常的10%)。其实并非全部挂掉,而是某些regionserver挂了,并在几个小时内引发其他regionserver挂掉。系统无法恢复:单独启regionserver无法恢复正常。重启后正常。

测试二:高并发读(4w+/s)

症状:1-2天后,hbase挂掉(系统性能极差,不到正常的10%)。后发现是由于zookeeper.session.timeout设置不正确导致(参见regionserver部分:http://hbase.apache.org/book.html#trouble)。重启后正常。

测试三:高并发读(4w+/s)

症状:1-2天后,hbase挂掉(系统性能极差,不到正常的10%)。从log未看出问题,但regionserver宕机,且datanode也宕机。重启后正常。

测试四:高并发读(4w+/s)+禁止分拆、禁止majorcompaction、禁止负载均衡(balance_switch命令)症状:1-2天后,hbase挂掉(系统性能极差,不到正常的10%)。从log未看出问题,但regionserver宕机,且datanode也宕机。重启后正常。

测试期间,还发现过:无法获取".MATE."表的内容(想知道regionserver的分布情况)、hbase无法正确停止、hbase无法正确启动(日志恢复失败,文件错误,最终手动删除日志重启)。

 

全部内容在[git](https://gitee.com/zjlalaforgit/interview)上,了解更多请点我头像或到我的主页去获得,谢谢文章来源地址https://www.toymoban.com/news/detail-402759.html

到了这里,关于面试题百日百刷-HBase中HTable API有没有线程安全问题,在程序是单例还是多例?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 锁屏面试题百日百刷-kafk篇(一)

    锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的,接下来的是今日的面试题: 1.请说明什么是Apache Kafka? Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务。 2.请说明什么是传统的消息传递方法?

    2023年04月11日
    浏览(34)
  • 努力有没有用?

    努力有没有用? 都说站在风口浪尖,猪都能飞起来。 但时代的红利也是给有准备的人才能抓住。凭什么人家努力了那么久,做了那么多准备,在无人问津的小黑屋熬那么久,终于出人头地后被说成是吃了时代的红利。 努力,汉语词语。拼音:nǔ lì 释义:尽力的使出自己的

    2024年02月08日
    浏览(81)
  • @Conditional+@Configuration有没有搞头?

    在了解 @Conditional 之前先花 10 秒钟复习一下 @Configuration 这个注解。 @Configuration 是干什么? 是配合 @Bean 注解来配置 Spring 容器的 bean 的。 那它为什么会出现呢? 因为配置 bean 的另一种方式是 xml ,狗都不用。 那给个示例看看呗? 简单。 下面进入主题: @Conditional 是什么东西

    2024年02月03日
    浏览(56)
  • 怎么看自己有没有安装tensorflow

    如果您想检查计算机上是否已安装 TensorFlow,您可以尝试执行以下步骤: 打开命令行终端。 在命令行中输入 \\\"python\\\",然后按回车键,打开 Python 解释器。 在 Python 解释器中,输入 \\\"import tensorflow\\\",然后按回车键。 如果 TensorFlow 已安装,您将不会看到任何错误消息。相反,您将

    2024年02月16日
    浏览(58)
  • 有没有比读写锁更快的锁

    在之前的文章中,我们介绍了读写锁,学习完之后你应该已经知道了读写锁允许多个线程同时访问共享变量,适用于读多写少的场景。那么在读多写少的场景中还有没有更快的技术方案呢?还真有,在Java1.8这个版本里提供了一种叫StampedLock的锁,它的性能就比读写锁还要好。

    2024年02月12日
    浏览(55)
  • 有没有免费版的配音软件?

    先不要着急去买付费的配音软件。 (我就被忽悠过,买了付费配音软件后,实际没用几次) 当你明确的知道,剪映配音的不足时,再考虑选付费的配音软件。 img src=\\\"https://picx.zhimg.com/50/v2-95aba0d9f80af68ad0cb25c5afbee450_720w.jpg?source=1940ef5c\\\" data-caption=\\\"\\\" data-size=\\\"small\\\" data-rawwidth=\\\"821\\\"

    2024年02月07日
    浏览(52)
  • 有没有高效便捷的视频下载工具?

    做影视剪辑或者后期工作的小伙伴们,经常需要扒一些视频作为素材,今天给大家分享四个高效便捷的视频下载工具,总有一个你满意的! 一、 Downni 一个超级视频下载工具,支持全网1000+平台视频的解析,页面清爽整洁,功能一目了然,支持不同分辨率的格式下载,还可以

    2024年02月08日
    浏览(52)
  • 使用键盘测试图解(测试键盘有没有失灵)

    键盘是很容易坏的电脑外置设备,也是必不可少的电脑用品,经常使用电脑 特别是程序猿(媛)更是每天都在使用 键盘很容易出现问题,键盘失灵后有的字或者数字打不出来特别烦人。这里给您提供一个方法,测试您键盘按键的好坏在线测试工具,每按一下键盘上按键,就

    2024年02月12日
    浏览(51)
  • 怎么知道网站服务器有没有被攻击?

    ​ 一个网站服务器遭到攻击可能会给企业带来巨大的金融损失,因此,企业需要及时发现服务器是否被攻击。但是,企业如何知道自己的服务器是否被攻击呢?下面,我们来看一些服务器被攻击的警告信号。   1.网络延迟增加 在网络攻击中,攻击者的行为会导致服务器和网络

    2024年02月02日
    浏览(191)
  • 我有一个方法判断你有没有编程天赋

    我有一个方法判断你有没有编程天赋 做一个敲击者很难。问题在于敲击者已拥有的知识(歌曲题目)让 他们想象不到缺乏这种知识会是什么情形。当他们敲击的时候,他 们不能想象听众听到的是那些独立的敲击声而不是一首曲子。这就 是“知识的诅咒”。 一旦我们知道某

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包