- Ubuntu Server安装
- 拉取Ubuntu镜像
- 创建容器
- 换源
- 安装ssh
- 安装jdk
- 安装Hadoop
- 1、在hadoop官网下载好对应版本的包并解压,本例使用2.10.1版本
- 2、添加环境变量,这样使用hadoop命令时就不用再跑到对应命令文件夹了
- 3、保存当前的镜像环境
- 创建集群结点容器
- 1、创建指定数目结点(eg. 3)
- 2、修改配置文件
- 群起集群
- 1、配置集群ssh
- 2、修改slaves文件
- 3、将之前在node2中修改的hadoop文件分发到其他结点中
- 4、群起集群
- (1)启动hdfs
- (2)启动yarn
- 测试
- 注意事项
- 参考
在Ubuntu官网中下载Ubuntu Server 20.4.3 LTS版本,并在VMWare虚拟机中(其他虚拟机软件皆可)安装好。
由于Ubuntu Server在安装的过程中集成了多种预装软件可以勾选,大家在安装的时候直接将Docker勾选上就可以了,可以根据需要进行其他产品的安装。
其余的步骤可以自行搜索Ubuntu安装的教程进行安装,安装好以后开启虚拟机即可。
我们需要将Hadoop部署在Ubuntu虚拟机中,但并不是在我们的宿主机当中。事实上,简单地开启多个虚拟机(3个以上)就满足了搭建Hadoop集群的条件,简单粗暴,但对内存的消耗巨大,我的16G内存机子也会瞬间飙到80%的内存占用率。因此我们需要在虚拟机中部署docker,将集群节点以容器的形式部署,这样可以减轻对内存的消耗。Docker Hub上面发布了数千种常用的镜像,包含Ubuntu。因此我们仅需要简单地执行一条指令即可拉取Ubuntu镜像至我们的虚拟机中。
sudo docker pull ubuntu-latest
拉取成功后可进行镜像查看:
sudo docker image创建容器
拉取好镜像之后,我们就可以创建容器了:
sudo docker run -it -d --name ubuntu1 ubuntu
ubuntu1可以自行修改为其他名字
接下来的操作均在Ubuntu1中完成
换源将Ubuntu默认的Debian源换成国内的阿里源,提高下载速度:
apt-install vim //安装vim cp /etc/apt/sources.list /etc/apt/sources_back.list //备份源文件 vim /etc/apt/sources.list //编辑源文件
将源文件中的内容全部删除,去阿里镜像站: 找到ubuntu 20.04(focal) 的源地址:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
将上段代码复制到sources.list中并保存。
更新源
apt-get update apt-get upgrade安装ssh
ssh用来进行多节点通信,可以使用公钥私钥来进行数据传输的加密解密。并且我们后期需要进行免密访问节点也需要用到。
apt install ssh apt install net-tools//安装网络工具 apt install rsync//集群脚本分发命令 //将ssh启动写入bashrc中,可以随着镜像开启而开启 vim ~/.bashrc //在最后加入该代码 /etc/init.d/ssh start //使bashrc生效 source ~/.bashrc安装jdk
apt-get install default-jdk
//添加jdk环境变量
update-alternatives --config java//查看jdk路径,复制/bin/java之前的路径
vim ./~bashrc//编辑环境变量
//在底部添加
export JAVA_HOME=jdk路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
source ~/.bashrc //使bashrc文件生效
安装Hadoop
1、在hadoop官网下载好对应版本的包并解压,本例使用2.10.1版本
wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz mv hadoop-2.10.1.tar.gz /usr/local tar -zxvf hadoop-2.10.1.tar.gz2、添加环境变量,这样使用hadoop命令时就不用再跑到对应命令文件夹了
vim ~/.bashrc
//在底部添加
export HADOOP_HOME=$hadoop路径
export PATH=.:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
3、保存当前的镜像环境
docker login docker commit ubuntu1 ubuntu/jdk_ssh_hadoop创建集群结点容器 1、创建指定数目结点(eg. 3)
//将创建命令写入脚本,减少重复写入量 mkdir hadoop_bash cd hadoop_bash vim create_hadoopNodes.sh
#!/bin/bash
#创建多节点
numNodes=$1
image=ubuntu/jdk_ssh_hadoop
for((node=1; node <=$numNodes; node++))
do
docker run -it -d -h node$node --name node$node $image
done
//增加执行权限 chmod +x ./create_hadoopNodes.sh //执行 ./create_hadoopNodes.sh 3 //查看运行容器状态 docker ps -l2、修改配置文件
完全分布式配置hadoop需要修改一些配置文件。为了减少单个结点的负载压力,我们将namenode、secondary namenode还有resourcemanager分别配置到三个结点上。
//进入node1结点中 docker exec -it node1 bash //修改hadoop对应配置文件,使其满足上图配置 cd /usr/local/hadoop-2.10.1/etc/hadoop //修改core-site.xml默认配置 vim core-site.xml群起集群 1、配置集群ssh//修改hdfs默认设置 vim hadoop-env.sh //将默认的Java路径改成自己的 export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ vim hdfs-site.xml hadoop.tmp.dir file:/usr/local/hadoop-2.10.1/tmp Abase for other temporary directories. fs.defaultFS hdfs://node1:9000 //修改mapred-site.xml.template和mapred-env.sh cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml dfs.namenode.name.dir file:/usr/local/hadoop-2.10.1/namenode_dir dfs.datanode.data.dir file:/usr/local/hadoop-2.10.1/datanode_dir dfs.replication 3 dfs.namenode.secondary.http-address node3:50090 vim mapred-env.sh export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ //修改yarn-site.xml,设置ResourceManager的位置 vim yarn-site.xml mapreduce.framework.name yarn //修改yarn-env.sh,将java路径修改成自己的 # some Java parameters export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname node2
在每个结点修改hosts文件,将node2和node3的ip地址添加进去
注:可以在xshell中多开几个窗口进去获取其余两个结点的ip地址,也可以直接将node1的最后一位地址加1即可
172.17.0.2 node1 172.17.0.3 node2 172.17.0.4 node3
在node1中生成公钥私钥,以便于后期将公钥写入到其他节点当中
ssh-keygen -t rsa//生成公钥私钥 ssh-copy-id node2 ssh-copy-id node3
ssh免密登陆测试
ssh node2 ssh node3
能免密登陆访问即可
2、修改slaves文件vim /usr/local/hadoop-2.10.1/etc/hadoop/slaves //删除其中的localhost,加入node1 node2 node3 node1 node2 node3
注:这三行必须这样写,不能留任何其他字符如空格等。
3、将之前在node2中修改的hadoop文件分发到其他结点中rsync -rvl /usr/local/hadoop-2.10.1 root@node2:/usr/local/hadoop-2.10.1 rsync -rvl /usr/local/hadoop-2.10.1 root@node3:/usr/local/hadoop-2.10.14、群起集群
在node1中格式化namenode结点
hdfs namenode -format(1)启动hdfs
start-dfs.sh
在不同的node中使用jps命令查看进程开启情况
启动yarn的时候要在配置resourcemanager的结点上启动,否则会报错
ssh node2 start-yarn.sh
查看各结点进程
总之能够与之前我们设定的分配设置对应就行。至此,群起集群成功
跑一下官方经典的wordcount
1、在hdfs中创建一个输入目录input
hdfs dfs -mkdir /input
2、在本地创建一个输入目录input
mkdir input //在input中创建两个文件,随便写一些单词和数字 cd input vim test1 vim test2 //将本地input目录上传至hdfs input目录中 cd .. hdfs dfs -put input /input
3、运行官方实例
cd /usr/local/hadoop-2.10.1 hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.10.1-sources.jar org.apache.hadoop.examples.WordCount /input/input /output //output目录不能事先存在
4、查看结果
hdfs dfs -cat /output/part-r-00000
Bingo!
注意事项1、在其中一个节点上修改完文件后一定要scp或rsync到其他节点上,不然启动会一直报错
2、slaves文件要写上全部的节点,包括主节点,不然主节点会缺少datanode进程
3、namenode进程是用hdfs namenode -format初始化出来的,datanode进程是脚本读取配置文件生成出来的,在出错后重新启动集群前务必删除之前错误启动时的所有文件,包括namenode_dir, datanode_dir以及日志文件logs。每个节点都是。
4、尽量不要用start-all.sh和stop-all.sh命令启动和关闭集群,使用start-dfs和start-yarn的脚本来开启和停止集群。
5、namenode、secondary namenode、resourcemanager这三个进程不要部署到同一个节点上,会占用多余内存和硬盘资源,将其分配在三个节点上,但要注意resourcemanager启动时要在其配置文件中部署的那个节点上启动,不然会报错。
参考ubuntu虚拟机+docker+hadoop完全分布式环境搭建.
尚硅谷大数据教程 hadoop2.x框架入门
欢迎批评与指正!



