首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否更改Spark Web UI的根路径?

是否更改Spark Web UI的根路径?
EN

Stack Overflow用户
提问于 2019-05-30 05:44:42
回答 2查看 1.6K关注 0票数 2

我正在致力于在Kubernetes上设置能够启动pyspark的Jupyter笔记本服务器。每个用户能够同时运行多个服务器,并且可以通过导航到适当的主机并结合到服务器的完全限定名称的路径来访问每个服务器。例如:http://<hostname>/<username>/<notebook server name>

我定义了一个顶级函数,它允许用户创建一个指向Kubernetes master URL的SparkSession,并将他们的pod设置为Spark driver。

这一切都很好,但我希望最终用户能够访问Spark Web UI的URL,以便他们可以跟踪他们的作业。Spark on Kubernetes documentation将端口转发作为实现此目标的推荐方案。似乎对于任何注重安全的组织来说,允许任何随机用户以这种方式设置端口转发都是不可接受的。

我想使用Ingress Kubernetes定义来允许外部访问驱动程序的Spark Web UI。我已经设置了如下内容:

代码语言:javascript
复制
# Service
apiVersion: v1
kind: Service
metadata:
  namespace: <notebook namespae>
  name: <username>-<notebook server name>-svc
spec:
  type: ClusterIP
  sessionAffinity: None
  selector:
    app: <username>-<notebook server name>-notebook
  ports:
  - name: app-svc-port
    protocol: TCP
    port: 8888
    targetPort: 8888
  - name: spark-ui-port
    protocol: TCP
    port: 4040
    targetPort: 4040

# Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: workspace
  name: <username>-<notebook server name>-ing
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: <hostname>
    http:
      paths:
      - path: /<username>/<notebook server name>
        backend:
          serviceName: <username>-<notebook server name>-svc
          servicePort: app-svc-port
      - path: /<username>/<notebook server name>/spark-ui
        backend:
          serviceName: <username>-<notebook server name>-svc
          servicePort: spark-ui-port

然而,在这种设置下,当我导航到http://<hostname>/<username>/<notebook server name>/spark-ui/时,我被重定向到http://<hostname>/jobs。这是因为/jobs是Spark的Web的默认入口点。但是,我没有针对该路径的入口规则,也不能设置这样的规则,因为在负载均衡器中,每个用户的Web UI都会相互冲突(除非我有误解,这是完全可能的)。

Spark UI configuration设置下,似乎没有一种方法可以为Spark会话设置根路径。您可以更改运行它的端口,但我想要做的是使UI在以下位置提供服务:http://<hostname>/<username>/<notebook server name>/spark-ui/<jobs, stages, etc>。是否真的没有办法更改URL主机名之后和最后一部分之前的内容?

EN

回答 2

Stack Overflow用户

发布于 2020-08-18 08:14:02

1:设置spark配置

代码语言:javascript
复制
spark.ui.proxyBase: /foo

2:在Ingress中设置nginx注解

代码语言:javascript
复制
annotations:
  nginx.ingress.kubernetes.io/proxy-redirect-from: http://$host/
  nginx.ingress.kubernetes.io/proxy-redirect-to: http://$host/foo/

3:重写目标的注释:

代码语言:javascript
复制
annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /$2

spec:
  rules:
  - host: <host>
    http:
      paths:
      - backend:
          serviceName: <service>
          servicePort: <port>
        path: /foo(/|$)(.*)
票数 2
EN

Stack Overflow用户

发布于 2019-11-07 09:18:06

是的,你可以做到这一点。具体地说,您可以通过在spark-defaults.conf中或在运行时设置spark.ui.proxyBase属性来完成此操作。

示例:

echo "spark.ui.proxyBase $SPARK_UI_PROXYBASE“>> /opt/spark/conf/spark-defaults.conf;

那么这应该是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56368948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档