簡體   English   中英

Hive on Spark和作為Hive執行引擎的Spark:有什么區別

[英]Hive on Spark and Spark as hive execution engine: What's the difference

使用Hive Metastore的Spark和作為Hive執行引擎運行的Spark有什么區別? 我已經按照本教程配置了spark和hive,並且已經從hive表中成功創建,填充和分析了數據。 現在讓我感到困惑的是我做了什么?

a)我是否將Spark配置為使用Hive Metastore並使用SparkSQL分析了Hive表中的數據?
b)我是否真的將Spark用作Hive執行引擎並使用HiveQL分析了Hive表中的數據,這就是我想要做的。

我將嘗試總結配置火花和蜂巢所做的工作

a)我按照上面的教程進行了配置,並配置了spark和hive
b) 像這樣寫我的/conf/hive-site.xml並
c)之后,我編寫了一些將連接到配置單元metastore並進行分析的代碼。 我為此使用Java,這段代碼啟動了Spark會話

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因為我很困惑在哪里設置hive.execution.engine=spark 謝謝

似乎您正在同時做兩個相反的事情。 您鏈接到的教程是有關將Spark用作Hive的執行引擎(稱為選項b)的說明。 這意味着您將幾乎完全在之前運行hive查詢,但在后台Hive將使用Spark而不是經典的MapReduce。 在這種情況下,您無需編寫任何使用SparkSession等的Java代碼。 您編寫的代碼正在執行選項a中所述的操作-使用Spark運行Hive查詢並使用Hive元存儲庫。

因此,總而言之,您不需要兩者都做-要么使用第一個教程在Hive執行引擎上配置Spark(當然,這仍然需要安裝Spark等),或者編寫執行Hive查詢的Spark代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM