【发布时间】:2015-07-16 16:12:50
【问题描述】:
我想用 spark + hive 开发程序并在本地进行单元测试。
有没有办法让 hive 在进程中运行?还是其他有助于单元测试的东西?
我在 Mac 上使用 python 2.7
【问题讨论】:
标签: python unit-testing testing apache-spark hive
我想用 spark + hive 开发程序并在本地进行单元测试。
有没有办法让 hive 在进程中运行?还是其他有助于单元测试的东西?
我在 Mac 上使用 python 2.7
【问题讨论】:
标签: python unit-testing testing apache-spark hive
编辑:从 spark 2 开始,可以创建一个可用于测试的本地配置单元元存储。原始答案在底部。
来自spark sql programming guide:
使用 Hive 时,必须使用 Hive 实例化 SparkSession 支持,包括与持久 Hive 元存储的连接, 支持 Hive serdes 和 Hive 用户定义的函数。 这样做的用户 没有现有的 Hive 部署仍然可以启用 Hive 支持。 当 hive-site.xml 未配置时,上下文自动 在当前目录创建 metastore_db 并创建一个目录 由 spark.sql.warehouse.dir 配置,默认为目录 Spark 应用程序所在的当前目录中的 spark-warehouse 请注意,hive.metastore.warehouse.dir 属性在 自 Spark 2.0.0 起,hive-site.xml 已被弃用。相反,使用 spark.sql.warehouse.dir 指定数据库的默认位置 仓库。您可能需要向以下用户授予写入权限 启动 Spark 应用程序。
基本上是什么意思,如果你不配置hive,spark会为你创建一个metastore,并存储在本地磁盘上。
你应该知道的2个配置:
spark.sql.warehouse.dir - spark 配置,指向表中数据在磁盘上的存储位置,即:"/path/to/test/folder/warehouse/"
javax.jdo.option.ConnectionURL - 这是一个 hive 配置,应该在 hive-site.xml 中设置(或作为系统属性),即:"jdbc:derby:;databaseName=/path/to/test/folder/metastore_db;create=true"
这些不是强制性的(因为它们有默认值),但有时明确设置它们很方便
您需要确保在测试之间清理测试文件夹,以便为每个套件提供一个干净的环境
原答案:
我建议在您机器上的虚拟机中安装一个包含完整(小型)hadoop 集群的 vagrant 框。
你可以在这里找到一个现成的流浪者:http://blog.cloudera.com/blog/2014/06/how-to-install-a-virtual-apache-hadoop-cluster-with-vagrant-and-cloudera-manager/
这样您的测试可以在与生产环境相同的环境中运行
【讨论】: