HDFS概述

文章目录

  • 一、HDFS概述
    • 1. 什么是HDFS
    • 2. HDFS基本架构
    • 3. 搭建[HDFS]
    • 4. 安装hadoop
    • 5. hadoop配置文件的配置 etc/hadoop
    • 6. namenode的格式化
    • 7. 启动hadoop守护进程
    • 8. 测试验证安装成果
    • 9. Hadoop HDFS运行过程中的错误分析#
    • 10、HDFS的client访问
    • 11.指定 Hadoop的启停脚本
  • 二、NameNode的持久化(persistent)
    • 1. FSImage和EditsLog
    • 2、 安全模式(safe mode)
    • 3、SecondaryNameNode作用
    • 4、HANameNode集群(高可用)
    • 5、 hdfs写文件的步骤
    • 6、 hdfs读取文件步骤
    • 7、hadoop的shuffle过程
    • 8、HANameNode集群的搭建

一、HDFS概述

1. 什么是HDFS

   HDFS 全称是Hadoop Distributed File System hadoop分布式(cluser)文件存储系统.

2. HDFS基本架构

1、hadoop1体系 64M一个快(少)
hadoop2体系 128M一个块(默认)
8TB (3TB/3TB/2TB)n=X/128 个快
提高数据读写效率(利于并行读取数据)

2、冗余存储 (24TB 动态扩充 ,保证数据安全)
3、校验和(确定块是否完整 是否损坏)
	原理:实现思想(加密算法MD5 不可逆)
	         可对二进制加密,128M加密----> 32个字符串(16进制0F) 
	         元不变(加密结果也不会改变)
	         datanode 定期检查块 (向nameNode汇报块是否损坏)。
NameNode 的持久化?:

HDFS概述_第1张图片

3. 搭建[HDFS]

/opt/models   原始文件
/opt/install  安装文件放置的位置  
1. linux服务器的基本配置
   设置ip,关闭防火墙,关闭selinux,配置主机名,主机与ip映射
2. 安装jdk 1.7+ 
   rpm -ivh jdk-7u71-linux-x64.rpm  默认安装位置 /usr
   环境变量的配置
       vi /etc/profile   环境变量 linux 所有用户生效
       
       vi ~/.bash_profile 环境变量 当前用户生效
       vi ~/.bashrc
        JAVA_HOME=/usr/java/jdk1.7.0_71
        CLASSPATH=.
        PATH=$JAVA_HOME/bin:$PATH:$HOME/bin

        export JAVA_HOME
        export CLASSPATH
        export PATH
        
        source .bash_profile

HDFS概述_第2张图片

4. 安装hadoop

   tar -zxvf hadoop-2.5.2.tar.gz -C /opt/install

5. hadoop配置文件的配置 etc/hadoop

   1.1 hadoop-env.sh
       export JAVA_HOME=/usr/java/jdk1.7.0_71
   1.2 core-site.xml
       
        		
           fs.defaultFS
           hdfs://hadoop.baizhiedu.com:8020
        
       
        
	       hadoop.tmp.dir
	       /opt/install/hadoop-2.5.2/data/tmp
         
   1.3 hdfs-site.xml
       
        		
          dfs.replication
          1
        
   1.4 mapred-site.xml
       
           	 	        		
              mapreduce.framework.name
              yarn
           
   1.5 yarn-site.xml
       
           yarn.nodemanager.aux-services
           mapreduce_shuffle
       
   1.6 slaves
       hadoop2.baizhiedu.com

6. namenode的格式化

【第一次搭建hdfs集群时需要使用】
      目的作用:格式化hdfs系统,并且生成存储数据块的目录
      bin/hdfs namenode -format

7. 启动hadoop守护进程

      sbin/hadoop-daemon.sh start namenode
      sbin/hadoop-daemon.sh start datanode
      sbin/yarn-daemon.sh start resourcemanager
      sbin/yarn-daemon.sh start nodemanager
      
      sbin/hadoop-daemon.sh stop namenode
      sbin/hadoop-daemon.sh stop datanode
      sbin/yarn-daemon.sh stop resourcemanager
      sbin/yarn-daemon.sh stop nodemanager

