我通过以下命令运行 Spark Master:
./sbin/start-master.sh
之后我去了http://localhost:8080
,我看到了以下页面。
我期待看到包含“工作”、“环境”等的选项卡,如下所示
有人可以帮助我了解问题出在哪里吗?
我需要额外的配置吗?
谢谢
朱塞佩
在我的 Glue 作业中,我启用了 Spark UI 并指定了 Spark UI 工作所需的所有必要细节(s3 相关等)。
如何查看 Glue 作业的 DAG/Spark UI?
amazon-web-services directed-acyclic-graphs pyspark aws-glue spark-ui
我想完全理解有关 min/med/max 信息的含义。
例如:
scan time total(min, med, max)
34m(3.1s, 10.8s, 15.1s)
Run Code Online (Sandbox Code Playgroud)
平均所有核心的扫描时间最短为 3.1 秒,最长为 15.1 秒,累计总时间长达 34 分钟,对吗?
然后对于
data size total (min, med, max)
8.2GB(41.5MB, 42.2MB, 43.6MB)
Run Code Online (Sandbox Code Playgroud)
意味着所有核心的最大使用量是 43.6MB,最小使用量是 41.5MB,对吧?
所以同样的逻辑,对于左边的排序步骤,每个核心使用了 80MB 的 RAM。
现在,执行器有 4 个核心和 6G RAM,根据 metrix,我认为已经预留了很多 RAM,因为每个核心最多可以使用 1G 左右的 RAM。所以我想尝试减少分区数量并强制每个执行器处理更多数据并减少shuffle大小,您认为理论上可能吗?
据我所知,到目前为止,在 Spark 中,只要对数据集/数据帧调用操作,就会提交作业。工作可能进一步分为阶段和任务,我了解如何找出阶段和任务的数量。下面给出的是我的小代码
val spark = SparkSession.builder().master("local").getOrCreate()
val df = spark.read.json("/Users/vipulrajan/Downloads/demoStuff/data/rows/*.json").select("user_id", "os", "datetime", "response_time_ms")
df.show()
df.groupBy("user_id").count().show
Run Code Online (Sandbox Code Playgroud)
据我所知,当我阅读时,它应该在第 4 行提交一份作业。一个在第一场演出,一个在第二场演出。前两个假设是正确的,但对于第二个展示,它提交了 5 个作业。我不明白为什么。下面是我的用户界面的屏幕截图
如您所见,作业 0 用于读取 json,作业 1 用于第一个节目,5 个作业用于第二个节目。谁能帮我理解 Spark UI 中的这项工作是什么?
根据我的理解,action
Spark 中每个人都有一份工作。
但我经常看到单个操作触发了多个作业。我试图通过对数据集进行简单的聚合来测试这一点,以获得每个类别的最大值(这里是“主题”字段)
在检查 Spark UI 时,我可以看到为该groupBy
操作执行了 3 个“作业” ,而我预期只有一个。
谁能帮我理解为什么有 3 而不是只有 1?
students.show(5)
+----------+--------------+----------+----+-------+-----+-----+
|student_id|exam_center_id| subject|year|quarter|score|grade|
+----------+--------------+----------+----+-------+-----+-----+
| 1| 1| Math|2005| 1| 41| D|
| 1| 1| Spanish|2005| 1| 51| C|
| 1| 1| German|2005| 1| 39| D|
| 1| 1| Physics|2005| 1| 35| D|
| 1| 1| Biology|2005| 1| 53| C|
| 1| 1|Philosophy|2005| 1| 73| B|
// Task : Find Highest Score in each subject
val highestScores = students.groupBy("subject").max("score")
highestScores.show(10)
+----------+----------+
| …
Run Code Online (Sandbox Code Playgroud) 根据文档:
洗牌溢出(内存)是内存中洗牌数据的反序列化形式的大小。
Shuffle 溢出(磁盘)是磁盘上数据的序列化形式的大小。
我对shuffle的理解是这样的:
For each existing partition: new_partition = hash(partitioning_id)%200; target_executor = new_partition%num_executors
其中%
是模运算符,num_executors 是集群上执行程序的数量。我对shuffle操作的理解是否正确?
您能帮我将 shuffle 溢出(内存)和 shuffle 溢出(磁盘)的定义放在 shuffle 机制的上下文中(如果正确的话,上面描述的)?例如(也许):“shuffle溢出(磁盘)是上面提到的第2点中发生的部分,其中200个分区被转储到各自节点的磁盘上”(我不知道这样说是否正确;只是举个例子)
apache-spark apache-spark-sql pyspark spark-ui spark-shuffle