Hadoop(02) Hadoop-3,网易的朋友给我这份339页的大数据开发面经

66 阅读15分钟

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

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) 伪分布式小节的基础上再做一次修改):

参数说明:

  1. hadoop.tmp.dir:用于指定临时文件的存储路径。它被设置为file:/usr/local/hadoop-3.3.6/tmp,表示临时文件将存储在指定的路径中。
  2. 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>

修改前:

修改后:

参数说明:

  1. dfs.namenode.secondary.http-address:用于配置辅助(Secondary)NameNode 的 HTTP 地址。辅助 NameNode 的 HTTP 地址被设置为 hadoop01:50090,表示辅助 NameNode 可以通过 hadoop01 主机的端口 50090 进行访问
  2. dfs.replication:用于配置文件块的副本数量。副本数量被设置为 1,表示每个文件块只有一个副本。副本数量的设置对数据的冗余和可靠性有影响。
  3. 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 路径下。
  4. 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)中未对该文件作任何修改,所以为空白):

修改后:

参数说明:

  1. mapreduce.framework.name:用于配置 MapReduce 框架的名称。框架名称被设置为 yarn,表示使用 YARN(Yet Another Resource Negotiator)作为 MapReduce 的执行框架。
  2. mapreduce.jobhistory.address:用于配置作业历史服务器(Job History Server)的地址。作业历史服务器的地址被设置为 hadoop01:10020,表示作业历史服务器可以通过 hadoop01 主机的端口 10020 进行访问。
  3. mapreduce.jobhistory.webapp.address:用于配置作业历史服务器的 Web 应用程序地址。作业历史服务器的 Web 应用程序地址被设置为 hadoop01:19888,表示可以通过 hadoop01 主机的端口 19888 访问作业历史服务器的 Web 页面。
  4. yarn.app.mapreduce.am.env:用于配置 MapReduce 应用程序管理器(ApplicationMaster)的环境变量。将 HADOOP_MAPRED_HOME 设置为 /usr/local/hadoop-3.3.6,以指定 MapReduce 应用程序管理器使用的 Hadoop MapReduce 的安装路径。
  5. 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>

修改前:

修改后:

参数说明:

  1. yarn.resourcemanager.hostname:用于配置资源管理器(ResourceManager)的主机名。源管理器的主机名被设置为 hadoop01,表示资源管理器运行在名为 hadoop01 的主机上。
  2. 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主机: 

然后在hadoop02节点上执行如下命令: 

cd ~
sudo rm -r /usr/local/hadoop-3.3.6   # 删掉旧的(如果存在)
sudo tar -zvxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop-3.3.6   # 修改目录和其子目录的所有者权限

同样,如果有其他Slave节点,也要执行将hadoop.master.tar.gz传输到Slave节点以及在Slave节点解压文件的操作。

启动hadoop集群

首次启动Hadoop集群时,需要先在Master节点(hadoop01)执行名称节点的格式化(只需要执行这一次,后面再启动Hadoop时,不要再次格式化名称节点),命令如下:

cd /usr/local/hadoop-3.3.6
./bin/hdfs namenode -format

现在就可以启动Hadoop了,启动需要在Master节点(hadoop01)上进行,执行如下命令:

cd /usr/local/hadoop-3.3.6
./sbin/start-dfs.sh
./sbin/start-yarn.sh
./sbin/mr-jobhistory-daemon.sh start historyserver

通过命令jps可以查看各个节点所启动的进程。

如果已经正确启动,则在Master节点上可以看到NameNode、ResourceManager、SecondaryNameNode和JobHistoryServer进程,如图所示。

在Slave节点可以看到DataNode和NodeManager进程,如图所示。 

缺少任一进程都表示出错。

另外还需要在Master节点上通过“”查看数据节点是否正常启动: 

cd /usr/local/hadoop-3.3.6
./bin/hdfs dfsadmin -report

如果屏幕信息中的“Live datanodes”不为 0 ,则说明集群启动成功。由于本教程只有1个Slave节点充当数据节点,因此,数据节点启动成功以后,会显示如图所示信息。 

注意:如果前面都没有问题但是在这里开始出错了。无法正常显示datanode节点。或者如果刚开始在slave上可以看到datanode,但隔了一会儿看不见,是因为重复连接无法就自动关闭了。

解决办法,详情见此处。 

也可以在系统的浏览器中输入地址"master节点的IP地址:9870",通过Web 页面看到查看名称节点和数据节点的状态(如图所示)。如果不成功,可以通过启动日志排查原因。

这里再次强调,伪分布式模式和分布式模式切换时需要注意以下事项:
从分布式切换到伪分布式时,不要忘记修改workers配置文件;
在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以,如果集群以前能启动,但后来启动不了,特别是数据节点无法启动,不妨试着删除所有节点(包括Slave节点)上的“/usr/local/hadoop-3.3.6/tmp”文件夹,再重新执行一次“hdfs namenode -format”,再次启动即可。

六、执行分布式实例

执行分布式实例过程与伪分布式模式一样,首先创建HDFS上的用户目录,可以在Master节点(hadoop01)上执行如下命令:

echo $PATH | tr ':' '\n'   #  查看PATH变量是否配置成功
hdfs dfs -mkdir -p /user/hadoop   #  此前已经配置了PATH环境变量,所以不用路径全称
hdfs dfs -ls /user       #  查看是否创建成功

 然后,在HDFS中创建一个input目录,并把“/usr/local/hadoop-3.3.6/etc/hadoop”目录中的配置文件作为输入文件复制到input目录中,命令如下:

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop-3.3.6/etc/hadoop/*.xml input

接着就可以运行 MapReduce 作业了,命令如下:

hadoop jar /usr/local/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'

 运行时的输出信息与伪分布式类似,会显示MapReduce作业的进度,如图所示。

执行过程可能会有点慢,但是,如果迟迟没有进度,比如5分钟都没看到进度变化,那么不妨重启Hadoop再次测试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改YARN的内存配置来解决。
在执行过程中,可以在系统中打开浏览器,在地址栏输入“http://192.168.30.134:8088/cluster”, 通过Web界面查看任务进度,在Web界面点击 "Tracking UI" 这一列的“ApplicationMaster”链接(如图所示),可以看到任务的运行信息,如图所示。

执行完毕后的输出结果如图所示。

hdfs dfs -cat output/*

最后,关闭Hadoop集群,需要在Master节点(hadoop01)执行如下命令: 

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取