- 先把坑放在着,大家注意踩一下
- 一、准备服务器镜像
- https://hub.docker.com/">1、docker镜像仓库地址,可以在这里检索你所需要的镜像版本,本次集群搭建使用是的centos7.5 https://hub.docker.com/
- 2、为hadoop集群单独构建虚拟网络
- 3、查看 Docker 中的网络
- 4、查看已经下载的镜像
- 5、根据镜像启动一个容器,可以看出 shell 已经是容器的 shell 了(第二行开头,已经是root用户了):
- 6、退出虚拟机:输入exit
- 二、安装JDK和hadoop
- 三、安装SSHD和network_tools
- 四、配置服务器环境变量以及hadoop核心配置文件
- 五、docker中启动集群
- 六、网页访问、Hadoop命令
先把坑放在着,大家注意踩一下
1、修改浏览器所在系统的host文件 Mac可以安装 switchhosts 配置系统的hosts 127.0.0.1 hadoop001 127.0.0.1 hadoop002 127.0.0.1 hadoop003 2、启动doker容器时尽量暴露相关的必要端口 docker run -it —network hadoop -h hadoop003 —name “hadoop003” -p 9868:9868 modelhadoop:2.0 /bin/bash docker run -it —network hadoop -h hadoop002 —name “hadoop002” —iptables false -p 8088:8088 -p 9864:9864 modelhadoop:2.0 /bin/bash docker run -it —network hadoop -h hadoop001 —name “hadoop001” —iptables false -p 9870:9870 -p 19888:19888 -p 9866:9866 -p 9820:9820 -p 10020:10020 -p 8042:8042 modelhadoop:2.0 /bin/bash -v /Users/iflytek/Documents/dockersoft:/usr/local/software docker run -d —name centos7 —privileged=true modelhadoop:2.0 /usr/sbin/init 3、集群中三个节点主要部署方式 hadoop001 hadoop002 hadoop003 NameNode DataNode SecondaryNameNode DataNode NodeManager DataNode NodeManager ResourceManager NodeManager historyserver
一、准备服务器镜像
1、docker镜像仓库地址,可以在这里检索你所需要的镜像版本,本次集群搭建使用是的centos7.5 https://hub.docker.com/
docker pull centos:7.5.1804
2、为hadoop集群单独构建虚拟网络
docker network create --driver=bridge hadoop
3、查看 Docker 中的网络
docker network ls
NETWORK ID NAME DRIVER SCOPE
e1b9158cfb33 bridge bridge local
4f6e1564b511 hadoop bridge local
dab2ec29b3c6 host host local
bd255529ccad none null local
4、查看已经下载的镜像
iflytek@iflytek ~ % dodocker images
REPOSITORY TAG IMAGE ID CREATED SIZE
modelhadoop 2.0 dd78b33dfe4a 17 hours ago 1.87GB
docker/desktop-git-helper 5a4fca126aadcd3f6cc3a011aa991de982ae7000 efe2d67c403b 7 months ago 44.2MB
centos centos7.5.1804 cf49811e3cdb 2 years ago 200MB
redis 3.2 87856cc39862 3 years ago 76MB
5、根据镜像启动一个容器,可以看出 shell 已经是容器的 shell 了(第二行开头,已经是root用户了):
iflytek@iflytek ~ % docker run -it centos:centos7.5.1804 /bin/bash
[root@a605e443c2b7 /]#
6、退出虚拟机:输入exit
[root@a605e443c2b7 /]# exit
exit
iflytek@iflytek ~ %
二、安装JDK和hadoop
1、启动容器
由于镜像中不包含wget,也没有预先安装sshd,传统的scp与http方式均无法传输,需要通过bind mount的方式启动镜像,来完成文件传输.
此处使用本机的/Users/iflytek/Documents/dockersoft目录
docker run -it --name hadoop -v /Users/iflytek/Documents/dockersoft:/usr/local/software modelhadoop:2.0
2、软件安装
将软件包放置到/Users/iflytek/Documents/dockersoft可以在容器/usr/local/software看到对应安装包
目录规划:
/usr/local/bigdata/jdk 作为jdk目录
/usr/local/bigdata/hadoop hadoop的目录 包含jar包 启动脚本 hadoop配置等
/usr/local/bigdata/logs 存放日志,方便查阅 这个后边用hadoop用户创建
解压软件包:
## 创建目录并拷贝软件包
mkdir /usr/local/bigdata
cp /usr/local/software /usr/local/bigdata
cd /usr/local/bigdata
## 解压后重命名
tar -zxvf hadoop-3.1.3.tar.gz
tar -zxvf jdk-8u161-linux-x64.tar.gz
mv hadoop-3.1.3 hadoop
mv jdk1.8.0_281/ jdk
## 清理安装包 减小容器大小
rm -f hadoop-3.1.3.tar.gz
rm -f jdk-8u161-linux-x64.tar.gz
三、安装SSHD和network_tools
hadoop节点间通过ssh操作,默认镜像中并不包含sshd服务,因为需要安装.
yum update
#一路Y回车.更新完yum后安装sshd
yum install -y openssl openssh-server
yum install openssh*
#一路回车,创建密钥并启动ssh服务
ssh-keygen -t rsa
ssh-keygen -t dsa
ssh-keygen -t ecdsa
ssh-keygen -t ed25519
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
修改sshd的配置文件:
vi /etc/ssh/sshd_config
修改部分为:
### 原内容
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
### 修改为
HostKey /root/.ssh/id_rsa
HostKey /root/.ssh/id_ecdsa
HostKey /root/.ssh/id_ed25519
HostKey /root/.ssh/id_dsa
允许远程登陆:
vi /etc/pam.d/sshd
# 使用#注释掉此行
# account required pam_nologin.so
启动sshd服务并查看状态:
/usr/sbin/sshd
ps -ef | grep sshd
root 411 1 0 05:02 ? 00:00:00 /usr/sbin/sshd
root 8168 8038 0 08:04 pts/7 00:00:00 grep --color=auto sshd
安装net-tools
yum install net-tools
四、配置服务器环境变量以及hadoop核心配置文件
1、环境变量配置
vi ~/.bash_profile
替换内容如下
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export JAVA_HOME=/usr/local/bigdata/jdk
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
# hadoop env
export HADOOP_HOME=/usr/local/bigdata/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
#export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
#export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
PATH=$PATH:$HOME/bin
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
:wq保存,更新环境变量
source ~/.bash_profile
2、配置Hadoop环境(重点来了)
Hadoop配置中,有5个文件是重点配置的,分别是:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers,下面就一个个开始配置:
hadoop相关组件的配置文件所在目录如下:/usr/local/bigdata/hadoop/etc/hadoop
1、修改core-site.xml
<configuration> <!--指定nameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<!--指定Hadoop数据的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/bigdata/hadoop/data</value>
</property>
<!--配置HDFS网页登陆使用的静态用户,配置这个之后才有权限可以在网页端删除文件、文件夹-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
2、修改 hadoop-env.sh 文件,在文件末尾添加以下信息(JAVA_HOME根据自己的修改)
export JAVA_HOME=/usr/local/bigdata/jdk
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
3、修改hdfs-site.xml,修改为:
<configuration> <!--文件的存储个数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property> <!--nn web端访问地址,使用网页访问HDFS文件系统就是这个端口-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop001:9870</value>
</property> <!--2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop001:9868</value>
</property> <!--网页查看HDFS文件内容,出现Couldn‘t preview the file报错,需要配置的参数-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
4、修改mapred-site.xml,修改为
<configuration> <!--指定MapReduce程序运行在Yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5、修改yarn-site.xml,修改为
<configuration>
<!--指定MR走 shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop001</value>
</property>
<!--环境变量的继承-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
6、修改workers,修改为:
hadoop001
hadoop002
hadoop003
注意:hadoop001这些后面不要有空格!hadoop003后面,不要有空的行!自己准备起多少集群,就在这里写几个,要是准备起5个集群,就写到hadoop005。
五、docker中启动集群
1、先将当前容器 导出为镜像(使用自己的centos容器id),并查看当前镜像
2、启动3个终端(注意,是要开3个终端!!!)
第一条命令启动的是 hadoop001 是做 master 节点的,所以暴露了端口,以供访问 web 页面
docker run -it --network hadoop -h hadoop001 --name "hadoop001" -p 9870:9870 -p 19888:19888 -v /Users/iflytek/Documents/dockersoft:/usr/local/software hadoop001:2.0 /bin/bash
后面几条命令就基本类似,第二条命令
docker run -it --network hadoop -h hadoop002 --name "hadoop002" -p 8088:8088 -pm 8032:8032 hadoop001:2.0 /bin/bash
第三条命令
docker run -it --network hadoop -h hadoop003 --name "hadoop003" modelhadoop /bin/bash
3、在 hadoop001主机中,启动 Haddop 集群
先进行格式化操作,不格式化操作,hdfs起不来:
[root@hadoop001 hadoop]# ./bin/hdfs namenode -format
然后启动HDFS集群:
[root@hadoop001 hadoop]# ./sbin/start-dfs.sh
最后,启动yarn集群管理节点:
[root@hadoop001 hadoop]# ./sbin/start-yarn.sh
都启动完成后,使用 jps 命令查看:
[root@hadoop001 hadoop]# jps
7328 NodeManager
8336 Jps
2709 NameNode
3084 SecondaryNameNode
2876 DataNode
7181 ResourceManager
可以看到,除了Jps,一共有5个进程,因为这里没有将 nameNode、ResourceManager、SecondaryNameNode分开部署,所以都在 h01这一台机器上,实际生产中,应该是需要分开部署的。
至此,Hadoop 集群已经构建好了。六、网页访问、Hadoop命令
1.浏览器访问本机的9870端口,可以看到Hadoop的文件管理系统:
2.浏览器访问本机的8088端口,可以看到Hadoop中 Yarn的资源调度系统:
3.在 HDFS 中创建 input 文件夹:
4、上传文件
[root@hadoop001 hadoop]# ls
LICENSE.txt NOTICE.txt README.txt bin data etc include lib libexec logs sbin share
[root@hadoop001 hadoop]# ./bin/hadoop fs -put ./README.txt /input