apache karaf

介绍

Apache HBase是一个以Google Bigtable为蓝本的开源,分布式,版本化,面向列的商店。 如果您是普通读者,那么您可能已经知道Apache Karaf是什么,但是对于那些不是的读者:Apache Karaf是一个OSGi运行时,可以在任何OSGi框架之上运行,并为您提供一系列服务,强大的配置概念,可扩展的外壳等等。

由于Apache HBase 尚未准备好OSGi,因此开发OSGi应用程序的人通常很难理解如何在OSGi中使用HBase。

这篇文章解释了如何构建使用HBase的OSGi应用程序。 请注意,这篇文章不是关于在OSGi中运行HBase的部分,而是重点介绍如何在OSGi中使用客户端api。 与往常一样,我将重点介绍基于Karaf的容器,例如Apache ServiceMix , Fuse ESB等,但本文中的大多数内容通常适用于所有OSGi运行时。

HBase和OSGi

让我们仔细看一下HBase,并解释一下HBase与OSGi的关系。

坏消息

  • HBase不提供OSGi元数据,这意味着您需要自己包装HBase或为HBase找到第三方捆绑包。
  • HBase作为单个jar传入。
  • 使用Hadoop配置。

第一点很简单。 乍一看,第二点似乎并不是什么坏消息,但是如果您稍加思考,您就会意识到,当所有东西都放在一个罐子里时,它们并不是完全模块化的。 例如,客户端api位于同一个jar中,具有avro和thrift接口,即使您不需要它们,它们仍将在那里。 因此,该jar中包含的东西对于您的用例可能完全没有用。

请注意,单个jar语句不引用诸如Hadoop或Zookeeper之类的依赖项。

作为HBase的事实取决于Hadoop配置加载机制,这也是个坏消息,因为在OSGi中运行时,某些版本的Hadoop有点发痒。

好消息

  • HBase内没有类加载怪物,因此当您尝试在OSGi内使用客户端api时不会被咬住。

挑战

因此,存在两种类型的挑战,第一种挑战是为HBase找到或创建一个捆绑包,该捆绑包将具有对您的用例有意义的要求。 第二个是在OSGi中加载hbase客户端配置。

寻找HBase的捆绑包

据我所知, Apache ServiceMix Bundles提供了用于HBase的捆绑软件 。 但是,当前提供的捆绑软件在所需软件包方面的需求比实际需要的要多(请参阅坏消息,第二点)。 提供具有更明智要求的捆绑包目前仍在进行中,希望将很快发布。

在此端口中,我将使用Pax Url Wrap Protocol 。 包装协议将为任何jar动态创建OSGi元数据。 此外,所有包导入都将标记为可选,因此您不必处理不必要的要求。 这可以帮助您入门,但是不建议在生产环境中使用。 因此,您可以在POC中使用它,但是当它需要投入生产时,最好使用适当的捆绑包。

为HBase创建Karaf功能描述符

经过试验后,我发现可以通过安装以下功能描述符中列出的捆绑软件在Karaf中使用HBase:

<feature name="hbase" version="0.90.5" resolver="(obr)" start-level="50">
<feature>war</feature>
<bundle dependency="true">mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.2/1.9.0</bundle>
<bundle dependency="true">mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.saaj-api-1.3/1.9.0</bundle>
<bundle dependency="true">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1</bundle>
<bundle dependency="true">mvn:javax.mail/mail/1.4.5</bundle>
<bundle dependency="true">mvn:commons-codec/commons-codec/1.6</bundle>
<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-beanutils/1.8.3_1</bundle>
<bundle dependency="true">mvn:commons-collections/commons-collections/3.2.1</bundle>
<bundle dependency="true">mvn:commons-digester/commons-digester/2.1</bundle>
<bundle dependency="true">mvn:commons-jxpath/commons-jxpath/1.3</bundle>
<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jdom/1.1_4</bundle>
<bundle dependency="true">mvn:commons-lang/commons-lang/2.6</bundle>
<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant/1.7.0_6</bundle>
<bundle dependency="true">mvn:commons-configuration/commons-configuration/1.6</bundle>
<bundle dependency="true">mvn:commons-daemon/commons-daemon/1.0.5</bundle>
<bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-httpclient/3.1_7</bundle>
<bundle dependency="true">mvn:org.apache.commons/commons-math/2.2</bundle>
<bundle dependency="true">mvn:commons-net/commons-net/3.1</bundle>
<bundle dependency="true">mvn:org.codehaus.jackson/jackson-core-asl/1.9.7</bundle>
<bundle dependency="true">mvn:org.codehaus.jackson/jackson-mapper-asl/1.9.7</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jetty/6.1.26_4</bundle>
<bundle dependency="true">mvn:org.apache.zookeeper/zookeeper/3.3.5</bundle><bundle>
mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.hadoop-core/1.0.0_2</bundle>
<bundle>wrap:mvn:org.apache.hbase/hbase/0.90.5</bundle>
</feature>

