hadoop简介

一、hadoop特点

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

(1)分布式Hadoop Distributed File System

(2)commodity hardware廉价硬件

(3)fault-tolerant容错

(4)High throughput高吞吐

(5)large data sets大数据集合

二、HDFS前提和设计目标

(1)Hardware Failure 硬件错误

        每个机器只存储文件的部分数据,blocksize=128M,block存放在不同的机器上,由于容错,HDFS默认采用3副本机制

(2)Streaming Data Access流式数据访问

        The emphasis is on high throughput of data access rather than low latency of data access.

        重点在于数据访问的高吞吐量,而不是数据访问的低延迟

(3)Large Data Sets 大规模数据集

(4)Moving Computation is Cheaper than Moving Data移动计算比移动数据便宜

三、HDFS架构NameNode和DataNodes

(1)NameNode(master)和DataNodes(slave)

(2)HDFS has a master/slave architectureHDFS具有主/从体系结构

(3)NN:manage the file system namespace(管理文件系统名称空间/home/hadoop/software),regulates access to files by clients(管理客户端对文件的访问)

(4)DN:storge

(5)HDFS exposes a file system namespace and allows user data to be stored in files。

         HDFS公开了文件系统名称空间,并允许用户数据存储在文件中

(6)Internally, a file is split into one or more blocks

         在内部,文件被拆分为一个或多个块

         blocksize:128M,150M数据拆成2个block

(7)blocks are stored in a set of DataNodes,为什么?容错

         这些块存储在一组DataNode中

(8)The NameNode executes file system namespace operations like opening, closing, and renaming files and directories.(CRUD)

         NameNode执行文件系统名称空间操作,例如打开,关闭和重命名文件和目录。

(9)NameNode also determines the mapping of blocks to DataNodes.

         它还确定块到DataNode的映射

         a.txt 150M blocksize=128M,a.txt被拆分为2个block,一个是block1:128M,另一个是block2:22M

         block1存放在哪个DN? block2存放在哪个DN?

         a.txt:block1:128M,192.168.199.1,block2:22M,192.168.199.2

         get a.txt也需要NameNode找到block,这个过程对于用户是不感知的

(10)The DataNodes are responsible for serving read and write requests from the file system’s clients. The DataNodes also perform block creation, deletion, and replication upon instruction from the NameNode.

           NameNode执行文件系统名称空间操作,例如打开,关闭和重命名文件和目录。它还确定块到DataNode的映射。DataNode负责处理来自文件系统客户端的读写请求。DataNode还会执行块创建,删除,和根据NameNode的指令进行复制

(11)通常情况下1个Node部署一个组件

HDFS Architecture

四、文件系统命名空间

HDFS支持传统的分层文件组织。用户或应用程序可以创建目录并将文件存储在这些目录中。文件系统名称空间层次结构与大多数其他现有文件系统相似。可以创建和删除文件,将文件从一个目录移动到另一个目录或重命名文件。HDFS支持用户配额访问权限。HDFS不支持硬链接或软链接。但是,HDFS体系结构并不排除实现这些功能。

尽管HDFS遵循FileSystem的命名约定,但某些路径和名称(例如/.reserved和.snapshot)被保留。功能,如透明加密快照使用预约路径。

NameNode维护文件系统名称空间。对文件系统名称空间或其属性的任何更改均由NameNode记录。应用程序可以指定应由HDFS维护的文件副本的数量。文件的副本数称为该文件的复制因子。此信息由NameNode存储。

 

五、数据副本

HDFS旨在可靠地将大型文件跨大型群集中的计算机存储。它将每个文件存储为一系列块。复制文件的块是为了容错。块大小和复制因子是每个文件可配置的。

文件中除最后一个块外的所有块都具有相同的大小,而在添加了对可变长度块的支持后,用户可以在不填充最后一个块的情况下开始新的块,而不用配置的块大小。

应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,以后可以更改。HDFS中的文件只能写入一次(追加和截断除外),并且在任何时候都只能具有一个写入器。

HDFS数据节点

副本放置:第一步

