我想用spark + hive开发程序并在本地进行单元测试。
有没有办法让hive在进程中运行?还是其他有助于单元测试的东西?
我在Mac上使用python 2.7
答案 0 :(得分:2)
来自spark sql programming guide:
使用Hive时,必须使用Hive实例化SparkSession 支持,包括连接到持久性Hive Metastore, 支持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-site.xml
中设置(或作为系统属性),即:"jdbc:derby:;databaseName=/path/to/test/folder/metastore_db;create=true"
这些不是强制性的(因为它们具有默认值),但有时显式设置它们很方便
您需要确保在测试之间清理测试文件夹,以便为每个套件提供干净的环境
原始答案:
我建议安装一个vagrant框,其中包含计算机虚拟机中的完整(小)hadoop群集。
你可以在这里找到一个准备好的流浪者:http://blog.cloudera.com/blog/2014/06/how-to-install-a-virtual-apache-hadoop-cluster-with-vagrant-and-cloudera-manager/
这样,您的测试可以在与生产相同的环境中运行