我正在尝试使用 Hive Thrift 和 JDBC 接口编写一个重要的 Hive 作业,但在设置一个像样的 JUnit 测试时遇到了麻烦。重要的是,我的意思是这项工作至少会导致一个 MapReduce 阶段,而不是只处理元存储。
测试应该启动 Hive 服务器,将一些数据加载到表中,在该表上运行一些重要的查询,然后检查结果。
我已经根据Spring 参考连接了一个 Spring 上下文。但是,该作业在 MapReduce 阶段失败,抱怨不存在 Hadoop 二进制文件:
java.io.IOException:无法运行程序“/usr/bin/hadoop”(在目录“/Users/yoni/opower/workspace/intellij_project_root”中):错误=2,没有这样的文件或目录
问题是 Hive 服务器在内存中运行,但依赖于 Hive 的本地安装才能运行。为了使我的项目自包含,我需要嵌入 Hive 服务,包括 HDFS 和 MapReduce 集群。我尝试使用相同的 Spring 方法启动 Hive 服务器并将其指向MiniDFSCluster和MiniMRCluster,类似于 Hive QTestUtil源和HBaseTestUtility中使用的模式。但是,我无法让它发挥作用。
在尝试了三天的 Hive 集成测试之后,我想我会问社区:
- 你如何推荐我集成测试 Hive 工作?
- 您是否有一个有效的 JUnit 示例,用于使用内存中的 HDFS、MR 和 Hive 实例集成测试 Hive 作业?
我看过的其他资源:
编辑:我完全意识到,针对 Hadoop 集群工作——无论是本地还是远程——都可以针对全栈 Hive 实例运行集成测试。如前所述,问题在于这不是有效测试 Hive 工作流的可行解决方案。