记一次大数据爬坑

发表于:2018-4-20 09:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:AppZone    来源:51testing软件测试网采编

  前言
  Vertx
  Vertx是一个高效的异步框架,支持Java、Scala、JavaScript、Kotlin等多种语言。在非性能调优的场景下,TPS可以高达2-3万,同时,支持多种数据源也提供了异步支持。
  Phoenix
  大数据的同学肯定对其很了解,是Apache基金会下的顶级工程,Phoenix帮助Hbase提供了SQL语法的支持,使难用的Hbase变得简单易用。
  Hbase
  用于存储上百万的场景数据,
  Mysql
  用于存储Streaming处理和Batch之后数据量比较少,对SQL查询要求比较高的场景数据。
  Redis
  用于存储统计数据,比如:PV、UV等类型数据。
  爬坑日记
  Scala版本导致的冲突问题
  由于Vertx提供的Jar只支持Scala:2.12版本,而本地环境使用的是Scala:2.11,出现下方错误信息之后,猜想是由于Scala版本问题导致,摆在我们面前的有两条路,一条是换Scala版本号,由于种种原因无法更换版本;另一个方案是选用Vertx提供的Java Jar,选择放弃使用Scala版本,使用Java版本的Vertx的Jar来实现。
  错误信息
  com.github.mauricio.async.db.SSLConfiguration.<init>  scala.Product.$init$(Lscala/Product;)V
  Vertx包中Scala版本冲突
  在尝试完成Scala包换为Java之后,问题依旧,分析错误信息,猜想可能是com.github.mauricio相关的包导致的问题,在通过GitHub和官网文档中找到了蛛丝马迹,该包是由Scala编写的,就迅速想到了版本号的问题,果不其然,选用的是2.12,马上将Maven文件进行修改,解决了这个问题。
  <dependency>
              <groupId>io.vertx</groupId>
              <artifactId>vertx-redis-client</artifactId>
          </dependency>
          <dependency>
              <groupId>io.vertx</groupId>
              <artifactId>vertx-mysql-postgresql-client</artifactId>
              <exclusions>
                  <exclusion>
                      <artifactId>mysql-async_2.12</artifactId>
                      <groupId>com.github.mauricio</groupId>
                  </exclusion>
                  <exclusion>
                      <artifactId>db-async-common_2.12</artifactId>
                      <groupId>com.github.mauricio</groupId>
                  </exclusion>
              </exclusions>
          </dependency>
          <dependency>
              <artifactId>db-async-common_2.11</artifactId>
              <groupId>com.github.mauricio</groupId>
              <version>0.2.21</version>
          </dependency>
          <dependency>
              <artifactId>mysql-async_2.11</artifactId>
              <groupId>com.github.mauricio</groupId>
              <version>0.2.21</version>
          </dependency>
  Phoenix包问题
  项目中需要通过使用JDBC的方式连接Phoenix,在Spark项目中使用了如下的依赖实现
  <dependency>
      <groupId>org.apache.phoenix</groupId>
      <artifactId>phoenix-client</artifactId>
      <version>${phoenix.version}</version>
      <classifier>client</classifier>
  </dependency>
  但是出现了如下错误
  Caused by: java.lang.NoSuchMethodError: com.jayway.jsonpath.spi.mapper.JacksonMappingProvider.<init>(jackson-databind)
  猜测可能原因是包冲突,但发现Maven中不存在jsonpath该相应的依赖,故猜想可能是jackson包版本导致的冲突,故将parent中的依赖配置移到当前pom文件中,因为Maven是就近查找依赖的,但发现还是没有效果。由于phoenix-client是一个独立的包,无法对其exclusion操作,在同事的提示下,采用的解压该Jar包,找到了jayway相关目录,将该目录删除后进行重新打包,神奇的事发生了,启动成功了。
  Phoenix Driver问题
  程序启动成功,但在测试Vertx-JDBC连接Phoenix时,出现找不到Driver问题,原来phoenix-client中无法引用到org.apache.phoenix.jdbc.PhoenixDriver,在Google之后,使用了如下的Jar方案
  <dependency>
  <groupId>org.apache.phoenix</groupId>
  <artifactId>phoenix-core</artifactId>
  <version>${phoenix.version}</version>
  </dependency>
  问题就解决了。
  jdbc:phoenix:host1,host2:2181:/hbase


上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号