lsb_release -a
本文适用环境如下
发行版版本:Ubuntu 18.04 LTS
内核版本号:5.3.*-*-generic
更新系统
sudo apt update
sudo apt upgrade
下载curl
sudo apt install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
确认docker的安装
sudo docker version
当前最新版本为2.4.1
可以先行访问 https://github.com/docker/compose/releases/ 确认版本号
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
推荐在GitHub上下载最新版。之后放到/usr/local/bin/
下即可
(重要)添加国内的docker镜像CDN
sudo vi /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"https://kfp63jaj.mirror.aliyuncs.com"]
}
重载docker让CDN配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker run hello-world
查看hello-world镜像的运行记录
sudo docker ps -a
抓取ubuntu 18.04的镜像作为基础搭建hadoop环境
sudo docker pull ubuntu:18.04
查看镜像是否抓取成功
sudo docker images
使用该ubuntu镜像启动
将
sudo docker run -it -v
e.g.
sudo docker run -it -v ~/hadoop/build:/home/hadoop/build ubuntu
容器启动后,会自动进入容器的控制台
在容器的控制台安装所需软件
apt-get update
apt-get upgrade
需要安装net-tools(网络管理工具)、vim(命令行文本编辑器)和ssh(远程登录协议)
apt-get install net-tools vim openssh-server
让ssh服务器自动启动
vi ~/.bashrc
在文件的最末尾按O
进入编辑模式,加上:
/etc/init.d/ssh start
按ESC返回命令模式,输入:wq
保存并退出。
让修改即刻生效
source ~/.bashrc
配置ssh的无密码访问
ssh-keygen -t rsa
连续按回车
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
(注意)hadoop 3.x目前仅支持jdk 7, 8
apt-get install openjdk-8-jdk
在环境变量中引用jdk,编辑bash命令行配置文件
vi ~/.bashrc
在文件的最末尾加上
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin
让jdk配置即刻生效
source ~/.bashrc
测试jdk正常运作
java -version
(可选)登录docker,需要事先在docker网站上注册账号
好处是可以将自己做好的镜像提交到网上
sudo docker login
查询CONTAINER ID
sudo docker ps
将当前容器保存为镜像
sudo docker commit
在宿主控制台上下载hadoop二进制压缩包
本文使用的hadoop版本为3.2.3
。目前最新为3.3.0
其他版本请在下列网站下载。
https://hadoop.apache.org/releases.html
cd /
wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz
在容器控制台上解压hadoop
cd /
tar -zxvf hadoop-3.2.3.tar.gz -C /usr/local
安装完成了,查看hadoop版本
cd /usr/local/hadoop-3.2.3
./bin/hadoop version
vi etc/hadoop/hadoop-env.sh
查找到被注释掉的JAVA_HOME配置位置,更改为刚才设定的jdk位置
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
配置core-site.xml文件
vi etc/hadoop/core-site.xml
加入
hadoop.tmp.dir
file:/usr/local/hadoop-3.2.3/tmp
Abase for other temporary directories.
fs.defaultFS
hdfs://master:9000
配置hdfs-site.xml文件
vi etc/hadoop/hdfs-site.xml
、
加入
dfs.namenode.name.dir
file:/usr/local/hadoop-3.2.3/namenode_dir
dfs.datanode.data.dir
file:/usr/local/hadoop-3.2.3/datanode_dir
dfs.replication
3
该配置文件的定义:
https://hadoop.apache.org/docs/r
vi etc/hadoop/mapred-site.xml
配置mapred-site.xml文件
加入
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<! -- 设定HADOOP的位置给yarn和mapreduce程序 -->
<property>
<name>yarn.app.mapreduce.am.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
<property>
<name>mapreduce.map.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
<property>
<name>mapreduce.reduce.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
configuration>
配置yarn-site.xml文件
vi etc/hadoop/yarn-site.xml
加入
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<! -- 设定资源管理服务器的host名称,这个名称(master)将在下个小节中设定
>
<name>yarn.resourcemanager.hostnamename>
<value>mastervalue>
property>
configuration>
配置start-dfs.sh与stop-dfs.sh文件
vi sbin/start-dfs.sh
和
vi sbin/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文件
vi sbin/start-yarn.sh
和
vi sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
配置完成,保存镜像。
docker ps
docker commit
打开三个宿主控制台,启动一主两从三个容器
master
打开端口映射:8088 => 8088
sudo docker run -p 8088:8088 -it -h master --name master
worker01
sudo docker run -it -h worker01 --name worker01 0dfe14f0dea7
worker02
sudo docker run -it -h worker02 --name worker02 0dfe14f0dea7
分别打开三个容器的/etc/hosts,将彼此的ip地址与主机名的映射信息补全(三个容器均需要如此配置)
vi /etc/hosts
也可以使用以下命令查询ip
ifconfig
添加信息(每次容器启动该文件都需要调整)
master
worker01
worker02
检查配置是否有效
ssh master
ssh worker01
ssh worker02
在master容器上配置worker容器的主机名
cd /usr/local/hadoop-3.2.3
vi etc/hadoop/workers
删除localhost
,加入
worker01
worker02
网络配置完成
在master主机上
cd /usr/local/hadoop-3.2.3
./bin/hdfs namenode -format
./sbin/start-all.sh
在hdfs上建立一个目录存放文件
假设该目录为:/home/hadoop/input
./bin/hdfs dfs -mkdir -p /home/hadoop/input
./bin/hdfs dfs -put ./etc/hadoop/*.xml /home/hadoop/input
查看分发复制是否正常
./bin/hdfs dfs -ls /home/hadoop/input
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /home/hadoop/input output 'dfs[a-z.]+'
运行结束后,查看输出结果
./bin/hdfs dfs -cat output/*
关闭容器前,没有执行stop-all.sh命令会导致Name Node进入安全模式。退出安全模式命令如下
./bin/hadoop dfsadmin -safemode leave
sudo docker container prune
ssh服务器没有启动,使用下面的命令启动ssh服务器
/etc/init.d/ssh start