侧边栏壁纸
博主头像
故黎

tt--

  • 累计撰写 29 篇文章
  • 累计创建 5 个标签
  • 累计收到 7 条评论
标签搜索

使用commons-pool2实现Hdfs连接池

故黎
2020-04-26 / 0 评论 / 0 点赞 / 2,300 阅读 / 807 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-12-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前面写过一篇java上传文件至hdfs的文章,实现方式上每次操作hdfs都会创建一个新的hdfs连接,这种方式极易产生奇奇怪怪的问题(内存泄漏等等),所以简单研究了一下commons-pool2实现了一个Hdfs连接池,记录一下。

先上github地址:https://github.com/AF-lmf/hdfs-pool 代码就不贴出来了,下面大致说一下整体的逻辑

image.png

  • properties目录下提供了一些外部配置,包括krb5认证和连接池参数的相关配置

  • @Configuration注解加到Hdfsconfig类上,作为一个配置类,springboot会扫描并注入它名下管理的类,其中@Bean(initMethod = "init", destroyMethod = "stop") 标签表示spring在初始化这个类时调用他的init方法,销毁时调用他的stop方法。

  • HdfsClient 是业务方法调用的类,spring在初始化这个类时,调用它的init方法,这个方法会创建HdfsPool(即Hdfs的连接池)。其他方法是对Hdfs中方法的二次封装,即先使用连接池获取实例,再调用实例方法。

  • HdfsPoolConfig继承commons-pool2包中的GenericObjectConfig,受spring管理,作为线程池的配置类,创建HdfsPool时作为参数传入。

  • HdfsFactory继承commons-pool2包中的GenericObjectFactory,受spring管理,作为创建连接实例的工厂类,创建HdfsPool时作为参数传入。实际上连接池就是通过它获取的连接实例。

  • HdfsPool继承commons-pool2包中的GenericObjectPool,是连接池实例。

  • Hdfs,是底层的连接实例,所有增删改查的方法都要在这里实现,只不过获取/销毁连接交给池管理。

0

评论区