分布式存储:HDFS

  • 大数据技术
  • HDFS包含层次的作用
  • NameNode
  • SecondaryNameNode
  • DataNode
  • HDFS数据读取过程
  • 具体过程
  • HDFS数据上传过程
  • 具体过程
  • NameNode元数据持久化(将内存中的元数据储存到磁盘中)
  • DataNode备份
  • HDFS伪分布式搭建


大数据技术

       大数据即为短时间内快速的产生海量多种多样有价值的数据。
       大数据技术包括分布式存储(HDFS适合储存大文件、Lustre适合储存小文件、……)、分布式计算(批处理:积攒一定数据后再处理数据、流处理:每产生一条数据,就进行处理)、机器学习等,以下篇幅主要讲HDFS数据上传、备份的过程以及如何在CentOS 6.5环境中HDFS伪分布式搭建。

HDFS包含层次的作用

NameNode

  1. 接受客户端的读写请求;
  2. 储存管理元数据(权限、上传时间、文件大小、属主……);
  3. 收集DataNode上传的Block列表信息;
  4. edits文件:用来存储操作;fsimage文件:用来存储持久化的元数据。

SecondaryNameNode

  1. 持久化(备份)NameNode中的元数据。

DataNode

  1. 以Block块的形式存储源数据;
  2. 接受客户端的读数据请求。

HDFS数据读取过程

具体过程

       因为在NameNode节点中存储着所有的BlockID和对应的DataNode地址,所以客户端Client在读取数据时先要根据选择的文件的BlockID从NameNode节点中获取存储该源数据的DataNode地址,再从DataNode中读取源数据,最后将所有Block进行拼接。

HDFS数据上传过程

       首先先设想你有大概10TB的文件需要存储,但是你自身并没有足够的空间,于是你就将文件拆分后存于不同的U盘或硬盘中,那么这些U盘和硬盘就相当于相同数量的DataNode。并且根据这些文件的类型不同,你需要将每个存储工具标号并将其中存入的信息类型记录到纸上,那么这张纸就相当于HDFS中的NameNode,以便需要时快速获取数据。而你自身就相当于客户端。

具体过程

       启动时:进入安全模式,加载fsimage,如果edits不为空,NameNode则会将edits文件合并、检查DataNode状态,如果DataNode挂掉了,则指挥进行数据备份;
注意:在处于安全模式时,如果fsimage加载完,可以看到文件目录,但不可以读取文件

  1. 集群启动时,DataNode会向NameNode发送Block位置、DataNode地址;
  2. 客户端Client根据 文件大小/128MB=Block数量和上传时间、权限等元数据汇报给NameNode,并请求一个存放Block的ID;
  3. 客户端Client获取了当前负载较低的DataNode地址后将每个Block拆分为一个个packet(每个packet最大为64KB),通过管道存入到DataNode中;
    注意:
           1.集群外提交:第一个DataNode为当前负载较低的服务器,第二个为其他机架上的随机一台服务器,第三个为第二台服务器机架上另外的一台服务器
           2.集群内提交:第一个DataNode为客户端的服务器,第二个和第三个同上
           3.HDFS属于集群外提交
           4.使用管道传输、将Block拆分为packet目的:可以实现并行传输,提高效率

NameNode元数据持久化(将内存中的元数据储存到磁盘中)

       1. 将操作写入到edits文件中;
       2. 在过去3600毫秒或者当edits文件大小超过64MB时SecondaryNameNode将会自动抓取edits文件并重演,将获取到的元数据存入到SecondaryNameNode中的fsimage文件中,最后与NameNode中的fsimage合并产生fsimageckpt,最后将fsimageckpt推给NameNode中的fsimage;
注意:SecondaryNameNode抓取edits文件时,NameNode将创建一个edits.new文件用来存储新的操作,持久化完成后edits.new文件将会改名为edits文件

DataNode备份

       1.集群外提交:第一个DataNode为当前负载较低的服务器,第二个为其他机架上的随机一台服务器,第三个为第二台服务器机架上另外的一台服务器
       2.集群内提交:第一个DataNode为客户端的服务器,第二个和第三个同上

HDFS伪分布式搭建

1.配置免密登录

ssh-keygen -t rsa
 ssh-copy-id -i ~/.ssh/id_rsa.pub root@用户名



2.配置jdk
下载并解压jdk.tar.gz 下载地址.
#vi /etc/profile
打开文件后按“i”在最后插入
export JAVA_HOME=jdk路径
export PATH=hdfs能存放视频文件吗 hdfs存储视频_服务器JAVA_HOME/bin

3.下载并解压hadoop.tar.gz 下载地址.

4.修改hdfs-site.xml配置文件
将以下数据添加到hadoop/etc中的hdfs-site.xml中的<configuration>标签中

<property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.secondary.http-address</name><value>用户名:50090</value></property>


5.修改core-site.xml配置文件
将以下数据添加到hadoop/etc中的core-site.xml中的<configuration>标签中

<property><name>fs.defaultFS</name><value>hdfs://用户名:9000</value></property><property><name>hadoop.tmp.dir</name><value>/var/abc/hadoop/local</value></property>


6.修改slaves配置文件,在其中添加用户名

7.格式化NameNode(创建目录以及文件)
#hdfs namenode -format
注意:hdfs命令行需要将hadoop/bin加入到/etc/profile中才能使用
vi /etc/profile
在最后插入:export PATH=hadoop路径/bin

8.启动HDFS
#sh start-dfs.sh 如提示找不到sh为无效的命令行时可以cd到hadoop/sbin中执行该命令
如提示找不到JAVA_HOME则将hadoop/etc中的hadoop-env.sh中的JAVA_HOME地址手动输入

9.通过命令行操作HDFS文件系统

10.浏览器中输入用户名:50070查看hadoop网页(50070为NameNode默认端口)