分布式存储:HDFS
- 大数据技术
- HDFS包含层次的作用
- NameNode
- SecondaryNameNode
- DataNode
- HDFS数据读取过程
- 具体过程
- HDFS数据上传过程
- 具体过程
- NameNode元数据持久化(将内存中的元数据储存到磁盘中)
- DataNode备份
- HDFS伪分布式搭建
大数据技术
大数据即为短时间内快速的产生海量的多种多样的有价值的数据。
大数据技术包括分布式存储(HDFS适合储存大文件、Lustre适合储存小文件、……)、分布式计算(批处理:积攒一定数据后再处理数据、流处理:每产生一条数据,就进行处理)、机器学习等,以下篇幅主要讲HDFS数据上传、备份的过程以及如何在CentOS 6.5环境中HDFS伪分布式搭建。
HDFS包含层次的作用
NameNode
- 接受客户端的读写请求;
- 储存管理元数据(权限、上传时间、文件大小、属主……);
- 收集DataNode上传的Block列表信息;
- edits文件:用来存储操作;fsimage文件:用来存储持久化的元数据。
SecondaryNameNode
- 持久化(备份)NameNode中的元数据。
DataNode
- 以Block块的形式存储源数据;
- 接受客户端的读数据请求。
HDFS数据读取过程
具体过程
因为在NameNode节点中存储着所有的BlockID和对应的DataNode地址,所以客户端Client在读取数据时先要根据选择的文件的BlockID从NameNode节点中获取存储该源数据的DataNode地址,再从DataNode中读取源数据,最后将所有Block进行拼接。
HDFS数据上传过程
首先先设想你有大概10TB的文件需要存储,但是你自身并没有足够的空间,于是你就将文件拆分后存于不同的U盘或硬盘中,那么这些U盘和硬盘就相当于相同数量的DataNode。并且根据这些文件的类型不同,你需要将每个存储工具标号并将其中存入的信息类型记录到纸上,那么这张纸就相当于HDFS中的NameNode,以便需要时快速获取数据。而你自身就相当于客户端。
具体过程
启动时:进入安全模式,加载fsimage,如果edits不为空,NameNode则会将edits文件合并、检查DataNode状态,如果DataNode挂掉了,则指挥进行数据备份;
注意:在处于安全模式时,如果fsimage加载完,可以看到文件目录,但不可以读取文件
- 集群启动时,DataNode会向NameNode发送Block位置、DataNode地址;
- 客户端Client根据 文件大小/128MB=Block数量和上传时间、权限等元数据汇报给NameNode,并请求一个存放Block的ID;
- 客户端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=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默认端口)