主机名 | IP地址 | 版本 | 备注 |
---|---|---|---|
yun1 | 192.168.43.14 | Hadoop 3.1.3 | 主节点 |
yun2 | 192.168.43.254 | Hadoop 3.1.3 | 数据节点 |
yun3 | 192.168.43.180 | Hadoop 3.1.3 | 数据节点 |
三台主机节点都新增一个Hadoop用户
创建新用户:
sudo useradd -m hadoop -s /bin/bash
设置密码:
sudo passwd hadoop
为 hadoop 用户增加管理员权限,方便部署
sudo adduser hadoop sudo
用 hadoop 用户登录后,我们先更新一下 apt,后续我们使用 apt 安装软件
sudo apt-get update
sudo apt-get install vim
注意:三台主机都需要安装java环境,都需要执行下面操作。
将百度云盘的JDK1.8的安装包jdk-8u162-linux-x64.tar.gz下载到本地windows电脑,上传到Ubuntu的Linux系统中/home/hadoop/Downloads路径下。如果没有Downloads目录,执行mkdir Downloads
创建目录。
在Linux命令行界面中,执行如下命令(注意:当前登录用户名是hadoop):
hadoop@yun1:~$ cd /usr/lib #进入lib目录
hadoop@yun1:/usr/lib$ sudo mkdir jvm #创建jvm文件夹
hadoop@yun1:/usr/lib$ cd #进入hadoop用户的主目录
hadoop@yun1:~$ cd Downloads/ #进入Downloads目录
hadoop@yun1:~/Downloads$ sudo tar -zxvf jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm/
#解压jdk到jvm目录下
到/usr/lib/jvm目录查看一下,是否解压成功。
hadoop@yun1:~/Downloads$ cd
hadoop@yun1:/usr/lib/jvm$ ls
hadoop@yun1:/usr/lib/jvm$ cd
hadoop@yun1:~$ vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${
JAVA_HOME}/jre
export CLASSPATH=.:${
JAVA_HOME}/lib:${
JRE_HOME}/lib
export PATH=${
JAVA_HOME}/bin:$PATH
保存之后退出,继续执行如下命令让.bashrc文件的配置立即生效
hadoop@yun1:~$ source ~/.bashrc
现在,我们可以查看jdk配置是否成功,执行下面命令
hadoop@yun1:~$ java -version
出现下面情况,则配置成功,jdk版本为java version “1.8.0_162”
将百度云盘的Hadoop3.1.3的安装包jdk-8u162-linux-x64.tar.gz下载到本地windows电脑,上传到Ubuntu的Linux系统中/home/hadoop/Downloads路径下。
我们选择将 Hadoop 安装至 /usr/local/install中:
hadoop@yun1:~$ cd /usr/local/
hadoop@yun1:/usr/local$ sudo mkdir install
hadoop@yun1:sudo tar -zxvf ~/Downloads/hadoop-3.1.3.tar.gz -C /usr/local/install # 解压到/usr/local/install中
hadoop@yun1:cd /usr/local/install #进入该目录
sudo mv ./hadoop-3.1.3/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/install/hadoop
./bin/hadoop version
出现下面情况,则配置成功,hadoop的版本号为: Hadoop 3.1.3
由于是配置Hadoop的集群分布式,所以三台主机,都需要更改成【桥接模式】
网络连接方式更改完成以后,可以查看一下机器的IP地址,可以使用ifconfig命令查看。本教程在同一个局域网内部的三台机器的IP地址分别是192.168.43.14和192.168.43.254、192.168.43.180。
hadoop@yun1:~$ sudo vim /etc/hostname
可以将主机名【yun1】更改成你相要更改的主机名,方便区分,最好三台机器都更改(用三台主机执行上诉命令,进行更改)。我这里就不更改了,直接以主机名【yun1】作为主节点,【yun2】【yun3】作为数据节点。
保存之后,重启系统,即可生效
三个节点都需要进行映射关系的设置,设置完映射关系后,三台主机都需要重启
hadoop@yun1:~$ sudo vim /etc/hosts
127.0.0.1 localhost
192.168.43.14 yun1
192.168.43.254 yun2
192.168.43.180 yun3
注意:一般hosts文件中只能有一个127.0.0.1,其对应主机名为localhost,如果有多余127.0.0.1映射,应删除,特别是不能存在“127.0.0.1 Master”这样的映射记录。
修改完成、重启之后,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功。
例如:在主节点yun1处测试ping同yun2和yun3节点
hadoop@yun1:~$ ping yun2 -c 3
hadoop@yun1:~$ ping yun3 -c 3
必须要让yun1节点可以SSH无密码登录到各个yun2、yun3节点上。首先,生成yun1节点的公匙。
hadoop@yun1:~$ cd ~/.ssh
hadoop@yun1:~$ ssh localhost
hadoop@yun1:~$ rm ./id_rsa* # 删除之前生成的公匙(如果已经存在)
hadoop@yun1:~$ ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以
在本机免密登录
hadoop@yun1:~$ cat ./id_rsa.pub >> ./authorized_keys
完成后可以执行命令“ssh yun1”来验证一下,可能会遇到提示信息,只要输入yes即可,测试成功后,请执行“exit”命令返回原来的终端。
接下来,在yun1节点将上公匙传输到yun2节点、yun3节点:
hadoop@yun1:~$ scp ~/.ssh/id_rsa.pub hadoop@yun2:/home/hadoop/
hadoop@yun2:~$ mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
hadoop@yun2:~$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
hadoop@yun2:~$ rm ~/id_rsa.pub # 用完以后就可以删掉
这样,在yun1节点上就可以无密码SSH登录到yun2节点、yun3节点了,可在yun1节点上执行如下命令进行检验:
hadoop@yun1:~$ ssh yun2
配置PATH变量主要是为了在任意目录中直接使用hadoop、hdfs等命令。这一步是在yun1主节点执行。
vim ~/.bashrc
在该文件中添加下面内容
export PATH=$PATH:/usr/local/install/hadoop/bin:/usr/local/install/hadoop/sbin
保存后执行命令source ~/.bashrc
,使配置生效。
在配置集群/分布式模式时,需要修改“/usr/local/install/hadoop/etc/hadoop/”目录下的配置文件,这里仅设置正常启动所必须的设置项,包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5个文件,更多设置项可查看官方说明。
hadoop@yun1:~$ cd /usr/local/install/hadoop/etc/hadoop/
hadoop@yun1:/usr/local/install/hadoop/etc/hadoop$ vim workers
需要把所有数据节点的主机名写入该文件,每行一个,默认为 localhost(即把本机作为数据节点),所以,在伪分布式配置时,就采用了这种默认的配置,使得节点既作为名称节点也作为数据节点。在进行分布式配置时,可以保留localhost,让yun1节点同时充当名称节点和数据节点,或者也可以删掉localhost这行,让yun1节点仅作为名称节点使用。
本教程让yun1节点仅作为名称节点使用,因此将workers文件中原来的localhost删除,只添加如下内容:
yun2
yun3
把core-site.xml文件修改为如下内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://yun1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/install/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
对于Hadoop的分布式文件系统HDFS而言,一般都是采用冗余存储,冗余因子通常为3,也就是说,一份数据保存三份副本。但是,本教程只有两个yun2节点和yun3作为数据节点,即集群中只有两个数据节点,数据只能保存两份,所以 ,dfs.replication的值还是设置为 2。hdfs-site.xml具体内容如下:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>yun1:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/install/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/install/hadoop/tmp/dfs/data</value>
</property>
</configuration>
“/usr/local/install/hadoop/etc/hadoop”目录下有一个mapred-site.xml.template,需要修改文件名称,把它重命名为mapred-site.xml。如果mapred-site.xml.template不存在,直接是mapred-site.xml文件,则不需要修改。
hadoop@yun1:/usr/local/install/hadoop/etc/hadoop$ mv mapred-site.xml.template mapred-site.xml
然后,把mapred-site.xml文件配置成如下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>yun1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>yun1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/install/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/install/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/install/hadoop</value>
</property>
</configuration>
请把yarn-site.xml文件配置成如下内容:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>yun1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
上述5个文件全部配置完成以后,需要把yun1节点上的“/usr/local/install/hadoop”文件夹复制到yun2节点和yun3节点上。
如果之前已经运行过伪分布式模式,建议在切换到集群模式之前首先删除之前在伪分布式模式下生成的临时文件。具体来说,需要首先在yun1节点上执行如下命令:
hadoop@yun1:~$ cd /usr/local/install/
hadoop@yun1:~$ /usr/local/install$ sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件,如果没有运行过伪分布式,则不需要执行
hadoop@yun1:~$ /usr/local/install$ sudo rm -r ./hadoop/logs/* # 删除日志文件,如果没有运行过伪分布式,则不需要执行
hadoop@yun1:~$ /usr/local/install$ tar -zcf ~/hadoop.yun1.tar.gz ./hadoop # 先压缩再复制
hadoop@yun1:~$ /usr/local/install$ cd ~
hadoop@yun1:~$ scp ./hadoop.yun1.tar.gz yun2:/home/hadoop #yun2节点、yun3节点都要执行
然后在yun2节点、yun3节点上执行如下命令:
hadoop@yun2:~$ sudo rm -r /usr/local/install/hadoop/ # 删掉旧的(如果存在)
hadoop@yun2:~$ sudo tar -zxvf ~/hadoop.yun1.tar.gz -C /usr/local/install/
hadoop@yun2:~$ sudo chown -R hadoop /usr/local/install/hadoop/
首次启动Hadoop集群时,需要先在yun1节点执行名称节点的格式化(只需要执行这一次,后面再启动Hadoop时,不要再次格式化名称节点),命令如下:
hadoop@yun1:~$ hdfs namenode -format
现在就可以启动Hadoop了,启动需要在yun1节点上进行,执行如下命令:
hadoop@yun1:~$ start-dfs.sh
hadoop@yun1:~$ start-yarn.sh
hadoop@yun1:~$ mr-jobhistory-daemon.sh start historyserver
通过命令jps可以查看各个节点所启动的进程。如果已经正确启动,则在yun1节点上可以看到如下内容
在yun3节点可以看到如下节点。
在yun2节点可以看到如下节点。
缺少任一进程都表示出错。
在yun1节点上通过命令“hdfs dfsadmin -report”查看数据节点是否正常启动,如果屏幕信息中的“Live datanodes”不为 0 ,则说明集群启动成功。由于本教程有1个yun2节点和yun3节点充当数据节点,因此,数据节点启动成功以后,会显示如下图所示信息。
在Linux系统的浏览器中输入地址“http://192.168.43.14:9870/”,通过 Web 页面看到查看名称节点和数据节点的状态。(如果Linux系统为自己Windows系统中的虚拟机,可以直接在本地Windows系统查看)。结果如下:
hadoop@yun1:~$ hdfs dfs -mkdir -p /user/hadoop
把“/usr/local/install/hadoop/etc/hadoop”目录中的配置文件作为输入文件复制到input目录中,命令如下:
hadoop@yun1:~$ hdfs dfs -mkdir input
hadoop@yun1:~$ hdfs dfs -put /usr/local/install/hadoop/etc/hadoop/*.xml input
接着就可以运行 MapReduce 作业了,命令如下:
hadoop@yun1:~$ hadoop jar /usr/local/install/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
执行过程可能会有点慢,在执行过程中,可以在Linux系统中打开浏览器,在地址栏输入“http://master:8088/cluster”,通过Web界面查看任务进度,在Web界面点击 “Tracking UI” 这一列的History连接,可以看到任务的运行信息,如下图所示。
注意:在Windows系统的浏览器中,无法查看到进度,因为Windows系统无法辨析yun1节点的IP地址。
执行完毕后的输出结果如下图所示。
最后,关闭Hadoop集群,需要在yun1节点执行如下命令:
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
至此,就顺利完成了Hadoop集群搭建。
---------------------------------------------------------------------提示---------------------------------------------------------------------
如果你在部署过程中,遇到什么问题,可以通过评论区加我微信,我们相互讨论。共同成长!!!
---------------------------------------------------------------------提示---------------------------------------------------------------------
Linux学习笔记(一) – 在虚拟机中安装ubuntu-server-20.04.1版本
Linux学习笔记(二) --Hadoop 3.1.3集群分布式配置
Linux学习笔记(三) --Zookeeper分布式协调服务部署
Linux学习笔记(四) --Hbase集群部署