网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
然后,使用ifconfig命令获取每台虚拟机的IP地址,具体命令如下:
sudo apt-get update
sudo apt-get install net-tools
ifconfig
如下图是slave01的IP地址
然后,在hadoop01中(即master节点),执行如下命令打开并修改Master节点中的“/etc/hosts”文件:
vim /etc/hosts
可以在master节点的hosts文件中增加如下两条IP和主机名映射关系,同时将debian修改成新的主机名:
需要注意的是,一般hosts文件中只能有一个127.0.0.1,其对应主机名为localhost,如果有多余127.0.0.1映射,应删除,**特别是不能存在“127.0.0.1 hadoop01”也不能出现“127.0.1.1 hadoop01”这样的映射记录,否则会出现错误,导致datanode无法和namenode连接,详情请看此处。(此处因为在第一次写文章时没有注释掉,所有后面启动集群后会有报错,建议注释掉“127.0.1.1 hadoop01 这类映射记录”)**修改后需要重启Linux系统。
上面完成了Master节点(hadoop01)的配置,接下来要继续完成对其他Slave节点的配置修改。本教程只有一个Slave节点,主机名为hadoop02。请参照上面的方法,把Slave节点上的“/etc/hostname”文件中的主机名修改为“hadoop02”,同时,修改“/etc/hosts”的内容,在hosts文件中增加如下两条IP和主机名映射关系:
修改完成以后,请重新启动Slave节点的Linux系统。
这样就完成了Master节点和Slave节点的配置,然后,需要在各个节点上都执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功:
ping 主机名 -c 3 #ping 3次后自动停止
在master节点上:
在salve01节点上:
四、hadoop02 SSH无密码登录节点设置
必须要让Master节点可以SSH无密码登录到各个Slave节点上。
首先需要在hadoop02上执行如下命令安装SSH服务端(如果此前已经安装就不用重复安装):
sudo apt-get update
sudo apt-get install openssh-server
然后,需要遭hadoop01上生成Master节点(hadoop01)的公匙,如果之前已经生成过公钥(在安装伪分布式模式的Hadoop时(第二节)生成过一次公钥),必须要删除原来生成的公钥,重新生成一次,因为前面我们对主机名进行了修改。在Master节点执行如下命令:
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa* # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以
为了让Master节点能够无密码SSH登录本机,需要在Master节点上执行如下命令:
cat ./id_rsa.pub >> ./authorized_keys
完成后可以执行命令“ssh hadoop01”来验证一下,可能会遇到提示信息,只要输入yes即可,测试成功后,请执行“exit”命令返回原来的终端。
接下来,在Master节点(hadoop01)将上公匙传输到Slave节点(hadoop02):
scp ~/.ssh/id_rsa.pub hadoop@hadoop02:/home/hadoop/
上面的命令中,scp是secure copy的简写,用于在 Linux下进行远程拷贝文件,类似于cp命令,不过,cp只能在本机中拷贝。执行scp时会要求输入hadoop02上hadoop用户的密码,输入完成后会提示传输完毕,如图所示。传输完成以后,在hadoop02上的“/home/hadoop”目录下就可以看到文件id_rsa.pub了。
接着在Slave节点(hadoop02)上执行如下命令将SSH公匙加入授权:
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完以后就可以删掉
如果有其他Slave节点,也要执行将Master公匙传输到Slave节点以及在Slave节点上加入授权这两步操作。
这样,在Master节点上就可以无密码SSH登录到各个Slave节点了,可在Master节点(hadoop01)上执行如下命令进行检验:
cd ~
ssh hadoop02
五、配置集群/分布式环境
在配置集群/分布式模式时,需要修改“/usr/local/hadoop-3.3.6/etc/hadoop”目录下的配置文件,这里仅设置正常启动所必须的设置项,包括workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5个文件,更多设置项可查看官方说明。
切换到目录 /usr/local/hadoop-3.3.6/etc/hadoop/
5.1 修改文件workers
workers
文件是用于指定作为DataNode的主机列表的文件。每行包含一个主机名或IP地址,表示要作为DataNode的机器。
需要把所有数据节点的主机名写入该文件,每行一个,默认为 localhost(即把本机作为数据节点),所以,在伪分布式配置时,就采用了这种默认的配置,使得节点既作为名称节点也作为数据节点。
在进行分布式配置时,可以保留localhost,让Master节点同时充当名称节点和数据节点,或者也可以删掉localhost这行,让Master节点仅作为名称节点使用。
本教程让Master节点仅作为名称节点使用,因此将hadoop01中的workers文件中原来的localhost删除,只添加如下一行内容:
hadoop02
修改前:
修改后:
参数说明:
workers
文件中只包含了hadoop02
,而没有其他主机,意味着只有hadoop02
被配置为运行DataNode角色。这表示hadoop02
主机将作为唯一的DataNode节点参与Hadoop集群。
其他主机,如hadoop01
,可能被配置为单独的NameNode节点、ResourceManager节点或其他角色,而不是DataNode。
这种配置可以是为了满足特定需求,例如将数据存储在独立的节点上,或者根据集群规模和资源分配将DataNode角色限制在特定的主机上。
5.2 修改core-site.xml文件
hadoop01中的“/usr/local/hadoop-3.3.6/etc/hadoop”目录下有一个core-site.xml,把hadoop01中的core-site.xml文件修改为如下内容:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
</configuration>
修改前(在hadoop(01) 伪分布式小节中已经修改过一次):
修改后(在hadoop(01) 伪分布式小节的基础上再做一次修改):
参数说明:
hadoop.tmp.dir
:用于指定临时文件的存储路径。它被设置为file:/usr/local/hadoop-3.3.6/tmp
,表示临时文件将存储在指定的路径中。fs.defaultFS
:用于指定默认的文件系统和连接的NameNode节点。它被设置为hdfs://hadoop01:9000
,表示Hadoop将使用HDFS作为默认的文件系统,并连接到hadoop01
主机上运行的NameNode节点的RPC地址和端口(9000)。
5.3 修改hdfs-site.xml文件
对于Hadoop的分布式文件系统HDFS而言,一般都是采用冗余存储,冗余因子通常为3,也就是说,一份数据保存三份副本。但是,本教程只有一个Slave节点(即hadoop02)作为数据节点,即集群中只有一个数据节点,数据只能保存一份,所以 ,dfs.replication的值还是设置为 1。
hadoop01中的“/usr/local/hadoop-3.3.6/etc/hadoop”目录下有一个hdfs-site.xml,把hadoop01中的hdfs-site.xml文件修改为如下内容:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp/dfs/data</value>
</property>
</configuration>
修改前:
修改后:
参数说明:
dfs.namenode.secondary.http-address
:用于配置辅助(Secondary)NameNode 的 HTTP 地址。辅助 NameNode 的 HTTP 地址被设置为hadoop01:50090
,表示辅助 NameNode 可以通过hadoop01
主机的端口 50090 进行访问。dfs.replication
:用于配置文件块的副本数量。副本数量被设置为 1,表示每个文件块只有一个副本。副本数量的设置对数据的冗余和可靠性有影响。dfs.namenode.name.dir
:用于配置主(Primary)NameNode 的名称目录路径。名称目录路径被设置为file:/usr/local/hadoop-3.3.6/tmp/dfs/name
,表示主 NameNode 的名称数据将存储在本地文件系统的/usr/local/hadoop-3.3.6/tmp/dfs/name
路径下。dfs.datanode.data.dir
:用于配置数据节点(Datanode)的数据目录路径。数据目录路径被设置为file:/usr/local/hadoop-3.3.6/tmp/dfs/data
,表示数据节点的数据将存储在本地文件系统的/usr/local/hadoop-3.3.6/tmp/dfs/data
路径下。
注意:
如果Hadoop集群中的hadoop01
主机仅用作NameNode,而不是同时兼具DataNode角色,那么确实不需要在hdfs-site.xml
配置文件中包含dfs.namenode.rpc-address
配置项。
dfs.namenode.rpc-address
配置项用于指定NameNode的RPC地址和端口,用于与其他DataNode节点进行通信。在纯粹的NameNode节点上,不需要与其他DataNode节点进行通信,因此可以省略这个配置项。
在这种情况下,只需确保dfs.namenode.secondary.http-address
配置项正确设置为Secondary NameNode的HTTP地址和端口,并且dfs.namenode.name.dir
配置项指定了正确的NameNode名称目录即可。
请记住,这仅适用于将hadoop01
主机配置为纯粹的NameNode节点的情况。如果将来决定将这个主机扩展为兼具DataNode角色,那么您将需要添加dfs.namenode.rpc-address
配置项以供其他节点与之通信。如下图所示:
5.4 修改mapred-site.xml文件
hadoop01中的“/usr/local/hadoop-3.3.6/etc/hadoop”目录下有一个mapred-site.xml,把mapred-site.xml文件配置成如下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value>
</property>
</configuration>
修改前(注:hadoop(01)中未对该文件作任何修改,所以为空白):
修改后:
参数说明:
mapreduce.framework.name
:用于配置 MapReduce 框架的名称。框架名称被设置为yarn
,表示使用 YARN(Yet Another Resource Negotiator)作为 MapReduce 的执行框架。mapreduce.jobhistory.address
:用于配置作业历史服务器(Job History Server)的地址。作业历史服务器的地址被设置为hadoop01:10020
,表示作业历史服务器可以通过hadoop01
主机的端口 10020 进行访问。mapreduce.jobhistory.webapp.address
:用于配置作业历史服务器的 Web 应用程序地址。作业历史服务器的 Web 应用程序地址被设置为hadoop01:19888
,表示可以通过hadoop01
主机的端口 19888 访问作业历史服务器的 Web 页面。yarn.app.mapreduce.am.env
:用于配置 MapReduce 应用程序管理器(ApplicationMaster)的环境变量。将HADOOP_MAPRED_HOME
设置为/usr/local/hadoop-3.3.6
,以指定 MapReduce 应用程序管理器使用的 Hadoop MapReduce 的安装路径。mapreduce.map.env
和mapreduce.reduce.env
:用于配置 Map 和 Reduce 任务的环境变量。都将HADOOP_MAPRED_HOME
设置为/usr/local/hadoop-3.3.6
,以指定 Map 和 Reduce 任务使用的 Hadoop MapReduce 的安装路径。
5.5 修改文件 yarn-site.xml
hadoop01中的“/usr/local/hadoop-3.3.6/etc/hadoop”目录下有一个yarn-site.xml,把hadoop01中的yarn-site.xml文件配置成如下内容:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改前:
修改后:
参数说明:
yarn.resourcemanager.hostname
:用于配置资源管理器(ResourceManager)的主机名。源管理器的主机名被设置为hadoop01
,表示资源管理器运行在名为hadoop01
的主机上。yarn.nodemanager.aux-services
:用于配置节点管理器(NodeManager)的辅助服务。辅助服务被设置为mapreduce_shuffle
,表示节点管理器将提供 MapReduce Shuffle 服务。
上述5个文件全部配置完成以后,需要把Master节点上的“/usr/local/hadoop-3.3.6”文件夹复制到各个节点上。如果之前已经运行过伪分布式模式(在hadoop(01)的教程的教程")中已经运行了),建议在切换到集群模式之前首先删除之前在伪分布式模式下生成的临时文件。具体来说,需要首先在Master节点上执行如下命令:
cd /usr/local/hadoop-3.3.6
sudo rm -r ./tmp # 删除 Hadoop 临时文件
sudo rm -r ./logs/* # 删除 hadoop 日志文件
cd /usr/local
tar -zvcf ~/hadoop.master.tar.gz ./hadoop-3.3.6/ # 先压缩再复制,创建一个名为 hadoop.master.tar.gz 的压缩文件,其中包含名为 hadoop-3.3.6 的目录及其内容
cd ~
ls -l # 查看是否压缩成功
scp ./hadoop.master.tar.gz hadoop02:/home/hadoop #将本地的 hadoop.master.tar.gz 压缩文件复制到远程主机 hadoop02 的 /home/hadoop 目录下。
删除前:
删除后:
查看是否压缩成功:
复制到hadoop02主机:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
ec9ffe72c77a207791.png)
复制到hadoop02主机:
[外链图片转存中…(img-wQMBOkP2-1714850707152)]
[外链图片转存中…(img-ySg8iSVx-1714850707152)]
[外链图片转存中…(img-rKVQ1DJY-1714850707153)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新