多主机搭建基于 Docker 运行的 Hadoop Cluster 总结

来源:互联网 发布:淘宝首页排版自定义 编辑:程序博客网 时间:2024/05/18 20:13

近期尝试在多主机上搭建基于 Docker 运行的 Hadoop 集群,踩了不少坑,总结一下:

  • Hadoop 节点之间需要 ssh 无障碍登录,包括登录自己: $ ssh localhost
  • 为了避免和主机 ssh 端口冲突,建议修改 Docker 容器内运行的 sshd 所使用的端口,比如 8002
  • Docker 容器网络默认是桥接,其 IP 是动态变化的,跨主机运行的 Docker 容器之间无法通过 IP 访问,可以通过设置 `--net=host` 的方式,直接使用主机的 IP 和 hostname。SO 上有人建议通过 SkyDock、SkyDNS、dsnmasq 或者 Swarn 的方式解决,似乎有的并未支持跨主机的场景。
  • slave 主机上运行的 Hadoop 需要设置固定的 yarn.nodemanager.address 端口,并在 `docker run` 的时候通过 `-p` 参数暴露出来,否则做分布式运算时主从之间会有通信问题。
  • Hive 需要数据库作为 metastore,可以采用 Docker linking container 的方式连接,也可以直接指定外部的数据库服务。创建 Dockerfile 时需要安装将要链接的数据库所使用的驱动。
  • dfs.defaultFS 需要设置为主机名或者固定 IP,不能使用 0.0.0.0,因为 Hive 在创建表信息的时候会将此信息写入 metastore,并在计算时传给其它节点进行处理,会造成其他节点因尝试访问 `hdfs://0.0.0.0` 失败而导致计算任务失败。
  • 通过该命令查看 yarn 节点信息: $ yarn node -list,如果显示的节点列表都是 localhost,则说明 Hadoop 节点配置有点问题,需要检查主机名以及所监听的 IP 地址。
  • 如果节点任务失败,可以到目录 $HADOOP_PREFIX/logs/userlogs/application_$APP_ID 下找相应的日志。

测试的两台主机配置为 8G 内存、4 核 8 线程 1600 MHz CPU,数据量在 10M+,运行单纯统计条数的 HiveSQL,消耗时间为 44s,在单机下运行则消耗 1m42s。

0 0
原创粉丝点击