如何使pyspark和SparkSQL在Spark上执行配置单元?

2024-10-06 12:51:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经安装并设置了Spark on Yarn以及集成Spark with Hive Tables。通过使用spark-shell/pyspark,我还按照simple tutorial实现了创建配置单元表,加载数据,然后正确选择

然后我进入下一步,设置Hive on Spark。通过使用hive/beeline,我还实现了创建配置单元表,加载数据,然后正确选择。在纱线/火花上正确执行蜂巢。我怎么知道它有用?hiveshell显示以下内容:-

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

我在尝试什么

  1. $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>
  1. 使用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>|
+--------------------+-----------+
  1. 因为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|
+--------------------+-----+
  1. 使用SparkSQL从配置单元中选择数据
>>> spark.sql("select sum(col1) from test_table").show()
+---------+
|sum(col1)|
+---------+
|        6|
+---------+
  1. 即使结果也会显示,但资源管理器上没有显示任何应用程序。我理解SparkSQL不使用Hive On Spark。我对此一无所知

问题是

  1. 如何使pyspark/SparkSQL使用Hive on Spark
  2. 这样做是否适合加速并远离mr执行引擎
  3. 我是否用错了配料?还是不可能

Tags: keysqlvalueonshowenginesparkpyspark
1条回答
网友
1楼 · 发布于 2024-10-06 12:51:08

“Spark上的Hive”的缩写。“HiveServer2默认使用Spark执行引擎”

  • HS2服务的客户是什么?应用程序将蜂巢看作是强>常规数据库,通过JDBC(java /Scala应用程序,如^ {CD1> })或ODBC(R脚本,Windows应用程序)或DBI(Python Apple and Script)连接,并提交SQL查询
  • 这适用于火花工作吗?不Spark希望原始访问数据文件。本质上,Spark是它自己的数据库引擎;甚至还有Spark ThriftServer可以作为HS2的(原油)替代品


当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风格”交互时,有一个陷阱:
  • 默认情况下,HiveServer2使用Spark不支持的特定数据格式(ORC变体)管理“ACID表”
  • 默认情况下,Metastore通过为HS2和Spark使用不同的名称空间,有效地否定了拥有单个共享目录的目的,从而防止Spark知道任何HiveServer2表
  • 因此,霍顿为Spark提供了一个专用的“连接器”,通过HS2访问配置单元表,这否定了使用Spark执行引擎的目的

由于Horton已被Cloudera吸收,因此Spark与Metastore集成的前景尚不明朗。霍顿发行版的大部分好部件正在替换Cloudera的跛脚(或缺失)部件;但这一具体发展显然并不好

相关问题 更多 >