Hadoop是一个由Apache基金会所开发的分布式系统基础架构,它允许用户在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。
一、Hadoop的起源与发展
Hadoop起源于Apache Nutch项目,该项目始于2002年,是Apache Lucene的子项目之一。2004年,Google发表了关于MapReduce的论文后,Doug Cutting等人受到启发,开始尝试实现MapReduce计算框架,并将其与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法。由于NDFS和MapReduce在Nutch引擎中有着良好的应用,它们于2006年2月被分离出来,成为一套完整而独立的软件,并被命名为Hadoop。到了2008年年初,Hadoop已成为Apache的顶级项目,包含众多子项目,并被广泛应用到包括Yahoo在内的很多互联网公司。
二、Hadoop的核心组件
Hadoop的核心组件主要包括HDFS(Hadoop Distributed File System)、MapReduce和YARN(Yet Another Resource Negotiator)。
- HDFS:HDFS是一个分布式文件系统,用于存储文件。它通过目录树来定位文件,具有高容错性、高吞吐量的特点,并且设计用来部署在低廉的硬件上。HDFS的架构包括NameNode(存储文件元数据)、DataNode(在本地文件系统存储文件块数据)和Secondary NameNode(定期备份NameNode元数据)。
- MapReduce:MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。它将计算过程分为Map和Reduce两个阶段,Map阶段进行拆分,把大数据拆分成若干份小数据,多个程序同时并行计算产生中间结果;Reduce阶段通过程序对并行的结果进行最终的汇总计算,得出最终的结果。
- YARN:YARN是一个资源调度平台,负责为运算程序提供服务器运算资源。它包括ResourceManager(核心管理服务,负责资源的管理和分配)、NodeManager(管理单个节点上的资源)、ApplicationMaster(负责内部任务的资源申请和分配,以及任务的监控和容错)和Container(容器,里面封装了任务运行所需要的资源)。
三、Hadoop的优点
- 高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。
- 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
- 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
- 高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
- 低成本:Hadoop是开源的,与一体机、商用数据仓库等数据集市相比,项目的软件成本会大大降低。
四、Hadoop的应用
Hadoop在大数据处理领域有着广泛的应用,包括但不限于:
- 数据存储:HDFS为海量的数据提供了存储解决方案。
- 数据分析:MapReduce为海量的数据提供了计算解决方案,使得用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
- 构建数据仓库:如Apache Hive等基于Hadoop的数据仓库平台,为数据存储和分析提供了更强大的功能。
五、Hadoop的生态系统
广义上来说,Hadoop通常指一个更广泛的概念——Hadoop生态圈。Hadoop生态圈包括了众多与Hadoop相关的技术和工具,如HBase、Hive、ZooKeeper、Sqoop等,它们共同构成了一个完整的大数据处理和分析平台。
综上所述,Hadoop是一个功能强大、灵活且可扩展的分布式系统基础架构,它为用户提供了高效、可靠、低成本的大数据处理和分析解决方案。
Hadoop集群配置是一个复杂但有序的过程,主要涉及硬件准备、软件安装、配置文件设置等多个环节。以下是一个详细的Hadoop集群配置指南:
一、硬件准备
- 节点规划:通常,Hadoop集群由多个节点组成,包括一个NameNode节点、一个JobTracker节点(在Hadoop 2.x及更高版本中,JobTracker被ResourceManager和NodeManager替代)以及多个DataNode和TaskTracker节点(或NodeManager节点)。根据集群规模和需求,可以灵活规划节点数量。
- 硬件要求:每个节点需要具备足够的CPU、内存和存储空间。对于NameNode和JobTracker节点,由于需要处理更多的管理任务,因此可能需要更高的硬件配置。
二、软件安装
- 操作系统:选择支持Hadoop的操作系统,如Linux。确保所有节点上的操作系统版本一致,以便进行统一管理和配置。
- Java环境:Hadoop是基于Java开发的,因此需要安装Java环境。推荐安装Oracle JDK或OpenJDK,并确保Java版本与Hadoop版本兼容。
- Hadoop安装:从Hadoop官方网站下载Hadoop安装包,并将其解压到集群内的所有机器上。确保所有节点上的Hadoop版本一致。
三、配置文件设置
Hadoop的配置文件主要位于Hadoop安装目录下的
etc/hadoop/
目录中。以下是一些关键配置文件的设置:
- hadoop-env.sh:设置Hadoop守护进程的运行环境变量,如
JAVA_HOME
、HADOOP_HOME
等。 - core-site.xml:Hadoop核心配置文件,用于设置Hadoop集群的基本信息,如文件系统URI、缓冲区大小等。
- hdfs-site.xml:HDFS核心配置文件,用于设置HDFS的相关参数,如数据块大小、NameNode和DataNode的存储路径等。
- mapred-site.xml(或yarn-site.xml,取决于Hadoop版本):MapReduce配置文件,用于设置MapReduce作业的相关参数,如作业跟踪器地址、任务内存限制等。在Hadoop 2.x及更高版本中,MapReduce框架与YARN集成,因此需要使用
yarn-site.xml
进行配置。 - workers(或slaves,取决于Hadoop版本):列出所有DataNode(或TaskTracker/NodeManager)节点的主机名或IP地址。
四、网络配置
- 静态IP设置:为集群中的每个节点设置静态IP地址,并确保它们位于同一个子网内,以便进行通信。
- SSH免密登录:配置SSH免密登录,以便Hadoop守护进程可以在节点之间无缝地启动和停止。这通常通过生成SSH密钥对并将公钥复制到其他节点的
~/.ssh/authorized_keys
文件中来实现。 - 防火墙设置:确保集群中的节点之间的防火墙设置允许Hadoop守护进程所需的端口进行通信。同时,也要考虑外部访问Hadoop集群的安全性需求。
五、启动和验证
- 启动Hadoop集群:使用Hadoop提供的启动脚本(如
start-all.sh
或start-dfs.sh
和start-yarn.sh
)来启动Hadoop集群。 - 验证集群状态:使用Hadoop提供的Web界面(如NameNode和ResourceManager的Web界面)或命令行工具(如
hdfs dfsadmin -report
)来验证集群的状态和配置。
六、注意事项
- 版本兼容性:确保所有节点上的Hadoop版本、Java版本以及操作系统版本相互兼容。
- 数据备份:定期备份NameNode和DataNode上的数据,以防止数据丢失。
- 性能调优:根据集群的负载和性能需求,对Hadoop的配置文件进行调优,以提高集群的吞吐量和响应速度。
综上所述,Hadoop集群配置是一个涉及多个方面的复杂过程。通过仔细规划、安装和配置,可以构建一个高效、稳定的Hadoop集群,为大数据处理和分析提供强有力的支持。
Hadoop配置
1.进入hadoop文件路径,并查看:cd /usr/local/hadoop-3.1.3/etc/hadoop
- core-site.xml:进入/usr/local/hadoop-3.1.3/etc/hadoop/,修改core-site.xml文件,添加以下部分,注意,以下的master都是自己的主机名称(回顾:使用hostname查看自己的主机名称)
- <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/log/hadoop/tmp</value> </property></configuration>
- hadoop-env.sh:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改hadoop-env.sh文件,添加以下部分
- export JAVA_HOME=/opt/jdk1.8.0_221
- yarn-env.sh:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改yarn-env.sh文件,在底部添加以下部分
- mapred-site.xml:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改mapred-site.xml文件,添加以下部分
- export JAVA_HOME=/opt/jdk1.8.0_221
- <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property></configuration>
- yarn-site.xml:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改yarn-site.xml文件,添加以下部分
- <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>${yarn.resourcemanager.hostname}:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>${yarn.resourcemanager.hostname}:8030</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>${yarn.resourcemanager.hostname}:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.https.address</name> <value>${yarn.resourcemanager.hostname}:8090</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>${yarn.resourcemanager.hostname}:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>${yarn.resourcemanager.hostname}:8033</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/data/hadoop/yarn/local</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/data/tmp/logs</value> </property> <property> <name>yarn.log.server.url</name> <value>http:///master:19888/jobhistory/logs</value> <description>URL for job history server</description> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <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.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>2048</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>1</value> </property></configuration>
- Workers:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改workers文件,改成以下部分(如果有localhosts删掉它)
- masterslave1slave2
- hdfs-site.xml:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改hdfs-site.xml文件,添加以下部分
- <configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:///data/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///data/hadoop/hdfs/data</value> </property>(可以不写dfs.namenode.name.dir和dfs.datanode.data.dir配置,这样的话就不会额外定制name、data的路径,会使用core-site.xml的/var/log/hadoop/tmp的路径,如/var/log/hadoop/tmp/hdfs/name。但是偶尔不配置容易出现bug,因此这里还是建议配置) <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property></configuration>
- start-dfs.sh和stop-dfs.sh:到/usr/local/hadoop-3.1.3/sbin/下,修改start-dfs.sh和stop-dfs.sh文件,在文件开头添加以下部分
- HDFS_DATANODE_USER=rootHDFS_DATANODE_SECURE_USER=hdfs(课本是HADOOP_SECURE_DN_USER=hdfs会提示WARNING)HDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root
- start-yarn.sh和stop-yarn.sh:到/usr/local/hadoop-3.1.3/sbin/下,修改start-yarn.sh和stop-yarn.sh文件,在文件开头添加以下部分
- YARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root
- 拓展:在start-all.sh底部添加以下代码,一起启动历史服务
- if [[ -f "${HADOOP_YARN_HOME}/bin/mapred" ]]; then "${HADOOP_YARN_HOME}/bin/mapred" --daemon start historyserverfi
- 拓展:在stop-all.sh底部添加以下代码,一起停止历史服务
克隆虚拟机
- VMware操作 - 右键左侧虚拟机---管理---克隆- - 下一步---下一步---选创建完整克隆---下一步- 修改虚拟机名称、修改安装位置,并点击完成,建议类似这样(D盘\你的文件夹\放虚拟机的文件夹\具体节点文件夹):1. D:\hsn\linux\master2. D:\hsn\linux\slave13. D:\hsn\linux\slave24. 5. 克隆完成后,拖回文件夹6. 超级用户登录,su7. 查看并修改网络配置文件,命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33修改后的IP如:IPADDR=192.168.121.4(****跟/etc/hosts文件的主机映射IP、域名保持一致)8. 重启网络服务,命令:service network restart如果出现出现报错,输入以下两条命令重置网络管理器: 1. 再重新使用service network restart,如果[ok],就尝试下一步查看IP地址2. systemctl restart network3. systemctl stop NetworkManager4. 拓展:如果你关闭机器,下一次打开又出现同样的报错,并且使用a) b)两条命令能解决,建议你重新克隆该虚拟机查IP地址,命令:ip addr9. 修改主机名称,命令:hostnamectl set-hostname slave1在master主机用ping命令,验证映射后的虚拟机是否互通,命令:ping slave1。确保slave1映射没问题,有问题要检查vi /etc/hosts里的IP和当前设置的ens33的IPADDR按住Ctrl+C停止ping过程重启,命令:exitssh免密过程:10. 在master主机里,先尝试ssh登录,命令:ssh slave1,现在需要输入密码登录。11. 先从slave1退出,回到master主机里,使用exit或者logout命令12. 在master主机里,使用ssh-keygen产生公钥与私钥对,命令:ssh-keygen -t rsa(执行命令后,对弹出提示连续按3次回车键)。 - 对于master免密登录slave1、slave2时,只需要使用命令ssh-keygen -t rsa生成一次密钥对13. 进入home目录,用命令:ll -al查看隐藏文件,能看到隐藏文件.ssh。14. 进入.ssh文件夹再使用ll命令查看文件,其中,id_rsa是私钥,is_rsa.pub是公钥。15. 在master主机,使用命令ssh-copy-id slave1将公钥复制到slave1中,期间需要输入slave1密码,然后使用ssh命令登录slave1,成功无密登录过程如下:16. 切换到slave1主机,进入/root/.ssh路径,用cat命令查看授权文件,当最后显示的是root/master时候,表示master主机已授权:最后使用exit退出slave1,回到mster主机17. 同理,重复(6)(7)对slave2进行免密设置。18. 最后,在master也给自己也发放公钥,命令:ssh-copy-id master(为后续启动集群做准备)19. ### #### 应用wordcount函数完成词频统计20. 1) 调用Hadoop的官方jar包的wordcount模块 ① 使用cd命令,进入/usr/local/hadoop-3.1.3路径,测试搭建结果,统计词频,命令:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount test/test.txt ./output。本行命令拆分成几个部分解析: ü bin/hadoop:bin目录下调用 Hadoop 的主命令行工具21. 22. ü jar:使用 JAR 子命令,表示要运行一个 JAR 文件 ü share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar:即将运行的share...路径下的JAR文件
ü Wordcount:一个简单的程序,用于统计输入文本中每个单词的出现次数。
ü test/test.txt:test文件夹下的text.txt文件(mkdir test,并上传test.txt文件)
ü ./output:当前路径下生成的一个文件夹,存放输出结果(不能重复,不会覆盖,不会重命名,重新统计要写新文件夹名称)
进入output文件夹,使用cat命令查看结果
Hadoop文件配置
(1) 进入hadoop文件路径,并查看:cd /usr/local/hadoop-3.1.3/etc/hadoop
(2) core-site.xml:进入/usr/local/hadoop-3.1.3/etc/hadoop/,修改core-site.xml文件,添加以下部分,注意,以下的master都是自己的主机名称(回顾:使用hostname查看自己的主机名称)
<configuration>
** <property>**
** <name>fs.defaultFS</name>**
** <value>hdfs://master:8020</value>**
** </property>**
** <property>**
** <name>hadoop.tmp.dir</name>**
** <value>/var/log/hadoop/tmp</value>**
** </property>**
</configuration>
(3) hadoop-env.sh:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改hadoop-env.sh文****件,添加以下部分
export JAVA_HOME=/opt/jdk1.8.0_221
(4) yarn-env.sh:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改yarn-env.sh文件,在底部添加以下部分
export JAVA_HOME=/opt/jdk1.8.0_221
(5) mapred-site.xml:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改mapred-site.xml文件,添加以下部分
<configuration>
** <property>**
** <name>mapreduce.framework.name</name>**
** <value>yarn</value>**
** </property>**
** <property>**
** <name>mapreduce.jobhistory.address</name>**
** <value>master:10020</value>**
** </property>**
** <property>**
** <name>mapreduce.jobhistory.webapp.address</name>**
** <value>master:19888</value>**
** </property>**
** <property>**
** <name>yarn.app.mapreduce.am.env</name>**
** <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>**
** </property>**
** <property>**
** <name>mapreduce.map.env</name>**
** <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>**
** </property>**
** <property>**
** <name>mapreduce.reduce.env</name>**
** <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>**
** </property>**
</configuration>
(6) yarn-site.xml:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改yarn-site.xml文件,添加以下部分
<configuration>
** <property>**
** <name>yarn.resourcemanager.hostname</name>**
** <value>master</value>**
** </property>**
** <property>**
** <name>yarn.resourcemanager.address</name>**
** <value>${yarn.resourcemanager.hostname}:8032</value>**
** </property>**
** <property>**
** <name>yarn.resourcemanager.scheduler.address</name>**
** <value>${yarn.resourcemanager.hostname}:8030</value>**
** </property>**
** <property>**
** <name>yarn.resourcemanager.webapp.address</name>**
** <value>${yarn.resourcemanager.hostname}:8088</value>**
** </property>**
** <property>**
** <name>yarn.resourcemanager.webapp.https.address</name>**
** <value>${yarn.resourcemanager.hostname}:8090</value>**
** </property>**
** <property>**
** <name>yarn.resourcemanager.resource-tracker.address</name>**
** <value>${yarn.resourcemanager.hostname}:8031</value>**
** </property>**
** <property>**
** <name>yarn.resourcemanager.admin.address</name>**
** <value>${yarn.resourcemanager.hostname}:8033</value>**
** </property>**
** <property>**
** <name>yarn.nodemanager.local-dirs</name>**
** <value>/data/hadoop/yarn/local</value>**
** </property>**
** <property>**
** <name>yarn.log-aggregation-enable</name>**
** <value>true</value>**
** </property>**
** <property>**
** <name>yarn.nodemanager.remote-app-log-dir</name>**
** <value>/data/tmp/logs</value>**
** </property>**
** <property>**
** <name>yarn.log.server.url</name>**
** <value>http:///master:19888/jobhistory/logs</value>**
** <description>URL for job history server</description>**
** </property>**
** <property>**
** <name>yarn.nodemanager.vmem-check-enabled</name>**
** <value>false</value>**
** </property>**
** <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.nodemanager.resource.memory-mb</name>**
** <value>2048</value>**
** </property>**
** <property>**
** <name>yarn.scheduler.minimum-allocation-mb</name>**
** <value>512</value>**
** </property>**
** <property>**
** <name>yarn.scheduler.maximum-allocation-mb</name>**
** <value>4096</value>**
** </property>**
** <property>**
** <name>mapreduce.map.memory.mb</name>**
** <value>2048</value>**
** </property>**
** <property>**
** <name>mapreduce.reduce.memory.mb</name>**
** <value>2048</value>**
** </property>**
** <property>**
** <name>yarn.nodemanager.resource.cpu-vcores</name>**
** <value>1</value>**
** </property>**
</configuration>
(7) Workers:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改workers文件,改成以下部分(如果有localhosts删掉它)
master
slave1
slave2
(8) hdfs-site.xml:在/usr/local/hadoop-3.1.3/etc/hadoop/路径下,修改hdfs-site.xml文件,添加以下部分
<configuration>
** <property>**
** <name>dfs.namenode.name.dir</name>**
** <value>file:///data/hadoop/hdfs/name</value>**
** </property>**
** <property>**
** <name>dfs.datanode.data.dir</name>**
** <value>file:///data/hadoop/hdfs/data</value>**
** </property>**
** <property>**
** <name>dfs.namenode.secondary.http-address</name>**
** <value>master:50090</value>**
** </property>**
** <property>**
** <name>dfs.replication</name>**
** <value>3</value>**
** </property>**
</configuration>
(1) start-dfs.sh和stop-dfs.sh:到/usr/local/hadoop-3.1.3/sbin/下,修改start-dfs.sh和stop-dfs.sh文件,在文件开头添加以下部分
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs(课本是HADOOP_SECURE_DN_USER=hdfs会提示WARNING)
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
(2) start-yarn.sh和stop-yarn.sh:到/usr/local/hadoop-3.1.3/sbin/下,修改start-yarn.sh和stop-yarn.sh文件,在文件开头添加以下部分
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
HDFS的本质
HDFS的中文翻译是Hadoop分布式文件系统(Hadoop Distributed File System)。它本质还是程序,主要还是以树状目录结构来管理文件(和linux类似,/表示根路径),且可以运行在多个节点上(即分布式)。
HDFS(Hadoop Distributed File System)是Hadoop项目的核心组件之一,它是一个高度容错性的系统,设计用来在廉价的硬件上部署。
HDFS解决了核心问题:在普通硬件上高效、可靠地存储和访问超大规模的数据集,为大数据应用提供底层的分布式存储服务。
HDFS的架构
HDFS遵循主从架构(Master/Slave),主要由一个NameNode和多个DataNode组成。这种架构使得HDFS能够跨多台计算机存储和处理文件,实现分布式存储和计算。
- NameNode,即是master: - 管理HDFS的命名空间- 配置副本策略- 管理数据块Blocks的映射信息- 处理客户端读写请求- 存储和管理元数据
- DataNode,即是slave们: - master下达命令,DataNode执行操作- 存储实际的数据块- 执行数据块的读/写操作- 定期向NameNode发送心跳信号,报告自己的状态和数据块的情况。
- Client,客户端(等同于命令hdfs dfs -ls /): - 文件切分。文件上传HDFS时,Client将文件切分成一个个Block后上传- 与NameNode交互,获取文件的位置信息- 与DataNode交互,读取或写入数据- Client提供一些命令来管理HDFS,如NameNode格式化hdfs namenode -formate- Client通过一些命令来访问HDFS,如HDFS增删改查操作
- Secondary NameNode: - 辅助NameNode,分单其工作量,如定期合并FsImage(文件系统镜像)和Edits(编辑日志),并推送给NameNode 1. FsImage:包含了文件系统在某个时间点的所有状态信息2. Edits:记录了所有对文件系统的修改操作,如创建、删除文件或目录等- 在紧急情况下,可以辅助恢复NameNode
- 其他相关定义: - 元数据:简单理解,除了文件的数据本身,文件的信息都可以称为元数据,存储在NameNode的内存中 1. 如文件名字、文件数据块信息、数据块和DataNode节点对应信息等。2. 为了避免元数据丢失,NameNode会将HDFS的操作日志(如创建文件、删除文件等操作)写入EditLog日志文件中,并由SecondaryNameNode进程定期将EditLog合并到FSImage文件中。集群重启,NameNode就会读取FSImage文件来恢复元数据。- 数据块:HDFS存文件的时候,会将文件按照一定的大小(默认是128M)进行分割,独立存储,这些独立的文件即为数据块(Block)- 数据副本:将一个数据块Block1复制2份,每一份即为一个副本,副本数为3
Hadoop文件块的大小
在Hadoop分布式文件系统(HDFS)中,数据块是最基本的存储单位。每个文件在HDFS中都被划分为多个块大小的分块,这些分块就是数据块。数据块作为独立的存储单元,用于存储文件的内容
版权归原作者 刘祎祺 所有, 如有侵权,请联系我们删除。