我有以下脚本正在 emr 的主节点上运行进行测试
我有一个名为
spark_test.py
的文件,如下
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[*]").appName("test").getOrCreate()
print("Spark Version:",spark.version)
sc = spark.sparkContext
print('Master :',sc.master)
print('Default Parallelism :',sc.defaultParallelism)
print('AQE Enabled :',spark.conf.get('spark.sql.adaptive.enabled'))
spark.conf.set('spark.sql.adaptive.enabled','true')
print('AQE Enabled :',spark.conf.get('spark.sql.adaptive.enabled'))
df = spark.read.load("/home/hadoop/sample.csv",format="csv", sep=",", inferSchema="true", header="true")
print('No of partitions in the dataframe :',df.rdd.getNumPartitions())
print(sc.uiWebUrl)
spark.stop()
print("Spark Version:",spark.version)
print('Master :',sc.master)
运行它
(venv) [hadoop@xxx]$ python spark_test.py
24/02/16 09:20:41 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark Version: 2.4.3
Master : local[*]
Default Parallelism : 4
AQE Enabled : false
AQE Enabled : true
No of partitions in the dataframe : 8
http://ip-xx.xx.xx.xx.ec2.internal:4040
Spark Version: 2.4.3
Master : local[*]
我想检查该脚本的 Spark ui。
我尝试访问,
http://ip-xx.xx.xx.xx.ec2.internal:4040
,但它说site cant be reached
(注意:我在本地使用 ssh 隧道访问 UI)
我可以访问 emr 应用程序中提到的 Spark 历史服务器,但我没有看到任何细节,可能是因为我使用 master“local[*]”而不是纱线独立运行它
如何访问任何独立脚本的 Spark ui
以下是您可以尝试实施的步骤
文档中的命令如下:
ssh -i ~/mykeypair.pem -N -L 8157:ec2-###-##-##-###.compute-1.amazonaws.com:8088 hadoop@ec2-###-##-##-###.compute-1.amazonaws.com
在此示例中,命令通过将本地端口
(随机选择的未使用本地端口)上的流量转发到主节点本地 Web 服务器上的端口 8088 来访问 ResourceManager Web 界面。在命令中,将8157
替换为~/mykeypair.pem
文件的位置和文件名,并将.pem
替换为集群的主公共 DNS 名称。要访问不同的 Web 界面,请将ec2-###-##-##-###.compute-1.amazonaws.com
替换为适当的端口号。例如,对于 Zeppelin 界面,将8088
替换为8088
。8890
并且请注意,仅当 Spark 会话处于活动状态时,您才能访问 Spark UI(在本地集群/远程集群上)。一旦您调用
spark.stop()
,它将阻止 Spark Web UI 处于活动状态。
因此,在调用
input(Press any key to continue..)
之前运行简单的用户输入命令,例如 spark.stop()
。这样,UI 将处于活动状态,直到您返回终端并按下按键并将其禁用为止。