Hadoop 执行select查询时,HiveContext.sql()将如何工作?
环境: spark-1.2.0-bin-hadoop2.4Hadoop 执行select查询时,HiveContext.sql()将如何工作?,hadoop,hive,apache-spark-sql,Hadoop,Hive,Apache Spark Sql,环境: spark-1.2.0-bin-hadoop2.4 spark-submit --class MyClass \ --master yarn-client \ --num-executors 20 --executor-memory 5g \ --driver-memory 4g --executor-cores 4 \ MyJar.jar 大家好 最近我得到一个查询,它确实在同一个表上联接 SELECT columns_I_need FROM ( SE
spark-submit --class MyClass \
--master yarn-client \
--num-executors 20 --executor-memory 5g \
--driver-memory 4g --executor-cores 4 \
MyJar.jar
大家好
最近我得到一个查询,它确实在同一个表上联接
SELECT columns_I_need
FROM
(
SELECT blablabla,column_for_join
FROM a_huge_table
WHERE common_expr AND expr_A
) a
LEFT JOIN
(
SELECT somethingelse,column_for_join
FROM a_huge_table
WHERE common_expr AND expr_B
) b
ON a.column_for_join = b.column_for_join
GROUP BY
columns_I_need
一个庞大的表
是一个非常庞大的表,而且列_for _join
没有索引(我不是DBA,我帮不了忙-他们拒绝)
此查询在Hive CLI中需要3~5分钟(2个阶段,共4个阶段,每个阶段30分钟)
使用spark.sql.codegen
将阶段数减少到2个,但每个阶段的时间开销不会减少。由于此表只使用一次,我假设HiveContext.CacheTable()不会有多大帮助。我想spark中使用的方法与hive有所不同
我试图挖掘spark源代码,发现它很难理解:HiveContext.sql(SqlText)
returnSchemaRDD(HiveContext,LogicalPlan由解析器使用SqlText创建)
,我看到LogicalPlan在traitSchemaRDDLike
sqlContext.executePlan
executePlan.execute()
=>SparkPlan.execute()
但我找不到SparkPlan.execute()
有任何名为SELECT
的覆盖版本。然后我被卡住了。我仍然不明白spark是如何从蜂巢抓取数据的
那么spark SQL是如何工作的呢?我想知道是否有任何文档可以阅读以更好地理解spark SQL
顺便说一句,HiveContext().sql():SchemaRDD
已经不存在了,master branch现在的版本是HiveContext().sql():DataFrame
。它们改变的太快了