环境安装 准备虚拟机 使用VMware或hyper-v创建三台虚拟机(系统为Ubuntu18.04)。
设置静态IP、修改主机名和hosts
设置静态IP
修改目录/etc/netplan下的配置文件01-netcfg.yaml(文件名可能不一样)
1 root@Hadoop:~# vim /etc/netplan/01-netcfg.yaml
将dhcp4更改为no,并设置IP地址、网关和DNS服务器,配置如下
1 2 3 4 5 6 7 8 9 10 11 12 13 # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [172.22.160.101/20] #IP地址和掩码 gateway4: 172.22.160.1 #网关 nameservers: #DNS addresses: [114.114.114.114]
另外两台主机的IP分别为:172.22.160.102、172.22.160.103
注意: IP设置成自己的,确保三台主机在同一局域网下,且能够相互ping通
修改主机名
将3台主机名修改成不同的名称,分别为Hadoop101、Hadoop102、Hadoop103,便于区分。
修改hosts文件
添加以下三条记录(IP需要修改成自己的)
1 2 3 172.22.160.101 Hadoop101 172.22.160.102 Hadoop102 172.22.160.103 Hadoop103
配置ssh 安装ssh 检查是否安装了ssh
1 2 3 4 root@Hadoop101:~# ps -e | grep ssh 1048 ? 00:00:00 sshd 1097 ? 00:00:00 sshd 1217 ? 00:00:00 sshd
若没有出现上述信息,则需要安装ssh
1 apt-get install openssh-server
允许root通过ssh登录 修改sshd_config文件
1 hadoop@Hadoop102:~$ sudo vim /etc/ssh/sshd_config
找到PermitRootLogin,修改为如下
1 2 3 4 5 6 # LoginGraceTime 2m # PermitRootLogin prohibit-password PermitRootLogin yes # StrictModes yes # MaxAuthTries 6 # MaxSessions 10
设置免密登录 在主机Hadoop101上生成密钥公钥对
1 root@Hadoop101:~# ssh-keygen -t rsa
将公钥发送到主机Hadoop102和Hadoop103
1 2 root@Hadoop101:~# ssh-copy-id hadoop102 root@Hadoop101:~# ssh-copy-id hadoop103
编写分发脚本 一般情况下,服务器的数量比较多,在每台服务器上分别配置Hadoop不太现实,rsync可以将文件同步到其他服务器,以下脚本可以群发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # !/bin/bash # 1 获取输入参数个数,如果没有参数,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi # 2 获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname # 3 获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir # 4 获取当前用户名称 user=`whoami` # 5 循环,这里host根据自己的节点数和主机名设置 for((host=102; host<104; host++)); do #echo $pdir/$fname $user@hadoop$host:$pdir echo --------------- hadoop$host ---------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
将脚本放在/usr/sbin目录下,并赋予777权限
安装jre和Hadoop 解压server-jre-8u261-linux-x64.tar.gz到/usr/java
1 2 3 root@Hadoop101:~# mkdir /usr/java root@Hadoop101:~# tar -zxvf server-jre-8u261-linux-x64.tar.gz root@Hadoop101:~# mv jdk1.8.0_261/ /usr/java/
解压hadoop-3.2.1.tar.gz到/usr/hadoop
1 2 3 root@Hadoop101:~# mkdir /usr/hadoop root@Hadoop101:~# tar -zxvf hadoop-3.2.1.tar.gz root@Hadoop101:~# mv hadoop-3.2.1 /usr/hadoop/
添加环境变量
添加以下内容:
1 2 3 export JAVA_HOME=/usr/java/jdk1.8.0_261 export HADOOP_HOME=/usr/hadoop/hadoop-3.2.1 export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin
配置Hadoop集群 切换到目录/usr/hadoop/hadoop-3.2.1/etc/hadoop/,修改配置文件
hadoop-env.sh 在该文件中添加JAVA_HOME
1 2 3 # The java implementation to use. By default, this environment # variable is REQUIRED on ALL platforms except OS X! export JAVA_HOME=/usr/java/jdk1.8.0_261
core-site.xml 1 2 3 4 5 6 7 8 9 10 11 <property > <name > fs.defaultFS</name > <value > hdfs://hadoop101:9000</value > </property > <property > <name > hadoop.tmp.dir</name > <value > /usr/hadoop/hadoop-3.2.1/tmp</value > </property >
hdfs-site.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <property > <name > dfs.replication</name > <value > 2</value > </property > <property > <name > dfs.namenode.http-address</name > <value > hadoop101:9870</value > </property > <property > <name > dfs.datanode.data.dir</name > <value > /usr/hadoop/hadoop-3.2.1/hdfs/data</value > </property > <property > <name > dfs.namenode.name.dir</name > <value > /usr/hadoop/hadoop-3.2.1/hdfs/name</value > </property >
yarn-site.xml 1 2 3 4 5 6 7 8 9 10 11 <property > <name > yarn.resourcemanager.hostname</name > <value > hadoop101</value > </property > <property > <name > yarn.nodemanager.aux-services</name > <value > mapreduce_shuffle</value > </property >
mapred-site.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <property > <name > mapreduce.framework.name</name > <value > yarn</value > </property > <property > <name > mapreduce.application.classpath</name > <value > /usr/hadoop/hadoop-3.2.1/etc/hadoop, /usr/hadoop/hadoop-3.2.1/share/hadoop/common/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/common/lib/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/hdfs/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/hdfs/lib/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/mapreduce/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/mapreduce/lib/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/yarn/*, /usr/hadoop/hadoop-3.2.1/share/hadoop/yarn/lib/* </value > </property >
配置workers 配置需要启动datanode节点的主机
1 2 3 hadoop101 hadoop102 hadoop103
分发配置文件 将配置好的文件分发到主机hadoop102和hadoop103上
1 xsync /usr/hadoop/hadoop-3.2.1/etc/hadoop/
启动集群 在/hadoop/sbin路径下,将以下参数添加到start-dfs.sh和stop-dfs.sh的顶部
1 2 3 4 HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
将以下参数添加到start-yarn.sh和stop-yarn.sh的顶部
1 2 3 YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
启动hdfs
1 root@Hadoop101:~# start-dfs.sh