我已经安装并设置了Spark on Yarn以及集成Spark with Hive Tables。通过使用spark-shell
/pyspark
,我还按照simple tutorial实现了创建配置单元表,加载数据,然后正确选择
然后我进入下一步,设置Hive on Spark。通过使用hive
/beeline
,我还实现了创建配置单元表,加载数据,然后正确选择。在纱线/火花上正确执行蜂巢。我怎么知道它有用?hive
shell显示以下内容:-
hive> select sum(col1) from test_table;
....
Query Hive on Spark job[0] stages: [0, 1]
Spark job[0] status = RUNNING
--------------------------------------------------------------------------------------
STAGES ATTEMPT STATUS TOTAL COMPLETED RUNNING PENDING FAILED
--------------------------------------------------------------------------------------
Stage-0 ........ 0 FINISHED 3 3 0 0 0
Stage-1 ........ 0 FINISHED 1 1 0 0 0
--------------------------------------------------------------------------------------
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 55.26 s
--------------------------------------------------------------------------------------
Spark job[0] finished successfully in 55.26 second(s)
OK
6
Time taken: 99.165 seconds, Fetched: 1 row(s)
资源管理器UI还将RUNNING
应用程序显示为Hive on Spark (sessionId = ....)
,我可以访问ApplicationMaster
以查看详细信息查询
目前我还无法实现的步骤是将pyspark
/SparkSQL
集成到Hive on Spark
$SPARK_HOME/conf/hive-site.xml
编辑为hive.execution.engine=spark
李> <property>
<name>hive.execution.engine</name>
<value>spark</value>
<description>
Expects one of [mr, tez, spark].
</description>
</property>
bin/pyspark
登录pyspark并检查hive.execution.engine
李>>>> spark.sql("set spark.master").show()
+------------+-----+
| key|value|
+------------+-----+
|spark.master| yarn|
+------------+-----+
>>> spark.sql("set spark.submit.deployMode").show()
+--------------------+------+
| key| value|
+--------------------+------+
|spark.submit.depl...|client|
+--------------------+------+
>>> spark.sql("set hive.execution.engine").show()
+--------------------+-----------+
| key| value|
+--------------------+-----------+
|hive.execution.en...|<undefined>|
+--------------------+-----------+
hive.execution.engine
没有任何值(非常惊讶!我已经设置了hive-site.xml!),所以我决定手动设置它,如下所示:->>> spark.sql("set hive.execution.engine=spark")
>>> spark.sql("set hive.execution.engine").show()
+--------------------+-----+
| key|value|
+--------------------+-----+
|hive.execution.en...|spark|
+--------------------+-----+
>>> spark.sql("select sum(col1) from test_table").show()
+---------+
|sum(col1)|
+---------+
| 6|
+---------+
SparkSQL
不使用Hive On Spark
。我对此一无所知李>pyspark
/SparkSQL
使用Hive on Spark
李>mr
执行引擎李>
“Spark上的Hive”是的缩写。“HiveServer2默认使用Spark执行引擎”
当Spark构建为与Hive V1或Hive V2交互时,它仅与MetaStore服务交互,即元数据目录,使多个系统(HiveServer2/Presto/Impala/Spark jobs/Spark ThriftServer/etc)可以共享“数据库”和“表”的相同定义,包括数据文件的位置(即HDFS目录/S3伪目录/etc)
但是每个系统都有自己的库来读取和写入“表”,HiveServer2使用了纱线作业(可以选择执行引擎,如MapReduce、TEZ、Spark);黑斑羚和普雷斯托有他们自己的执行引擎在纱线之外运行;Spark有自己的执行引擎在纱线内部或外部运行
不幸的是,这些系统没有协调它们的读/写操作,这可能是一个真正的混乱(即,配置单元选择查询可能会崩溃,因为Spark作业在重建分区时刚刚删除了一个文件,反之亦然),尽管Metastore提供了一个API来管理ZooKeeper中的读/写锁。显然,只有HS2支持该API,而且默认情况下它甚至不处于活动状态
PS:Hive LLAP是另一个系统,它使用Thread和TEZ(没有其他选项),但具有额外的持久性层和用于缓存的内存网格,即不是常规的HiveServer2,而是HortonWorks作为Impala和Presto的竞争对手引入的一种演变
当Spark构建为与Hive V3“HortonWorks风格”交互时,有一个陷阱:
由于Horton已被Cloudera吸收,因此Spark与Metastore集成的前景尚不明朗。霍顿发行版的大部分好部件正在替换Cloudera的跛脚(或缺失)部件;但这一具体发展显然并不好
相关问题 更多 >
编程相关推荐