Windows下使用Bitnami Docker Compose运行Spark作业报错
问题根源与解决方法
是,这就是问题的核心根源。Spark和Hadoop的底层逻辑会尝试获取当前运行用户的用户名,当容器内的用户ID(UID)在/etc/passwd文件中没有对应的用户条目时,就会抛出NullPointerException,进而触发Kerberos认证失败的错误,这和你测试whoami命令失败的现象完全吻合。
解决方法
下面是几种针对Bitnami Spark Docker镜像的可行修复方案:
利用Bitnami镜像内置的用户配置变量
Bitnami的Spark镜像支持通过USER_ID和GROUP_ID环境变量自动创建匹配的用户,只需在docker-compose.yml的spark-master和spark-worker服务中添加以下配置:services: spark-master: environment: - USER_ID=1000 - GROUP_ID=1000 spark-worker: environment: - USER_ID=1000 - GROUP_ID=1000重启集群后,镜像会自动生成对应UID的用户条目,解决用户名缺失问题。
手动在容器启动时添加用户条目
如果上述变量不生效,可以直接在worker的启动命令中先写入用户信息到/etc/passwd,再启动Spark服务:services: spark-worker: command: > bash -c "echo 'spark:x:1000:1000::/home/spark:/bin/bash' >> /etc/passwd && /opt/bitnami/scripts/spark/run.sh"自定义entrypoint生成临时用户
通过修改entrypoint,在容器启动时动态创建匹配当前UID的用户:services: spark-worker: entrypoint: ["bash", "-c", "useradd -u $(id -u) -o -m spark && exec /opt/bitnami/scripts/spark/run.sh"]
验证方法
修改配置重启集群后,进入worker容器执行whoami命令,若返回spark则说明用户配置生效,此时重新提交PySpark作业就不会再出现Kerberos相关的错误。
内容的提问来源于stack exchange,提问作者DimaA6_ABC
相关产品推荐
相关产品推荐

