作为蜂巢执行引擎的Spark和Spark上的Hive:有什么区别

时间:2017-07-27 10:30:37

标签: apache-spark hive apache-spark-sql hiveql

使用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.xmlhive/conf/hive-site.xml,因为我很困惑在哪里设置{{ 1}}。 感谢

1 个答案:

答案 0 :(得分:0)

好像你正在做两件相反的事情。您链接的教程是使用Spark作为Hive执行引擎的说明(您将其描述为选项b)。这意味着您将几乎完全在之前运行您的配置单元查询,但在幕后Hive将使用Spark而不是经典的MapReduce。在这种情况下,您不需要编写任何使用SparkSession等的Java代码。您编写的代码正在执行您在选项a中描述的内容 - 使用Spark运行Hive查询并使用Hive Metastore。

总而言之,您不需要同时执行这两项操作 - 使用第一个教程配置Spark作为Hive执行引擎(当然这仍然需要安装Spark等),或者,编写执行Hive查询的Spark代码