我一共使用了三台ubuntu虚拟机,网络使用的是Nat模式,因为配置中涉及到IP,所以建议使用Nat模式固定的IP。

系统配置

IP分配

主节点:192.168.75.128
从节点1:192.168.75.129
从节点2:192.168.75.130

主机名设置

主节点为master,从节点分别为slave1和slave2
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

配置hosts

将各节点的IP与主机名对应,IP与主机名中间相隔一个TAB,一定要注释上面的127.0.0.1(三个节点都要配置),否则后面启动集群会检测不到节点
在这里插入图片描述

重启网络

sudo /etc/init.d/networking restart

检查网络

看相互能否ping通,ping通则配置成功
在这里插入图片描述

在这里插入图片描述

创建hadoop账户

在主节点上创建hadoop账户

sudo adduser hadoop

把hadoop用户加入到hadoop用户组

sudo usermod -a -G hadoop hadoop

查看结果

cat /etc/group |grep hadoop

在这里插入图片描述


把hadoop用户赋予root权限

sudo vim /etc/sudoers

在root下添加下面这段

hadoop ALL=(root) NOPASSWD:ALL

在这里插入图片描述
然后用同样方法在slave1和slave2上创建hadoop用户

SSH免密登录

首先在master上创建ssh-key

ssh-keygen -t rsa -P ""

一直回车
然后在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub


在slave1和slave2上以同样的方式生成
然后分别用(这里的目录无所谓,传到哪里都行,就是将从节点的id_rsa传到主节点上)

scp id_rsa.pub hadoop@192.168.75.128:/home/zf/slave1_id_rsa.pub
scp id_rsa.pub hadoop@192.168.75.128:/home/zf/slave2_id_rsa.pub

然后将slave1和slave2传过来的id_rsa文件移动到~/.ssh/目录下

sudo mv /home/zf/slave1_id_rsa.pub ~/.ssh/slave1_id_rsa.pub
sudo mv /home/zf/slave2_id_rsa.pub ~/.ssh/slave2_id_rsa.pub

在这里插入图片描述


将id_rsa.pub、slave1_id_rsa.pub、slave2_id_rsa.pub追加到authorized_keys授权文件中

cat *.pub >>authorized_keys

这个时候已经可以免密登录本机了

ssh localhost

在这里插入图片描述


将master上的公钥文件传给slave1和slave2

scp authorized_keys hadoop@192.168.0.110:/home/zf
scp authorized_keys hadoop@192.168.0.111:/home/zf

然后将公钥移动到~/.ssh/目录下

cp /home/zf/authorized_keys ~/.ssh/authorized_keys

修改公钥文件的权限

sudo chmod 664 authorized_keys

然后测试三个虚拟机是否可以免密登录
master连接slave1和slave2
在这里插入图片描述
slave1连接master和slave2

在这里插入图片描述

slave2连接master和slave1
在这里插入图片描述
都能相互免密登录则配置成功

安装Hdoop

见我之前搭建伪分布式的博文:ubuntu-18.04.4 Hadoop伪分布式环境安装
只有core-site.xml,hdfs-site.xml,yarn-site.xml,slaves这四个文件需要重新配置其余对于安装和环境的配置都相同(配置中的路径和伪分布式博文中的路径相同,建议先按照那个配,然后将这几个配置文件改一下就可以了)


进入Hadoop的安装目录,下面操作的路径均是在此目录的基础上的相对路径

cd /usr/local/hadoop

配置core-site.xml

vim etc/hadoop/core-site.xml

将configuration替换为下面内容

vim etc/hadoop/core-site.xml
<configuration>
        					<property>
               						<name>hadoop.tmp.dir</name>
               						<value>file:/usr/local/hadoop/tmp</value>
                					<description>Abase for other temporary directories.</description>
                			</property>
        			  		<property>
                					<name>fs.defaultFS</name>
                				 	<value>hdfs://master:9000</value>
                			</property>
</configuration>

在这里插入图片描述


配置hdfs-site.xml

vim etc/hadoop/hdfs-site.xml

由于有两个从主机slave1、slave2,所以dfs.replication设置为2

<configuration>

        					<property>
                				 	<name>dfs.replication</name>
                					<value>2</value>
                			</property>
       						<property>
               						<name>dfs.namenode.name.dir</name>
               						<value>file:/usr/local/hadoop/tmp/dfs/name</value>
                			</property>
       				  		<property>
                					<name>dfs.datanode.data.dir</name>
               						<value>file:/usr/local/hadoop/tmp/dfs/data</value>
               				</property>
</configuration>

在这里插入图片描述


配置yarn-site.xml

vim  etc/hadoop/yarn-site.xml
<configuration>
  
<!-- Site specific YARN configuration properties -->

        			<property>| 
                			<name>yarn.nodemanager.aux-services</name>| 
                			<value>mapreduce_shuffle</value>| 
                	  </property>| 
       		 		  <property>| 
               				<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>| 
                			<value>org.apache.hadoop.mapred.ShuffleHandler</value>| 
               		  </property>| 
        			  <property>| 
                			<name>yarn.resourcemanager.address</name>| 
               				<value>master:8032</value>| 
               		 </property>| 
        			 <property>| 
                			<name>yarn.resourcemanager.scheduler.address</name>| 
                			<value>master:8030</value>| 
                	 </property>| 
        			 <property>| 
                			<name>yarn.resourcemanager.resource-tracker.address</name>| 
               				<value>master:8031</value>| 
                	 </property>
               		 <property>
                        	<name>yarn.resourcemanager.admin.address</name>
                     	   	<value>master:18141</value>
               		 </property>
               		 <property>
                        	<name>yarn.resourcemanager.webapp.address</name>
                       		<value>master:18088</value>
               		 </property>
</configuration>

在这里插入图片描述


配置slave

vim etc/hadoop/slaves

加上两个从节点的主机名即可

slave1
slave2

在这里插入图片描述


这个时候master的hadoop已经完全配置好了
接下来将master的hadoop传到slave1和slave2

scp -r /usr/local/hadoop hadoop@192.168.75.129:/home/zf
scp -r /usr/local/hadoop hadoop@192.168.75.130:/home/zf

然后在slave1和slave2中将hadoop移到/usr/local下

mv /home/zf/hadoop /usr/local/

启动Hadoop

在master节点上执行(只在master上执行)

hdfs namenode -format

运行启动脚本

start-all.sh

在这里插入图片描述
master进程
在这里插入图片描述
slave1进程
在这里插入图片描述

slave2进程
在这里插入图片描述
和上图一样则启动成功,如果从节点的DataNode未启动看这篇博文:解决Hadoop中多次格式化导致DataNode无法启动的问题


通过主节点IP+50070端口访问下面界面
可以看到有两个Live Nodes
在这里插入图片描述
通过主节点IP+18088端口进入下面界面
可以看到slave1和slave2的详细信息
在这里插入图片描述

用自带的样例测试hadoop集群

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 10 10

此命令是用来求圆周率,pi是类名,第一个10表示Map次数,第二个10表示随机生成点的次数
在这里插入图片描述
在这里插入图片描述
正常运行,Hadoop完全分布式搭建成功

通过eclipse编写Hadoop代码

请看博文:eclipse连接Hadoop远程提交代码

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