复制副本的位置对于HDFS的可靠性和性能至关重要。优化副本放置将HDFS与大多数其他分布式文件系统区分开来。此功能需要大量调整和经验。机架感知的副本放置策略的目的是提高数据可靠性,可用性和网络带宽利用率。副本放置策略的当前实现是朝这个方向的第一步。实施此策略的短期目标是在生产系统上对其进行验证,进一步了解其行为,并为测试和研究更复杂的策略奠定基础。

大型HDFS实例在通常分布在许多机架上的计算机群集上运行。不同机架中的两个节点之间的通信必须通过交换机进行。在大多数情况下,同一机架中的计算机之间的网络带宽大于不同机架中的计算机之间的网络带宽。

NameNode通过Hadoop Rack Awareness中概述的过程确定每个DataNode所属的机架ID 。一个简单但非最佳的策略是将副本放置在唯一的机架上。这样可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用多个机架的带宽。此策略在群集中平均分配副本,这使得在组件故障时轻松平衡负载成为可能。但是,此策略增加了写入成本,因为写入需要将块传输到多个机架。

在常见情况下,当复制因子为3时,HDFS的放置策略是:如果写入器在数据节点DataNode上,则将一个副本放置在本地计算机上;否则,在与写入器相同的机架中的随机数据节点上放置一个副本,在复制器上放置另一个副本。一个节点(位于不同(远程)机架中),最后一个节点位于同一远程机架中的另一个节点上。该策略减少了机架间的写流量,通常可以提高写性能。机架故障的机会远少于节点故障的机会。此策略不会影响数据的可靠性和可用性保证。但是,由于一个块仅放置在两个唯一的机架中,而不是三个,因此它确实减少了读取数据时使用的总网络带宽。使用此策略,文件的副本不会在机架上均匀分布。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,其余三分之一则平均分布在其余机架上。此策略可提高写入性能,而不会影响数据可靠性或读取性能。

安全模式

启动时,NameNode进入一个特殊的状态,称为安全模式。当NameNode处于安全模式状态时,不会发生数据块的复制。NameNode从数据节点接收心跳和Blockreport消息。Blockreport包含DataNode托管的数据块列表。每个块都有指定的最小副本数。当已使用NameNode检入该数据块的最小副本数时,该块被视为已安全复制。在可配置百分比的安全复制数据块中通过NameNode签入(再加上30秒)后,NameNode退出安全模式状态。然后,它确定仍少于指定数量的副本的数据块列表(如果有)。然后,NameNode将这些块复制到其他DataNode。

六、HDFS读数据流程

七、HDFS写数据流程

八、HDFS Checkpoint详解

 

九、hadoop环境搭建

http://archive.cloudera.com/cdh5/cdh/5/

wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1-src.tar.gz

http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1/hadoop-project-dist/hadoop-common/SingleCluster.html

start-dfs.sh和stop-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
hadoop-env.sh
export JAVA_HOME=/root/jdk-14.0.1

core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020</value>
    </property>
</configuration>

hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/app/tmp</value>
    </property>
    <property>
       <name>dfs.http.address</name>
       <value>0.0.0.0:50070</value>
    </property>
</configuration>
vim ~/.bash_profile
export JAVA_HOME=/root/jdk-14.0.1
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/root/app/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
source ~/.bash_profile

启动HDFS:

第一次执行的时候一定要格式化文件系统,不要重复执行:hdfs namenode -format

启动集群:$HADOOP_HOME/sbin/start-dfs.sh

验证:

[root@a18ecbaa91c0 sbin]# jps
5251 SecondaryNameNode
5531 Jps
4894 DataNode
4751 NameNode

查看防火墙状态

firewall-cmd state

hadoop搭建好,启动服务后,无法从web界面访问50070

在hadoop完全分布式搭建好以后,从主节点启动正常,使用jps查看启动的进程,正常,在几个从节点上使用jps查看,显示正常,但从web上输入下面网址:

http://主节点IP:50070

无法正常连接显示

 试了若干网上查到的方法,是通过下面方法解决此问题的。

解决过程:

1、切换到root账号下,检查防火墙状态

  #firewall-cmd --state

      

2、需要关闭防火墙

     #systemctl stop firewalld.service

     再次检查防火墙状态,已经是not running

    #firewall-cmd --state

     

 3、从宿主机浏览器上输入网址:http://主节点IP:50070,可以正常显示了。

   

   4.设置主节点上禁止开机启动防火墙

     #systemctl disable firewalld.service

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值