您的位置:首页 > 运维架构 > Docker

Hadoop On Docker 实践

2017-03-09 15:07 459 查看
Nodemanager

Docker 上启动 Nodemanager 进程后,Docker 容器会承载很多 Container(Yarn 的资源单元),而这些 Container 其实是需要对外提供 tcp 服务的,而这些端口需要暴露到网络上,所以,选择 Docker 网络时需要注意,如果运行Docker容器的主机没有提供 sudo 权限其实会有很多限制,那么可以:

docker run --network="host" \

  --cap-add=SYS_ADMIN \

  -h="dn100" ...

--network 指定 host 表示完全使用主机的网络,例如:启动 tomcat 监听 8080,而运行 docker 容器的主机 ip 为 10.0.0.11,则可以在局域网中访问 10.0.0.11:8080,事实上 容器 中的 /etc/hosts /etc/hostname 这些都是和宿主机一样,而且默认 hostname xxx 来更改主机名时是不允许的,但是可以通过增加 --cap-add=SYS_ADMIN 选项来搞定,而且它改得只是 docker 容器的,不是宿主机的。-h="dn100"
选项貌似是没有用的。

datanode

如果启用了 kerberos,而且 datanode 使用 jsvc 启动时,docker 容器默认情况比较难启动起来:

cat /data/logs/hadoop/jsvc.err

  set_caps: failed to set capabilities

  check that your kernel supports capabilities

  set_caps(CAPS) failed for user 'hadoop'

  Service exit with a return value of 4

需要某些内核特性的支持:
http://man7.org/linux/man-pages/man7/capabilities.7.html
这时可以通过在 docker run 增加   --cap-add=ALL 解决;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop hadoop on docker