8. 测试验证安装成果

ps -ef | grep java
      jps 查看相关4个进程
      通过网络进行访问测试
           浏览器 http://hadoop2.baizhiedu.com:50070 hdfs
                 http://hadoop2.baizhiedu.com:8088  yarn

9. Hadoop HDFS运行过程中的错误分析#

   1. 查看日志
      tail -nxxx 文件名
      $HADOOP_HOME/logs 
      [hadoop-用户名-namenode-主机名.log]
      hadoop-root-namenode-hadoop2.baizhiedu.com.log
      hadoop-root-datanode-hadoop2.baizhiedu.com.log
      yarn-root-resourcemanager-hadoop2.baizhiedu.com.log
      yarn-root-nodemanager-hadoop2.baizhiedu.com.log

10、HDFS的client访问

HDFS概述_第3张图片

1. 查看目录结构
   bin/hdfs dfs -ls 路径
   bin/hdfs dfs -ls /
2. 创建文件夹
   bin/hdfs dfs -mkdir /suns
   bin/hdfs dfs -mkdir -p /liuh/xiaojr
3. 本地上传文件到hdfs中
   bin/hdfs dfs -put /root/hdfs/data /suns
   bin/hdfs dfs -put local_path hdfs_path
4. 查看文件内容
   bin/hdfs dfs -text /suns/data
   bin/hdfs dfs -cat /suns/data
5. 删除
   bin/hdfs dfs -rm /suns/data
   注意事项:可以修改垃圾桶的存活时间
   core-site.xml
   	
		   fs.trash.interval
		   10
    
    垃圾桶的位置:/user/root/.Trash/190522010000/suns/data
    hdfs:有权限:
    hdfs-site.xml
    
		   dfs.permissions.enabled
		   false
    
6. 删除非空文件夹 
   bin/hdfs dfs -rmr /suns
7. 从hdfs下载文件到本地
   bin/hdfs dfs -get hdfs_path local_path
8. cp mv

11.指定 Hadoop的启停脚本


shell脚本 当前目录执行方式  ./hadoop-start.sh
         绝对路径执行shell /opt/install/hadoo-2.5.2/hadoop-start.sh

linux  hadoop-start.sh
       sbin/hadoop-daemon.sh start namenode
       sbin/hadoop-daemon.sh start datanode
       sbin/yarn-daemon.sh start resourcemanager
       sbin/yarn-daemon.sh start nodemanager
    
       hadoop-stop.sh
       sbin/hadoop-daemon.sh stop namenode
       sbin/hadoop-daemon.sh stop datanode
       sbin/yarn-daemon.sh stop resourcemanager
       sbin/yarn-daemon.sh stop nodemanager
 sbin/yarn-daemon.sh start nodemanager
    
       hadoop-stop.sh
       sbin/hadoop-daemon.sh stop namenode
       sbin/hadoop-daemon.sh stop datanode
       sbin/yarn-daemon.sh stop resourcemanager
       sbin/yarn-daemon.sh stop nodemanager

二、NameNode的持久化(persistent)

HDFS概述_第4张图片

NameNode在运行时,元数据放置在内存中。
	如果内存出现问题,则元数据丢失。
	为了保证元数据安全,NameNode有对应的持久化机制,把元数据持久化到硬盘存储。

1. FSImage和EditsLog

1、FSImage(文件系统镜像二进制)
  存储某一个时间点(checkPoint)的NameNode镜像数据
  默认存储位置  /opt/install/hadoop-2.5.2/data/tmp/dfs/name
   dfs.namenode.name.dir
   
 2、EditsLog 
   可编辑日志二进制 记录(检查点以后的所有写操作)
   默认存储位置 dfs.namenode.edits.dir

3、 定制FSImage和EditsLog的存储位置
   ~~~markdown
   hdfs-site.xml
   
       dfs.namenode.name.dir
       file:///xxx/xxxx
   
   
       dfs.namenode.edits.dir
       file:///xxx/xxxx
   

