Zeppelin启动报错:Creating directories for notebook.git failed
一、背景和报错
背景:在使用docker快速搭建Flink开发环境的时候使用了zeppelin记事本作为Flink开发工具,在启动Zeppelin的时候报错。
zeppelin官方文档:
- 启动命令
docker run -u $(id -u) -p 8888:8080 --rm -v /opt/docker/zeppelin/logs:/logs -v /opt/docker/zeppelin/notebook:/notebook \
-v /opt/modules/spark-3.0.0-bin-hadoop3.2:/opt/spark -v /opt/modules/flink-1.14.6:/opt/flink \
-e FLINK_HOME=/opt/flink -e SPARK_HOME=/opt/spark \
-e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.10.1
一定要配置 -v /opt/modules/flink-1.14.6:/opt/flink -e FLINK_HOME=/opt/flink这两个映射,不然启动后配置Flink时会一直报FLINK_HOME not find
spark文件路径映射如果不需要可以去掉。根据自己的需要配置
- 报错详情
ERROR [2023-03-17 01:33:32,943] ({main} ZeppelinServer.java[main]:262) - Error while running jettyServer
java.lang.Exception: A MultiException has 2 exceptions. They are:
1. java.io.IOException: Creating directories for /notebook/.git failed
2. java.lang.IllegalStateException: Unable to perform operation: create on org.apache.zeppelin.notebook.repo.NotebookRepoSync
at org.apache.zeppelin.server.ZeppelinServer.main(ZeppelinServer.java:256)
Caused by: A MultiException has 2 exceptions. They are:
1. java.io.IOException: Creating directories for /notebook/.git failed
2. java.lang.IllegalStateException: Unable to perform operation: create on org.apache.zeppelin.notebook.repo.NotebookRepoSync
at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:463)
at org.glassfish.hk2.utilities.ImmediateContext.findOrCreate(ImmediateContext.java:111)
at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2102)
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:93)
at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:67)
at org.glassfish.hk2.utilities.ImmediateContext.doWork(ImmediateContext.java:290)
at org.glassfish.hk2.internal.ImmediateHelper.run(ImmediateHelper.java:233)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Creating directories for /notebook/.git failed
二、排查思路
- 首先分析报错原因是创建文件夹失败,查找到Docker文件夹映射目录权限都是root,然后在docker启动命令中有个-u $(id -u)参数,这个参数是指定用户为当前用户,于是对映射路径进行授权
chown admin:admin /opt/docker/zeppelin
- 重新指定创建容器命令,可以启动。
- 打开web界面运行flink脚本,可以运行
三、其他解决思路分析
这次我是使用手动授权的方式对这个路径进行授权,当我做完这个操作的时候突然想起来我们使用docker 的时候有一个参数 --privileged ,我感觉非常有可能是没有加这个参数导致权限不够的,由于本地已经起来了,就没再尝试增加这个参数。
因为zeppelin启动命令是通过zeppelin官网查找的,除了映射文件路径外没再做其他的变更,所以增加 --privileged我觉得也能解决这个问题