实际上,此功能描述符与最新版本的Apache Camel提供的功能描述符几乎相同。 区别之一是使用的Apache Hadoop版本。 在此示例中,我倾向于使用稍低版本的Apache Hadoop,它在OSGi中的表现似乎更好。

在OSGi中创建HBase客户端配置

本节中描述的内容可能会有所不同,具体取决于您使用的Hadoop jar版本。 我将尝试提供涵盖所有情况的一般解决方案。

通常,在配置hbase客户端时,您只需要在类路径中保留一个hbase-site.xml。 在OSGi内部,这并不总是足够的。 某些版本的hadoop将设法获取该文件,而另一些则不会。 在许多情况下,hbase会抱怨当前版本与hbase-defatult.xml中的版本不匹配。

一种解决方法是将hbase.defaults.for.version设置为与您的HBase版本匹配:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>hbase.zookeeper.quorum</name><value>localhost</value></property><property><name>hbase.zookeeper.property.clientPort</name><value>2181</value></property><property><name>hbase.defaults.for.version</name><value>${hbase.version}</value></property>
</configuration>

在大多数情况下,可以节省您的一种方法是在创建配置对象之前,将hbase bundle classloader设置为线程上下文类加载器。

Thread.currentThread().setContextClassLoader(HBaseConfiguration.class.getClassLoader());

我之所以提出这个建议,是因为hbase将利用线程上下文类加载器来加载资源(hbase-default.xml和hbase-site.xml)。 设置TCCL将允许您加载默认值,并在以后覆盖它们。

下面的代码片段显示了如何设置TCCL以便直接从hbase捆绑包中加载默认值。

ClassLoader ocl = Thread.currentThread().getContextClassLoader();try {Thread.currentThread().setContextClassLoader(HBaseConfiguration.class.getClassLoader());Configuration conf = HBaseConfiguration.create();} finally {Thread.currentThread().setContextClassLoader(ocl); }

请注意,采用这种方法时,您无需在软件包中包含hbase-site.xml。 您将需要以编程方式设置配置。

另请注意,在某些情况下,如果HBase找不到正确的类加载器,则HBase内部类将重新创建配置,这可能会导致您遇到问题。

思想

HBase与几乎所有不提供对OSGi的即开即用支持的库一样。 如果您了解类加载的基础知识,则可以使其正常工作。 当然,无论您是否使用OSGi,了解类装入器都是迟早要使用的。

在接下来的几周中,我打算使用OSGi中全新的camel-hbase组件乘坐HBase骑在骆驼的背面,敬请期待 。

编辑:原始帖子已被编辑,因为其中包含一个摘要,我发现最好避免该摘要(将HBase配置共享为OSGi服务)。

参考: Apache Karaf在Ioannis Canellos博客博客上与我们的JCG合作伙伴 Ioannis Canellos 见了Apache HBase 。

翻译自: https://www.javacodegeeks.com/2013/11/apache-karaf-meets-apache-hbase.html

apache karaf