2、 安全模式(safe mode)

  每一次启动namenode时,hdfs都需要进行FSImage和EditsLog的整合,
在这个过程中,不允许用户做写操作,把这个过程称之为安全模式(safe mode),默认30秒
 (1). safe mode相关命令
      bin/hdfs dfsadmin -safemode [enter leave get] 
 (2). HDFS集群启动是,完成流程
      HDFS集群启动 过程 (安全模式)
      1,整合 FSImage和EditsLog 生成新的EditsLog 和 FSImage,由新EditsLog接收用户写操作命令
      2, DataNode都需NameNode主动汇报健康情况(心跳)3秒
      3, 汇报块列表  通过校验和 检查块是否可用,并定期1小时汇报。

3、SecondaryNameNode作用

HDFS概述_第5张图片

自定义SecondaryNameNode 拉取数据的周期
hdfs-site.xml
	dfs.namenode.checkpoint.period   3600秒
	dfs.namenode.checkpoint.txns     1000000
secondaryNameNode启动方式:
	sbin/start-dfs.sh
 	sbin/hadoop-daemon.sh start secondarynamenode

定制secondaryNameNode 启动的节点
	hdfs-site.xml
	dfs.namenode.secondary.http-address    0.0.0.0:50090
	dfs.namenode.secondary.https-address   0.0.0.0:50091	

4、HANameNode集群(高可用)


zookeeper:选主过程
   1 ,2,3,4,5,按编号依次启动:
	 服务器1启动,给自己投票,发投票信息,由于其它机器还没有启动所以它收
不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
     服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大
所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
	服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3
的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
      服务器5启动,后面的逻辑同服务器4成为小弟。	
      
	LOOKING,竞选状态。
	FOLLOWING,随从状态,同步leader状态,参与投票。
	OBSERVING,观察状态,同步leader状态,不参与投票。
	LEADING,领导者状态。

zookeeper 集群高可靠 (奇数台)
  作用:
   1、选主namenode(投票)active/standby
   2、管理EdisLog(QJN),将EdisLog同步给Standby(NameNode)

standyBy(Namenode)
	作用:
	  1、从zookerper上拉取edisLog 进行整合成 FSImage 替换原有的FSImage
	  2、接受dataNode 的元数据信息。
	  3、当activeNameNode 宕机时,全权接管 activeNameNode的所有功能,对外进行服务

HDFS概述_第6张图片
HDFS概述_第7张图片

5、 hdfs写文件的步骤

	(1)client向NameNode申请上传…/xxx.txt文件
	(2)NN向client响应可以上传文件
	(3)ClientNameNode申请DataNode
	(4)NN向Client返回DN1,DN2,DN3
	(5)Client向DN1,DN2,DN3申请建立文件传输通道
	(6)DN3,DN2,DN1依次响应连接

HDFS概述_第8张图片

6、 hdfs读取文件步骤

	(1)client向NN请求下载…/xxx.txt文件
	(2)NN向client返回文件的元数据
	(3)Client向DN1请求访问读数据blk_1
	(4)DN1向Client传输数据
	(5)Client向DN2请求访问读数据blk_2
	(6)DN2向Client传输数据

HDFS概述_第9张图片

7、hadoop的shuffle过程

1)、Map的输出会先写到内存缓冲区中
	(2)、达到 阀值(100M)/0.8产生溢写
	(3)、产生临时文件,写到本地磁盘
	(4)、多个file1 临时文件  marge排序合并(按分区、排序) ,个数为分区个数。
		   存在本地linux服务器端。

		(1)、reduce 通过 http 找nodemanager 
		(2)、主动拉去数据到 内存 环形缓冲区(分组排序 group sort)
		(3)、产生溢写——多个临时文件
		(4)、临时文件merge汇总(分组 、排序)交给——reduce

HDFS概述_第10张图片

8、HANameNode集群的搭建

