使用Hive Metastore的Spark和使用hive执行引擎的Spark有什么区别? 我已经按照THIS TUTORIAL配置了spark和hive,并且我已成功创建,填充和分析来自hive表的数据。现在令我困惑的是我做了什么?
a)我是否将Spark配置为使用Hive Metastore并使用SparkSQL分析hive表中的数据? b)我是否真的使用Spark作为Hive执行引擎并分析了数据 使用HiveQL的hive表,这就是我想要做的。
我将尝试总结我为配置spark和hive所做的工作
a)我按照上面的教程配置了spark和hive
b)写了我的/conf/hive-site.xml Like this和
c)之后我写了一些代码,这些代码将连接到hive Metastore并进行分析。我正在使用java,这段代码启动了spark session
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.enableHiveSupport()
.config("spark.sql.warehouse.dir", "hdfs://saurab:9000/user/hive/warehouse")
.config("mapred.input.dir.recursive", true)
.config("hive.mapred.supports.subdirectories", true)
.config("spark.sql.hive.thriftServer.singleSession", true)
.master("local")
.getOrCreate();
这段代码将创建数据库和表。这里db=mydb and table1=mytbl
String query = "CREATE DATABASE IF NOT EXISTS " + db;
spark.sql(query);
String query = "CREATE EXTERNAL TABLE IF NOT EXISTS " + db + "." + table1
+ " (icode String, " +
"bill_date String, " +
"total_amount float, " +
"bill_no String, " +
"customer_code String) " +
"COMMENT \" Sales details \" " +
"ROW FORMAT DELIMITED FIELDS TERMINATED BY \",\" " +
"LINES TERMINATED BY \"\n\" " +
"STORED AS TEXTFILE " +
"LOCATION 'hdfs://saurab:9000/ekbana2/' " +
"tblproperties(\"skip.header.line.count\"=\"1\")";
spark.sql(query);
然后我创建jar并使用spark-submit
./bin/spark-submit --master yarn --jars jars/datanucleus-api-jdo-3.2.6.jar,jars/datanucleus-core-3.2.10.jar,jars/datanucleus-rdbms-3.2.9.jar,/home/saurab/hadoopec/hive/lib/mysql-connector-java-5.1.38.jar --verbose --properties-file /home/saurab/hadoopec/spark/conf/spark-env.sh --files /home/saurab/hadoopec/spark/conf/hive-site.xml --class HiveRead /home/saurab/sparkProjects/spark_hive/target/myJar-jar-with-dependencies.jar
这样做我得到了我想要的但我不确定我正在做我真正想做的事情。我的问题似乎有点难以理解,因为我不知道如何解释它。如果是这样请评论,我会尝试扩展我的问题
此外,如果有任何专注于spark + hive工作的教程,请提供链接,我也想知道spark是否显示spark/conf/hive-site.xml
或hive/conf/hive-site.xml
,因为我很困惑在哪里设置{{ 1}}。
感谢
答案 0 :(得分:0)
好像你正在做两件相反的事情。您链接的教程是使用Spark作为Hive执行引擎的说明(您将其描述为选项b)。这意味着您将几乎完全在之前运行您的配置单元查询,但在幕后Hive将使用Spark而不是经典的MapReduce。在这种情况下,您不需要编写任何使用SparkSession等的Java代码。您编写的代码正在执行您在选项a中描述的内容 - 使用Spark运行Hive查询并使用Hive Metastore。
总而言之,您不需要同时执行这两项操作 - 使用第一个教程配置Spark作为Hive执行引擎(当然这仍然需要安装Spark等),或者,编写执行Hive查询的Spark代码