apache karaf_Apache Karaf遇到Apache HBase相关推荐

  1. Apache Karaf遇到Apache HBase

    介绍 Apache HBase是模仿Google Bigtable的开源,分布式,版本化,面向列的商店. 如果您是普通读者,那么您可能已经知道Apache Karaf是什么,但是对于那些不是的读者:A ...

  2. apache karaf_未来是Apache Karaf上的微服务架构

    apache karaf 这是Jamie Goodyear的客座博客文章( 博客 , @ icbts ). 他是Savoir Technologies的开源倡导者,Apache开发人员和计算机系统分析 ...

  3. 【Apache之 Karaf 介绍】

    一.Apache Karaf介绍 Apache Karaf is a modern and polymorphic container. Karaf是Apache旗下的一个开源项目.Karaf同时也是 ...

  4. Apache软件基金会宣布Apache Unom成为顶级项目

    导读:2019年3月21日,Apache软件基金会(ASF)宣布,Apache®Unomi™成为顶级项目(TLP).Apache Unomi是一个标准的客户数据平台(CDP),它管理在线客户.线索和访 ...

  5. Caused by: org.apache.phoenix.shaded.org.apache.zookeeper.KeeperException$NoNodeException: KeeperErr

    在集群zookeeper.hdfs.hbase都开启的情况下,无法通过sqlline.py开启 phoenix,显示报错内容为 Caused by: org.apache.phoenix.shaded ...

  6. java中间件karaf_Apache Karaf:OSGi中间件

    为什么需要"OSGi中间件" 尽管在OSGi Runtime(Felix, Equinox等)的基础上,OSGi组织又规定了Blueprint规范以实现OSGi环境下的依赖注入, ...

  7. linux apache 负载均衡,使用Apache作为前端负载均衡器

    在某些场景中,我们需要在前端放置一个Apache作为负载均衡器,后台有若干台Apusic或者其它的类似于Tomcat/WebLogic等应用服务器,客户端发送到Apache的请求,将被分配到后台的这些 ...

  8. 禁止apache显示目录索引 apache禁止列目录

    2019独角兽企业重金招聘Python工程师标准>>> 禁止apache显示目录索引 apache禁止列目录 禁止Apache显示目录索引的常见的3种方法. 要实现禁止Apache显 ...

  9. 官宣了!Apache ECharts 毕业成为 Apache 软件基金会顶级项目!

    2021 年 1 月 26 日,德克萨斯州威明顿市 Apache 软件基金会(ASF)是 350 多个开源项目和计划的全志愿开发者.管理者和孵化者,今天宣布 Apache® ECharts™成为顶级项 ...

最新文章

  1. 马莉 - 人神共愤的处女座
  2. sql server扫盲系列
  3. UA MATH523A 实分析3 积分理论例题 Fubini定理计算重积分的极限
  4. 欢迎进入 K同学啊 的博客目录(全站式导航)
  5. ifix从sqlserver里读数据_ifix连接SQL和读写EXCEL的方法
  6. mysql-学习-7-20170517-mysql分区
  7. Java File类void deleteOnExit()方法(带示例)
  8. MaxCompute full outer join改写left anti join实践
  9. Default process group has not been initialized, please make sure to call init_process_group
  10. *第十五周*数据结构实践项目一【验证哈希表及其算法】
  11. 将markdown文档转化为pdf格式
  12. Vue.js——前端模块化雏形和CommonJS——2020.12.9
  13. 如何为摇滚音乐选择吉他音箱,创作原创音乐
  14. JAVA领域10位大神
  15. 网易教育线终于『并轨』
  16. H5外部浏览器唤起微信分享
  17. 蓝桥基础练习 特殊的数字 JAVA
  18. 两用图片视频压缩软件
  19. 二叉树遍历的超简单方法(详细、简单)
  20. 【安全测试】什么是安全测试

热门文章

  1. 【并查集】团伙(luogu 1892)
  2. 5、oracle下数据完整性约束
  3. 这也许是你不曾留意过的 Mybatis 细节
  4. IntelliJ IDEA 最常用配置详细图解,新手入门必看
  5. Oracle入门(十二A)之数据类型
  6. 这是什么操作?java中的变量竟然可以先使用后声明?
  7. ssm使用全注解实现增删改查案例——EmpServiceImpl
  8. ❤️ 爆肝一个月!JAVA零基础入门总结(上)❤️
  9. SparkSQL性能优化
  10. php 接收文件 错误代码3,php上传文件错误代码3