hadoop - HDFS 作为 cloudera quickstart docker 中的卷

标签 hadoop docker hdfs cloudera bigdata

我对 hadoop 和 docker 都很陌生。

我一直致力于扩展 cloudera/quickstart docker 镜像 docker 文件,并希望从主机挂载一个目录并将其映射到 hdfs 位置,以便提高性能并在本地持久保存数据。

当我使用 -v/localdir:/someDir 在任何地方安装卷时,一切正常,但这不是我的目标。但是当我执行 -v/localdir:/var/lib/hadoop-hdfs 时,datanode 和 namenode 都无法启动,我得到:“cd/var/lib/hadoop-hdfs:权限被拒绝”。当我执行 -v/localdir:/var/lib/hadoop-hdfs/cache 时,没有权限被拒绝,但数据节点和名称节点,或者其中之一无法启动 docker 镜像,我可以'无法在日志文件中找到有关其原因的任何有用信息。

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

最佳答案

我遇到了同样的问题,我已经解决了将整个 /var/lib 目录从容器复制到本地目录的情况

从终端启动cloudera/quickstart容器而不启动所有hadoop服务:

docker run -ti cloudera/quickstart /bin/bash

在另一个终端copy the container directory to the local directory :

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

关于hadoop - HDFS 作为 cloudera quickstart docker 中的卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521048/

相关文章:

java - Hadoop 文件系统 shell 在成功执行后返回 -1

hadoop - Jython 在 Pig 的 UDF 上下文中的局限性

hadoop - 在Hadoop-3.2.0中运行start-dfs.sh时出错

java - 让用户运行 HIVE 作业?

nginx - Docker - 运行 nginx 作为 Redmine 的代理

java - 将图像传递给 Java

hadoop - 如何实现复杂的编辑?

docker - 在链接的 docker 容器中执行命令

Docker - celery 作为守护进程 - 没有找到 pidfiles

java - 在 HDFS 上追加文件的推荐方法是什么?