在Cloudera Quickstart Docker中使用HDFS作为卷

6

我对Hadoop和Docker都比较新。

我一直在扩展cloudera/quickstart Docker镜像的docker文件,并希望挂载主机上的目录并将其映射到hdfs位置,以便提高性能并使数据持久化。

当我使用 -v /localdir:/someDir 在任何地方挂载卷时,一切正常,但这不是我的目标。但是,当我使用 -v /localdir:/var/lib/hadoop-hdfs 时,数据节点和名称节点都无法启动,我会收到“cd /var/lib/hadoop-hdfs:权限被拒绝”的错误。当我使用-v /localdir:/var/lib/hadoop-hdfs/cache 时,没有权限被拒绝,但是在启动docker镜像时,数据节点和名称节点中的一个或多个将无法启动,我在日志文件中找不到有关原因的任何有用信息。

也许有人遇到过这个问题,或者有其他解决方案可以将hdfs放在docker容器之外?


你是否检查了容器的Docker日志(docker logs <ID>)? - Binary Nerd
是的,当我编辑我的帖子时: 1)使用“-v / localdir:/ var / lib / hadoop-hdfs”时出现以下问题: 开始数据节点,记录到/var/log/hadoop-hdfs/hadoop-hdfs-datanode-quickstart.cloudera.out。 无法启动Hadoop数据节点。返回值:1 bash:第0行:cd:/var/lib/hadoop-hdfs:权限被拒绝 无法启动Hadoop日志节点。返回值:3 bash:第0行:cd:/var/lib/hadoop-hdfs:权限被拒绝 无法启动Hadoop名称节点。返回值:3 bash:第0行:cd:/var/lib/hadoop-hdfs:权限被拒绝 无法启动Hadoop辅助名称节点。返回值:3 - Maciej Jurewicz
使用“-v /localdir:/var/lib/hadoop-hdfs/cache”时,出现以下情况: 启动数据节点,日志记录到/var/log/hadoop-hdfs/hadoop-hdfs-datanode-quickstart.cloudera.out 无法启动Hadoop数据节点。返回值:1 启动日志节点,日志记录到/var/log/hadoop-hdfs/hadoop-hdfs-journalnode-quickstart.cloudera.out 已启动Hadoop日志节点:OK 启动名称节点,日志记录到/var/log/hadoop-hdfs/hadoop-hdfs-namenode-quickstart.cloudera.out 无法启动Hadoop名称节点。返回值:1 辅助名称节点同样如此 - Maciej Jurewicz
2个回答

2
"最初的回答"翻译成英文是 "Original Answer"。
我遇到了同样的问题,解决方法是将容器中的整个/var/lib目录复制到本地目录中。从终端启动cloudera/quickstart容器时,不要启动所有的hadoop服务:
docker run -ti cloudera/quickstart /bin/bash

在另一个终端中,将容器目录复制到本地目录中。请参阅此处的相关信息。原始答案:最初的回答。
mkdir /local_var_lib
docker exec your_container_id tar Ccf $(dirname /var/lib) - $(basename /var/lib) | tar Cxf /local_var_lib -

将容器中的所有文件复制到本地目录后,停止容器并将/var/lib指向新目标。确保/local_var_lib目录包含hadoop目录(hbase、hadoop-hdfs、oozie、mysql等)。

启动容器:

docker run --name cloudera \
  --hostname=quickstart.cloudera \
  --privileged=true \
  -td \
  -p 2181:2181 \
  -p 8888:8888 \
  -p 7180:7180 \
  -p 6680:80 \
  -p 7187:7187 \
  -p 8079:8079 \
  -p 8080:8080 \
  -p 8085:8085 \
  -p 8400:8400 \
  -p 8161:8161 \
  -p 9090:9090 \
  -p 9095:9095 \
  -p 60000:60000 \
  -p 60010:60010 \
  -p 60020:60020 \
  -p 60030:60030 \
  -v /local_var_lib:/var/lib \
  cloudera/quickstart /usr/bin/docker-quickstart

1
你应该运行一个

标签。

docker exec -it "YOUR CLOUDERA CONTAINER" chown -R hdfs:hadoop /var/lib/hadoop-hdfs/ 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接