• 02--大数据Hadoop集群实战


    前言:

    前面整理了hadoop概念内容,写了一些概念和本地部署和伪分布式两种,比较偏向概念或实验,今天来整理一下在项目中实际使用的一些知识点。

    1、基础概念

    1.1、完全分布式

    Hadoop是一个开源的分布式存储和计算框架,主要用于处理大规模数据集。完全分布式是指Hadoop集群中的所有节点都担任特定角色,包括数据存储节点(DataNode)、计算节点(TaskTracker)和主控节点(NameNode和JobTracker)。在完全分布式架构中,数据被分散存储在多个数据节点上,同时计算任务也可以分发到不同的计算节点上并行执行,从而实现高性能的数据处理能力。完全分布式架构还具备高可靠性,因为数据会被复制到多个节点上,一旦某个节点发生故障,数据仍然可通过其他节点获取。 Hadoop的完全分布式架构使其成为处理大规模数据的理想选择,能够提供高性能、高可靠性和高扩展性。

    特点:

    1. 高可靠性:数据被复制到多个节点,即使某个节点发生故障,数据仍然可用。
    2. 高扩展性:可以简单地通过增加节点来扩展集群的处理能力。
    3. 并行处理:能够将计算任务分发到多个节点上并行执行,加快数据处理速度。
    4. 分布式存储:数据被分散存储在多个节点上,避免了单点故障。

    大概是下面这个意思:

    可以把Hadoop的完全分布式特点形象地比喻为这座工厂的运作方式。

    在这座工厂中,原材料被分散储存在不同的仓库里。

    生产线上的每台机器都能够独立地进行加工和生产。

    即使某个仓库出现问题或者某台机器需要维修,整个工厂的生产仍然可以继续进行,因为其他仓库和机器仍然可以独立运作。这种分布式的生产方式使得工厂具有高可靠性和高效率,能够应对各种突发情况并保持持续的生产能力。

     1.2、HA高可用

    HA(High Availability,高可用性)是系统能够在不间断地提供服务的情况下,解决硬件故障、软件故障等各种问题,让用户始终能够正常地使用系统。在Hadoop中,HA主要指的是NameNode节点和ResourceManager节点的高可用。

    对于NameNode节点,Hadoop通过运行两个或多个NameNode节点来实现故障转移,保证HDFS的高可用性。常见的实现方式包括Active-Standby模式和Active-Active模式,确保在一个NameNode出现故障时能够无缝切换到其他节点,维持系统连续性和可用性。

    对于ResourceManager节点,在YARN中实现RMHA同样采用Active-Standby模式或Active-Active模式,以确保整个YARN集群在ResourceManager节点发生故障时能够自动切换,并保持应用程序的正常执行和集群资源的有效利用。

    datanamehe和nodemanager本身就是高可用的,使用默认配置即可

    hadoop HA是2.0版本后新添加的特性,在Hadoop 1.x 中,Namenode是集群的单点故障,一旦Namenode出现故障,整个集群将不可用,重启或者开启一个新的Namenode才能够从中恢复。值得一提的是,Secondary Namenode并没有提供故障转移的能力。集群的可用性受到影响表现在:        

    • 当机器发生故障,如断电时,管理员必须重启Namenode才能恢复可用。
    •  在日常的维护升级中,需要停止Namenode,也会导致集群一段时间不可用。

    1.3、NameNode HA实现方法

    1.    元数据管理方式需要改变
    内存中各自保存一份元数据;
    Edits日志只有Active状态的NameNode节点可以做写操作;
    两个NameNode都可以读取Edits;
    共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);


    2.    需要一个状态管理功能模块
    实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split(脑裂)现象的发生。


    3.    必须保证两个NameNode之间能够ssh无密码登录


    4.    隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务


    HDFS-HA自动故障转移工作机制(下面红字更形象一些):
    下面如何配置部署HA自动进行故障转移。自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程,ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper的以下功能:
    1)故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。
    2)现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。
    ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程。


    ZKFC负责:
    1)健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
    2)ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
    3)基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。

    下面是一个形象的解释:

    想象一下,你有一个家庭电器系统,其中有两个主要的电源控制盒,分别是A和B。每个电源控制盒都能够提供电力给整个家庭。但是,你希望始终有一个电源控制盒处于活动状态,以确保家庭电器的连续供电。

    在这个例子中,家庭电器系统的两个电源控制盒就类似于Hadoop集群中的两个NameNode节点,在HA模式下工作。而ZKFC则扮演着一个类似于管理电源切换的角色。

    现在,我们引入ZooKeeper,它就像是一个智能的电源监控器。ZooKeeper负责监视两个电源控制盒的状态,并确保只有一个电源控制盒处于活动状态。

    具体地,ZooKeeper通过与所有电源控制盒进行通信,监控它们的健康状况。如果某个电源控制盒发生故障或无法正常工作,ZooKeeper会接收到相应的消息并发出警报。然后,ZooKeeper会与其他正常工作的电源控制盒协商,并最终选择一个新的活动电源控制盒。

    ZooKeeper使用共享的存储来存储集群中的状态信息,类似于记录电源控制盒的状态和切换信息的日志。这样,当电源控制盒发生故障时,新的活动电源控制盒可以从共享的存储中获取最新的状态信息,并继续提供服务。

    通过ZooKeeper的运行方式,Hadoop集群中的NameNode HA机制得以实现。ZKFC作为ZooKeeper的客户端,通过监控NameNode的健康状态并协调故障转移过程,确保在NameNode发生故障时能够自动切换到备用的NameNode节点,从而保证Hadoop集群的高可用性和数据的一致性。

    1.4、NameNode HA数据共享方法

    在Hadoop分布式文件系统(HDFS)中,fsimage和editlog是两个关键的元数据文件,用于存储文件系统的状态和变更记录。

        fsimage(文件系统镜像):
        fsimage是HDFS中的静态映像文件,它记录了整个文件系统的命名空间和文件块的映射关系。fsimage文件包含了文件和目录的元数据信息,如文件路径、权限、属性等,以及每个文件块所在的数据节点等信息。fsimage文件在NameNode启动时加载到内存中,用于恢复文件系统的初始状态。

        editlog(编辑日志):
        editlog是HDFS中的动态日志文件,它记录了对文件系统的所有修改操作。每当有文件创建、重命名、删除或修改时,对应的编辑操作都会被追加到editlog中。editlog文件按照顺序记录这些修改操作,它是一个追加写入的日志文件,不支持修改或删除已写入的记录。通过读取和应用editlog中的操作记录,可以将文件系统从初始状态(fsimage)逐步恢复到当前状态。

    具体的工作流程如下:

    1. 当HDFS启动时,NameNode首先加载fsimage文件到内存,将文件系统恢复到最近一次保存的状态。
    2. NameNode开始读取editlog文件,并将其中的操作逐个应用到内存中的文件系统状态,以更新文件系统的元数据信息。
    3. 在正常运行期间,每当有文件系统的修改操作发生,对应的操作会被追加到editlog文件,确保数据的持久化和可恢复性。
    4. 定期或手动触发的检查点操作会将当前的内存中的文件系统状态保存为新的fsimage文件,并清空旧的editlog文件,从而限制editlog的大小并加速恢复过程。

    通过fsimage和editlog的结合使用,HDFS能够实现高效的元数据管理和快速的系统恢复能力,保证了文件系统的可靠性和可用性。

    类似于mysql的binlog和中继日志的结合体

    补充一下:

    JournalNode和editlog:

    • JournalNode负责存储NameNode的编辑日志(editlog)。
    • 当NameNode接收到文件系统的修改操作时,会将这些操作写入本地的editlog文件,并通过JournalNode进行复制。这样,即使某个JournalNode节点发生故障,其他正常运行的JournalNode节点仍然可以提供服务。而且,如果某个JournalNode节点丢失了数据(例如节点损坏),其他节点上的数据副本可以被用来进行数据恢复,JournalNode可以运行在每一个 dn节点

     1.5、zookeeper

    ZooKeeper 是一个开源的分布式协调服务,可以用于构建可靠的分布式系统。它提供了一个简单且高效的分布式协调基础,用于协调和管理分布式应用程序的配置、命名服务、分布式锁、分布式队列等。

    ZooKeeper 的主要作用如下:

    1. 配置管理:ZooKeeper 可以存储和管理分布式系统的配置信息,应用程序可以通过监听 ZooKeeper 上的配置节点来感知配置的变化并做出相应的调整。

    2. 命名服务:ZooKeeper 提供了一个层次化的命名空间,应用程序可以在其中创建和维护有序的节点结构,用于表示命名服务,例如存储集群中各个节点的地址或其他重要信息。

    3. 分布式锁:ZooKeeper 提供了分布式锁的实现,多个进程可以使用 ZooKeeper 来协调访问共享资源的顺序,从而实现分布式锁。

    4. 分布式队列:ZooKeeper 的顺序节点特性可以用于实现分布式队列,多个进程可以将数据写入 ZooKeeper 上的顺序节点,然后按照节点的顺序读取数据,实现简单的消息队列。

    5. 集群管理:ZooKeeper 可以用于监控和管理分布式系统中各个节点的状态,检测节点的故障并进行故障恢复,从而提高系统的可用性和稳定性。

    总之,ZooKeeper 提供了一种可靠的分布式协调机制,帮助开发人员构建可靠、高效、分布式的应用程序,并解决分布式系统中的一致性、协调和管理问题。

    zookeeper集群中服务器角色划分

    角色描述
    领导者(leader)领导者负责投票的发起和决议,更新系统状态
    学习者(learner)跟随者(follower)Follower 用于接收客户端请求并向客户端返回结果,在选主过程中参与投票
    观察者(observer)Observer可以接收客户端连接,它不参与 Leader 选举过程,相反,Observer 只同步 Leader 的状态,以便能够更快地响应客户端的读请求。Observer 节点通常用于扩展集群的读能力,而不会增加集群的写负载。
    客户端(client)请求发起方

    1.6、个人总结部分

    HA的必要性,是做什么的
    HA实现
    每一个node上部署zkfc监控NN状态
    zookeeper参与选举至少三个节点,必须是单数
    HA数据交换方法
    通过journalnode进行交换,“快照”保存在 fsimage,操作保存在editlog,恢复时先恢复快照,再加载操作

    2、部署规划

     2.1、网络环境

    ip角色所需软件
    192.168.189.137

    NameNode

    ZKFC

    hd1

    jdk

    hadoop2

    192.168.189.138

    NameNode

    ZKFC

    hd2

    jdk

    hadoop2

    192.168.189.139

    ResourceManager

    hd3

    jdk

    hadoop2

    192.168.189.140

    DataNode

    NodeManager

    JournalNode(数据交换用)

    QuorrumPeerMain(选举,zookeeper)

    hd4

    jdk

    hadoop2

    zookeeper3.4

    192.168.189.141

    DataNode

    NodeManager

    JournalNode(数据交换用)

    QuorrumPeerMain(选举,zookeeper)

    hd5

    jdk

    hadoop2

    zookeeper3.4

    192.168.189.142

    DataNode

    NodeManager

    JournalNode(数据交换用)

    QuorrumPeerMain(选举zookeeper)

    hd6

    jdk

    hadoop2

    zookeeper3.4 

     基础网络环境需要配置:静态ip,主机名,域名解析,ssh免密登录(配置方式

     2.2、jdk部署

    1. [root@hd1 ~]# tar xf jdk-8u202-linux-x64.tar.gz
    2. [root@hd1 ~]# mv jdk1.8.0_202 /usr/local/jdk
    3. [root@hd1 ~]# vim /etc/profile

    2.3、zookeeper部署

    hd{4..6}上安装zookeeper

    zookeeper下载地址

    1. [root@hd4 ~]# tar xf apache-zookeeper-3.7.2-bin.tar.gz
    2. [root@hd4 ~]# ls
    3. anaconda-ks.cfg
    4. apache-zookeeper-3.7.2-bin
    5. apache-zookeeper-3.7.2-bin.tar.gz
    6. hadoop-2.10.2.tar.gz
    7. jdk-8u202-linux-x64.tar.gz
    8. mysql80-community-release-el9-5.noarch.rpm
    9. [root@hd4 ~]# mv apache-zookeeper-3.7.2-bin /usr/local/zookeeper
    10. [root@hd4 ~]# cd /usr/local/zookeeper/
    11. [root@hd4 zookeeper]# ls
    12. bin docs LICENSE.txt README.md
    13. conf lib NOTICE.txt README_packaging.md
    14. [root@hd4 zookeeper]# cd conf/
    15. [root@hd4 conf]# ls
    16. configuration.xsl log4j.properties zoo_sample.cfg
    17. [root@hd4 conf]# cp zoo_sample.cfg zoo.cfg
    18. [root@hd4 conf]# vim zoo.cfg
    19. [root@hd4 conf]# vim zoo.cfg
    20. # The number of milliseconds of each tick
    21. tickTime=2000
    22. # The number of ticks that the initial
    23. # synchronization phase can take
    24. initLimit=10
    25. # The number of ticks that can pass between
    26. # sending a request and getting an acknowledgement
    27. syncLimit=5
    28. # the directory where the snapshot is stored.
    29. # do not use /tmp for storage, /tmp here is just
    30. # example sakes.
    31. dataDir=/opt/data
    32. dataLogDir=/opt/data/log
    33. # the port at which the clients will connect
    34. clientPort=2181
    35. server.1=hd4:2888:3888
    36. server.2=hd5:2888:3888
    37. server.3=hd6:2888:3888

     保存退出,向本机写入zookeeper的id编号

    1. [root@hd4 conf]# mkdir /opt/data
    2. [root@hd4 conf]# echo "1" > /opt/data/myid
    3. #hd4写1,hd5写2,以此类推

    这里直接使用scp将已配置的zookeeper拷贝到hd5与hd6里面

    [root@hd4 ~]# scp -r /usr/local/zookeeper hd6:/usr/local

    修改/etc/profile文件,添加zookeeper

    1. export JAVA_HOME=/usr/local/jdk
    2. export HADOOP_HOME=/opt/hadoop
    3. export ZOOKEEPER_HOME=/usr/local/zookeeper
    4. export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${ZOOKEEPER_HOME}/bin:$PATH

    这里直接使用scp将已配置的环境变量拷贝到hd5与hd6里面

    1. [root@hd4 bin]# scp /etc/profile hd5:/etc/profile
    2. profile 100% 2083 2.0MB/s 00:00
    3. [root@hd4 bin]# scp /etc/profile hd6:/etc/profile
    4. profile 100% 2083 1.2MB/s 00:00

    source应用一下三个环境变量,启动三台服务器的zookeeper

    1. [root@hd4 ~]# zkServer.sh start
    2. ZooKeeper JMX enabled by default
    3. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    4. Starting zookeeper ... STARTED

    查看zookeeper状态

    1. hd4:
    2. [root@hd4 data]# zkServer.sh status
    3. ZooKeeper JMX enabled by default
    4. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    5. Client port found: 2181. Client address: localhost. Client SSL: false.
    6. Mode: follower
    7. hd5:
    8. [root@hd5 ~]# zkServer.sh status
    9. ZooKeeper JMX enabled by default
    10. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    11. Client port found: 2181. Client address: localhost. Client SSL: false.
    12. Mode: leader
    13. hd6:
    14. [root@hd6 ~]# zkServer.sh status
    15. ZooKeeper JMX enabled by default
    16. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    17. Client port found: 2181. Client address: localhost. Client SSL: false.
    18. Mode: follower

    2.4、Hadoop部署

    参考上一篇文章,需要注意的是,同步变量文件时需要保证前面配置的zookeeper变量不要受到影响,同时添加hadoop的/sbin目录

    1. hd{4..6}
    2. export JAVA_HOME=/usr/local/jdk
    3. export HADOOP_HOME=/opt/hadoop
    4. export ZOOKEEPER_HOME=/usr/local/zookeeper
    5. export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${ZOOKEEPER_HOME}/bin:$PATH
    6. hd{1..3}
    7. export JAVA_HOME=/usr/local/jdk
    8. export HADOOP_HOME=/opt/hadoop
    9. export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

    3、完全分布式配置文件修改

    3.1、hadoop-env.sh

    1. [root@hd1 ~]# cd /opt/hadoop/etc/hadoop/
    2. [root@hd1 hadoop]# vim hadoop-env.sh
    3. export JAVA_HOME=/usr/local/jdk
    4. #此处建议修改为路径模式,原为变量模式启动可能报错

    3.2、core-site.xml

    1. <configuration>
    2. <property>
    3. <name>fs.defaultFSname>
    4. <value>hdfs://ns1value>
    5. property>
    6. <property>
    7. <name>hadoop.tmp.dirname>
    8. <value>/opt/data/tmpvalue>
    9. property>
    10. <property>
    11. <name>ha.zookeeper.quorumname>
    12. <value>ha4:2181,hd5:2181,hd6:2181value>
    13. property>
    14. configuration>

    3.3、hdfs-site.xml

    1. <configuration>
    2. <property>
    3. <name>dfs.nameservicesname>
    4. <value>ns1value>
    5. property>
    6. <property>
    7. <name>dfs.ha.namenodes.ns1name>
    8. <value>nn1,nn2value>
    9. property>
    10. <property>
    11. <name>dfs.namenode.rpc-address.ns1.nn1name>
    12. <value>hd1:9000value>
    13. property>
    14. <property>
    15. <name>dfs.namenode.http-address.ns1.nn1name>
    16. <value>hd1:50070value>
    17. property>
    18. <property>
    19. <name>dfs.namenode.rpc-address.ns1.nn2name>
    20. <value>hd2:9000value>
    21. property>
    22. <property>
    23. <name>dfs.namenode.http-address.ns1.nn2name>
    24. <value>hd2:50070value>
    25. property>
    26. <property>
    27. <name>dfs.namenode.shared.edits.dirname>
    28. <value>qjournal://hd4:8485;hd5:8485;hd6:8485/ns1value>
    29. property>
    30. <property>
    31. <name>dfs.journalnode.edits.dirname>
    32. <value>/opt/data/journalvalue>
    33. property>
    34. <property>
    35. <name>dfs.ha.automatic-failover.enabledname>
    36. <value>truevalue>
    37. property>
    38. <property>
    39. <name>dfs.client.failover.proxy.provider.ns1name>
    40. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
    41. property>
    42. <property>
    43. <name>dfs.ha.fencing.methodsname>
    44. <value>sshfencevalue>
    45. property>
    46. <property>
    47. <name>dfs.ha.fencing.ssh.private-key-filesname>
    48. <value>/root/.ssh/id_rsavalue>
    49. property>
    50. configuration>

    3.4、slaves

    配置datanode节点的记录文件

    1. [root@hd1 hadoop]# vim slaves
    2. 清空原文件内容,写入三个节点名
    3. hd4
    4. hd5
    5. hd6

    3.5、mapred-site.xml

    1. <configuration>
    2. <property>
    3. <name>mapreduce.framework.namename>
    4. <value>yarnvalue>
    5. property>
    6. configuration>

    3.6、yarn-site.xml

    1. <configuration>
    2. <property>
    3. <name>yarn.resourcemanager.hostnamename>
    4. <value>hd3value>
    5. property>
    6. <property>
    7. <name>yarn.nodemanager.aux-servicesname>
    8. <value>mapreduce_shufflevalue>
    9. property>
    10. configuration>

    3.7、mapred-env.sh

    export JAVA_HOME=/usr/local/jdk

    3.8、yarn-env.sh

    export JAVA_HOME=/usr/local/jdk

    3.9、统一配置

    使用for循环将配置好的文件分发到所有节点

    1. for i in hd{2..6}
    2. do
    3. scp -r /opt/hadoop $i:/opt
    4. done

    4、启动集群

    4.1、在datanode节点(3台)启动zookeeper

    1. [root@hd5 ~]# zkServer.sh start
    2. ZooKeeper JMX enabled by default
    3. Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    4. Starting zookeeper ... STARTED
    5. #所有zookeeper启动后检查启动状态
    6. [root@hd5 ~]# zkServer.sh status
    7. #使用jps可以看到选举进程
    8. [root@hd4 ~]# jps
    9. 1804 QuorumPeerMain

    4.2、启动journalnode

    在namenode上操作,例如hd1

    1. [root@hd1 ~]# hadoop-daemons.sh start journalnode
    2. hd4: starting journalnode, logging to /opt/hadoop/logs/hadoop-root-journalnode-hd4.out
    3. hd5: starting journalnode, logging to /opt/hadoop/logs/hadoop-root-journalnode-hd5.out
    4. hd6: starting journalnode, logging to /opt/hadoop/logs/hadoop-root-journalnode-hd6.out

     在hd4上查看可以看到如下图所示

     使用jps可以看到守护进程启动

    1. [root@hd4 ~]# jps
    2. 1804 QuorumPeerMain
    3. 1965 JournalNode
    4. 2047 Jps

    4.3、格式化hdfs文件系统

    在namenode上操作,例如hd1

    [root@hd1 ~]# hdfs namenode -format

    然后将临时文件夹拷贝到nn2

    [root@hd1 hadoop]# scp -r /opt/data hd2:/opt
    

    4.4、格式化zk

    在namenode上操作,例如hd1

    注意最后的ZK为大写,写错后不产生报错,但是会影响后续运行

    [root@hd1 hadoop]# hdfs zkfc -formatZK

    4.5、启动hdfs

    在namenode上操作,例如hd1

    [root@hd1 hadoop]# start-dfs.sh 

    hd1,hd2如下所示

    1. [root@hd2 ~]# jps
    2. 2100 Jps
    3. 1724 NameNode
    4. 2029 DFSZKFailoverController

    hd3

    1. [root@hd3 ~]# jps
    2. 1673 Jps

    hd4,5,6

    1. [root@hd6 ~]# jps
    2. 2118 Jps
    3. 1611 QuorumPeerMain
    4. 1916 DataNode
    5. 1726 JournalNode

    4.6、启动yarn

    在nodename上操作,例如想让hd3成为resourcemanager,则在hd3上启动

    1. [root@hd3 ~]# start-yarn.sh
    2. 下面按照需求输入yes执行操作

    hd3

    1. [root@hd3 ~]# jps
    2. 2112 Jps
    3. 1719 ResourceManager

    hd4,5,6

    1. [root@hd4 ~]# jps
    2. 1911 DataNode
    3. 1609 QuorumPeerMain
    4. 2393 Jps
    5. 2171 NodeManager
    6. 1725 JournalNode

    5、集群验证及使用

     5.1、操作步骤

    1. [root@hd1 ~]# vim test.txt
    2. [root@hd1 ~]# cat test.txt
    3. tom
    4. jerry
    5. tom
    6. tom
    7. tom
    8. jerry
    9. spike
    10. spike
    11. #。。。。。。部分略。。。。。。。。。
    12. [root@hd1 ~]# hdfs dfs -ls /
    13. [root@hd1 ~]# hdfs dfs -mkdir /input
    14. [root@hd1 ~]# hdfs dfs -ls /
    15. Found 1 items
    16. drwxr-xr-x - root supergroup 0 2024-05-23 20:06 /input
    17. [root@hd1 ~]# hdfs dfs -put test.txt /input
    18. [root@hd1 ~]# hdfs dfs -ls /input
    19. Found 1 items
    20. -rw-r--r-- 3 root supergroup 167 2024-05-23 20:07 /input/test.txt
    21. [root@hd1 ~]# yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar wordcount /input /output/00
    22. #输出信息略
    23. [root@hd1 ~]# hdfs dfs -ls /output/00
    24. Found 2 items
    25. -rw-r--r-- 3 root supergroup 0 2024-05-23 20:10 /output/00/_SUCCESS
    26. -rw-r--r-- 3 root supergroup 139 2024-05-23 20:10 /output/00/part-r-00000
    27. [root@hd1 ~]# hdfs dfs -cat /output/00/part-r-00000
    28. 10.0.0.0 1
    29. 126.0.0.0 1
    30. 127.0.0.1 1
    31. 128.0.0.0 1
    32. 191.255.0.0 1
    33. 192.0.0.0 1
    34. 192.168.1.1 2
    35. 192.168.2.1 1
    36. 233.255.255.0 1
    37. jerry 2
    38. spike 2
    39. tom 8

    5.2、浏览器访问

    hd1

    namenode1

    hd2

    namenode2

    hd3

    ResourceManager

     历史作业记录

  • 相关阅读:
    google搜索技巧——程序员推荐
    CSS接触
    maltab datenum函数与正则表达式巧用:逐日数据转为逐月数据、日序转月序
    HBase学习笔记(一)
    cross-env: 如何使用umi配置多环境打包
    Linux常用基本命令详解(二)-------磁盘分区和磁盘管理类命令
    计算机毕设(附源码)JAVA-SSM基于协同过滤技术的旅游景点购票系统
    Linux与shell命令行学习
    2023年中国酒店式公寓现状及发展趋势分析[图]
    Reflections一个强大的类扫描工具介绍
  • 原文地址:https://blog.csdn.net/qq_43387908/article/details/138993010