分布式存储: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= P A T H : PATH: PATH: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默认端口)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值