记一次大数据爬坑

前言

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版本的VertxJar来实现。

错误信息

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

相关推荐