本地搭建 Glue Spark History Server 步骤
问题描述:
https://docs.amazonaws.cn/glue/latest/dg/monitor-spark-ui-history.html
文档中提供了两种搭建方式,cloudformation和docker image。第一种方式中国区不支持。所以中国区要想查看Glue job 的 history ui 只能用docker image自建server。而文档里提供的 Dockerfile 中使用的国外镜像源,非常慢,我测试了一下按文档上的步骤搭建完成需要1个多小时。并且只能通过代理访问,不能在EC2服务器以外的浏览器访问。所以有了这篇文章。这套流程搭建仅需5-10分钟。
解决的痛点:
-
修改 docker 镜像源为国内源,加快docker构建速度。
-
将获取spark jar的方式从 maven 下载换成了由本地提供。避免从maven官方库下载过程。
-
配置docker服务启动后允许外部网络访问。
解决方案:
https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Spark_UI/
- 准备一个较大存储空间的EC2,从 github 拉取文件。
$ sudo yum install -y git
$ git clone https://github.com/aws-samples/aws-glue-samples.git
$ cd ./aws-glue-samples/utilities/Spark_UI/
- 手动下载 spark 源文件,并解压
$ wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-without-hadoop.tgz
$ tar -xzf spark-3.3.2-bin-without-hadoop.tgz
完成后的目录如下:
[hadoop@ip-10-0-2-113 Spark_UI]$ pwd
/home/hadoop/aws-glue-samples/utilities/Spark_UI
[hadoop@ip-10-0-2-113 Spark_UI]$ ls
Dockerfile pom.xml README.md spark-3.3.2-bin-without-hadoop spark-3.3.2-bin-without-hadoop.tgz
- 修改 Dockerfile 文件
$ vim Dockerfile
:set number 显示行号,在第8行后回车,加入下面的配置
ADD spark-3.3.2-bin-without-hadoop /opt/spark
然后注释掉 10-13 行,保存退出。
效果如下:
ADD pom.xml /tmp
ADD spark-3.3.2-bin-without-hadoop /opt/spark
#RUN curl -o ./spark-3.3.0-bin-without-hadoop.tgz https://archive.apache.org/dist/spark/spark-3.3.0/spark-3.3.0-bin-without-hadoop.tgz
#RUN tar -xzf spark-3.3.0-bin-without-hadoop.tgz && \
# mv spark-3.3.0-bin-without-hadoop /opt/spark && \
# rm spark-3.3.0-bin-without-hadoop.tgz
- 安装 docker 服务
$ sudo yum -y install docker
- 指定docker国内镜像源。
创建或编辑一个 daemon.json 配置文件,填写下面的配置内容
$ sudo vim /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://mirror.ccs.tencentyun.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
]
}
- 启动docker服务
$ sudo systemctl start docker
- 拉取镜像
[hadoop@ip-10-0-2-113 Spark_UI]$ pwd
/home/hadoop/aws-glue-samples/utilities/Spark_UI
$ sudo docker build -t glue/sparkui:latest ./
- 启动Spark history server
$ sudo docker run -itd -e \
SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.logDirectory=s3a://用来存放Spark日志的桶名/自定义目录名/ -Dspark.hadoop.fs.s3a.access.key=你的AK -Dspark.hadoop.fs.s3a.secret.key=你的SK -Dspark.hadoop.fs.s3a.endpoint=s3.cn-north-1.amazonaws.com.cn" \
-p 0.0.0.0:13030:18080 \
glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"
# -p 我这里用EC2的13030端口映射到了docker内的18080端口,只有用 0.0.0.0 才能让外部访问。
- 确保你的本地浏览器与你的EC2网络连接是通的,然后访问你的History server服务地址:
http://你的EC2公有DNS:13030/