1. zookeeper集群
   1.1 解压缩
       tar -zxvf zookeeper-xxx-tar.gz -C /opt/install
   1.2 创建数据文件夹
       mdkir  zookeeper_home/data
   1.3 conf目录修改zookeeper的配置文件
       修改zoo_sample.cfg 为 zoo.cfg
       mv zoo_sample.cfg zoo.cfg
       编辑内容
       dataDir=/opt/install/zookeeper-3.4.5/data

       server.0=hadoop2.baizhiedu.com:2888:3888
       server.1=hadoop3.baizhiedu.com:2888:3888
       server.2=hadoop4.baizhiedu.com:2888:3888
   1.4 zookeeper_home/data
       myid文件    0          hadoop2.baizhiedu.com
       myid文件    1          hadoop3.baizhiedu.com
       myid文件    2          hadoop4.baizhiedu.com
   1.5 scp -r 命令 同步集群中所有节点 并 修改对应的myid文件
   1.6 主节点 ssh 其他节点
   1.7 启动zk服务
       bin/zkServer.sh start | stop | restart
       bin/zkServer.sh status 查看集群状态 【必须集群完整启动完成】
       
       bin/zkCli.sh [leader]

2. HA-HDFS集群
   删除 data/tmp 
   2.1 core-site.xml
          		
			fs.defaultFS
			hdfs://ns
		
	    
			hadoop.tmp.dir
			/opt/install/hadoop-2.5.2/data/tmp
	   
	   
		  ha.zookeeper.quorum
	      hadoop2.baizhiedu.com:2181,hadoop3.baizhiedu.com:2181,hadoop4.baizhiedu.com:2181
	  
   2.2 hdfs-site.xml 
       	
		   dfs.permissions.enabled
		   false
		
		
	  
	  
		  dfs.nameservices
		  ns
	  
	  
	  
		  dfs.ha.namenodes.ns
		  nn1,nn2
	  
  
	  
		  dfs.namenode.rpc-address.ns.nn1
		  hadoop2.baizhiedu.com:8020
	  
	  
	  
		  dfs.namenode.http-address.ns.nn1
		  hadoop2.baizhiedu.com:50070
	  
  
	  
		  dfs.namenode.rpc-address.ns.nn2
		  hadoop3.baizhiedu.com:8020
	  
	  
	  
		  dfs.namenode.http-address.ns.nn2
		  hadoop3.baizhiedu.com:50070
	  

	
	
		dfs.namenode.shared.edits.dir
		qjournal://hadoop2.baizhiedu.com:8485;hadoop3.baizhiedu.com:8485;hadoop4.baizhiedu.com:8485/ns
	

	
		dfs.journalnode.edits.dir
		/opt/install/hadoop-2.5.2/journal
	
	
	
		dfs.ha.automatic-failover.enabled
		true
	
    
	
		dfs.client.failover.proxy.provider.ns
		org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
	
	
	
		dfs.ha.fencing.methods
		sshfence
	
	
	
		dfs.ha.fencing.ssh.private-key-files
		/root/.ssh/id_rsa
	
	
   2.3 yarn-env.sh添加如下内容
   export JAVA_HOME=/usr/java/jdk1.7.0_71

    首先启动各个节点的Zookeeper,在各个节点上执行以下命令:
    bin/zkServer.sh start

    在某一个namenode节点执行如下命令,创建命名空间
    bin/hdfs zkfc -formatZK

    在每个journalnode节点用如下命令启动journalnode
    sbin/hadoop-daemon.sh start journalnode

    在主namenode节点格式化namenode和journalnode目录
    bin/hdfs namenode -format ns

    在主namenode节点启动namenode进程
    sbin/hadoop-daemon.sh start namenode

    在备namenode节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程!

    bin/hdfs namenode -bootstrapStandby
    sbin/hadoop-daemon.sh start namenode

    在两个namenode节点都执行以下命令
    sbin/hadoop-daemon.sh start zkfc

    在所有datanode节点都执行以下命令启动datanode
    sbin/hadoop-daemon.sh start datanode

    日常启停命令
    sbin/start-dfs.sh
    sbin/stop-dfs.sh

你可能感兴趣的:(数据)