本文将开始正式介绍使用Mac版的Docker搭建Hadoop集群,基于的原始镜像是java:8,而不是hadoop,目的就是将虚拟机搭建集群的方式完全使用docker容器实现。如果是基于hadoop镜像,步骤将变得更加简单,可以参考docker 容器实现 hadoop分布式集群部署。
前一篇文章已经做好了准备工作,接下来的工作主要是修改配置文件,假设当前已经在安装好的hadoop路径下,进入etc/hadoop,修改以下配置文件:
core-site.xml:
fs.defaultFS hdfs://hadoop1:8020 hadoop.tmp.dir /usr/lib/hadoop/data
hdfs-site.xml:
dfs.namenode.http-address namenode节点ip:9870 dfs.namenode.secondary.http-address secondary namenode节点ip或主机名:9868
注意这里的dfs.namenode.http-address值为节点ip+端口,其中的节点ip一般情况下可换为主机名,但Mac的宿主机和容器间是隔离的,最好写节点ip,然后运行namenode节点的容器时使用端口映射 -p 9870:9870,这样才能在宿主机访问到hdfs页面。
yarn-site.xml:
yarn.nodemanager.aux-service mapreduce-shuffle yarn.resourcemanager.hostname hadoop2
mapred-site.xml:
mapreduce.framework.name yarn
然后编辑workers文件,使其内容只有三个主机名:
注意不能有多余的空格和空行。
然后编辑hadoop-env.sh文件,添加两行环境变量(本来这两行在原文件中有,但被注释掉了,可以解除注释,修改相应内容使其生效):
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=/usr/lib/hadoop
环境变量真实地址根据实际情况填写。最好回到hadoop安装路径,进入sbin目录,修改start-dfs.sh和stop-dfs.sh文件,添加以下内容:
HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
接着修改start-yarn.sh和stop-yarn.sh文件,添加以下内容:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
上述这些USER不配好,就会报错:Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined。至此,配置文件基本改好,运行hdfs namenode -format进行初始化,如果运行完之后成功,可以在hadoop目录下看到新生产data和logs文件夹:
进入data/ dfs目录,可以看到name文件夹。
然后回到hadoop目录,运行命令启动HDFS:
sbin/start-dfs.sh
如果运行成功,会在data/dfs/目录下看到新生成的data目录,并且使用jps在namenode节点(即hadoop1)查看java进程会看到:
在hadoop3节点会看到只有SecondaryNameNode:
在Safari浏览器输入localhost:9870会看到页面:
尝试创建目录:
hadoop fs -mkdir /wcinput
可以看到前台页面出现了新的目录wcinput:
然后尝试上传文件:
hadoop fs -put wcinput/word.txt /wcinput
运行结果:
真实数据存在如下路径:
查看其中的文件:
与原文件内容一致。



