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

iaqfqrcu  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(361)

使用配置单元元存储的spark和作为配置单元执行引擎运行的spark有什么区别?我按照本教程配置了spark和hive,并成功地从hive表中创建、填充和分析了数据。现在让我困惑的是我做了什么?
a) 我是否将spark配置为使用配置单元元存储并使用sparksql分析配置单元表中的数据?
b) 我是否真的使用spark作为配置单元执行引擎,并使用hiveql分析配置单元表中的数据,这正是我想要做的。
我将尝试总结一下我在配置spark和hive方面所做的工作
a) 我按照上面的教程配置了spark和hive
b) 像这样编写my/conf/hive-site.xml
c) 之后,我编写了一些代码,可以连接到hive元存储并进行分析。我使用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.xml 或者 hive/conf/hive-site.xml 因为我不知道该怎么办 hive.execution.engine=spark . 谢谢

k4ymrczo

k4ymrczo1#

你好像同时在做两件相反的事。您链接到的教程是使用spark作为配置单元执行引擎的说明(您所描述的选项b)。这意味着您将几乎完全在以前运行配置单元查询,但在幕后配置单元将使用spark而不是经典的mapreduce。在这种情况下,您不需要编写任何使用sparksession等的java代码。您编写的代码正在执行选项a中描述的操作—使用spark运行配置单元查询并使用配置单元元存储。
总之,您不需要同时完成这两个任务—或者使用第一个教程configure spark as you hive execution engine(当然这仍然需要安装spark等),或者编写执行配置单元查询的spark代码。

相关问题