HBaseTestingUtility 是否适用于 MiniCluster?

Dea*_*lze 0 hbase hbasetestingutility

我有一个简单的单元测试,我想针对HBaseTestingUtilityMiniCluster运行。HBaseTestingUtility缺少运行测试所需的传递依赖项。我一直在跟踪NoClassDefFoundErrors并遇到了一些可能是其中一个 jar 文件的打包错误的问题。这是错误:

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/test/MetricsAssertHelper at org.apache.hadoop.hbase.MiniHBaseCluster.<init>(MiniHBaseCluster.java:91)

当我在项目的 .jar 文件中搜索 MetricsAssertHelper 时,我在 META-INF/services 目录下找到了该文件:

jar tvf org/apache/hbase/hbase-hadoop2-compat/1.0.0/hbase-hadoop2-compat-1.0.0-tests.jar | grep MetricsAssertHelper 53 Sat Feb 14 19:43:40 MST 2015 META-INF/services/org.apache.hadoop.hbase.test.MetricsAssertHelper 1337 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl$MockMetricsBuilder.class 3743 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl$MockRecordBuilder.class 6689 Sat Feb 14 19:43:40 MST 2015 org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.class

然而,这不是 .class 文件。我想知道MetricsAssertHelper.class.jar 文件中是否缺少该文件,因为那里有一个“MetricsAssertHelperImpl.class 文件”。

这是我的代码和 mvn 依赖项。错误发生在HBaseTestingUtility.startMiniCluster()通话中。

    private static HBaseTestingUtility utility; 

@Before
public void setUp() throws Exception {
    utility = new HBaseTestingUtility();
    utility.startMiniCluster();
}


    <dependencies>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-minicluster</artifactId>
        <version>2.5.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>1.0.0</version>
        <type>test-jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-hadoop2-compat</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
        <type>test-jar</type>
    </dependency>

</dependencies>
Run Code Online (Sandbox Code Playgroud)

Dea*_*lze 5

问题是,hbase-hadoop-compat除了hbase-hadoop2-compat. 这是使用 HBaseTestingUtility MiniCluster 运行 JUnit 测试所需的完整依赖项列表。

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-minicluster</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>1.0.0</version>
        <type>test-jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-hadoop-compat</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
        <type>test-jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-hadoop2-compat</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
        <type>test-jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

  • 为什么不添加以下内容: org.apache.hbase:hbase-testing-util:1.1.1 ? (4认同)