我编写了一个在 Hive 上运行 SparkSQL 的 java 代码。我试图将我的配置单元元存储的路径提供给程序,但它根本不起作用。
参见程序:
String warehouseLocation = "file:${system:user.dir}/spark-warehouse";
SparkSession spark = SparkSession
.builder()
.appName("Java Spark Hive Example")
.master("local[*]")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate();
try
{
spark.sql("select count(*) from health1 ").show();
}
catch (Exception AnalysisException)
{
System.out.print("\nTable is not found\n");
}
我的metastore_db位于以下位置:/home/aims/hadoop/hadoop/hive/var/lib/metastore_db
我希望我尝试使用 SparkSQL 执行的任何操作都应该通过 HIVE 反射(reflect)在 Hadoop 上。为此,我需要将 Metastore_db 连接到我的 Maven 程序。
我怎样才能做到这一点?有没有办法可以使用配置在程序中给出我的 hive-site.xml
路径?
最佳答案
您可以像下面一样运行 Hive Metastore 服务器。
hive --service metastore &
现在您可以通过设置配置hive.metastore.uris
来使用Spark连接到hive
SparkSession spark = SparkSession
.builder()
.appName("Java Spark Hive Example")
.master("local[*]")
.config("hive.metastore.uris", "thrift://localhost:9083")
.enableHiveSupport()
.getOrCreate();
spark.sql("select count(*) from health1").show();
关于java - 如何使用java在Apache Spark程序中指定Hive的元存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42312711/