分布式文件系统HDFS

本文概述:

1、大数据特征
2、大数据带来的革命性变革
3、Google大数据
4、分布式文件系统
5、HDFS优缺点
6、HDFS分布式文件的设计思想
7、组成结构
8、HDFS架构
9、HDFS读写数据流程
10、HDFS快照
11、HDFS日志收集实战案例
12、HDFS Java Idea操作
大数据特征:
1)大量化(Volume):存储量大,增量大
2)快速化(Velocity):告诉数据I/O
3)多样化(Variety):
来源多:搜索引擎,社交网络,通话记录,传感器
格式多:(非)结构化数据
4)价值密度低(Value):
大数据带来的革命性变革:
1)成本降低
2)软件容错,硬件故障视为常态
3)简化分布式并行计算
Google大数据
mapreduce:分布式计算框架 (mr、计算)
bigTable:大数据数据库 (存储、hbase(hbase不用sql--用hive可以去解释sql语句在hbase里头使用))
GFS:分布式集群管理分布式文件系统 (存储、hdfs)
HDFS: Hadoop Distributed FIle System是分布式文件系统,是GFS的克隆版
分布式文件系统:
1)dataset 量达到一定规模时,那么单机就没办法进行处理
2)把数据分布到各个独立的机器上(多台机器共同协作)
3)网络
HDFS优缺点:
HDFS优点:
1)硬件错误
2)流式数据访问
3)大规模数据集
4)简单的一致性模型
5)移动计算比移动数据更划算
6)异构软硬件平台间的可移植性
HDFS缺点:
1)不适合低延迟数据访问
2)不适合小文件存储
HDFS分布式文件的设计思想:
1)将一个文件拆分成多个Block(128MB通常)
2)每个block以多副本的方式存储在各个节点
3)保存元数据映射关系
4)负载均衡
5 ) 分布式并行计算
普通分布式文件的设计思想:
1)一个文件存储在一个节点上
2)每个文件多副本方式存储
3)负载难以均衡
组成结构
nn、dn:
block:块
fsimage:文件镜像
edits:账单
client:编写的客户端
HDFS架构:
1)Master(NameNode/NN) 带 N个Slaves(DataNode/DN)大数据场景经常常用的
后面所涉及的HDFS、YARN、HBase都是这种场景
2)1个文件会被拆分成多个Block
blocksize:128M
130M ==> 2个Block: 128M 和 2M
NN:
1)负责客户端请求的响应
2)负责元数据(文件的名称、副本系数、Block存放的DN)的管理
DN:
1)存储用户的文件对应的数据块(Block)
2)要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
NameNode + N个DataNode
建议:NN和DN是部署在不同的节点上
replication factor:副本系数、副本因子(我理解的其实就是DN的个数),存放在NN
HDFS读写数据流程
block副本存放策略:
1)在客户端相同的节点上存放第一个副本
如何客户端不在集群内呢?就随机挑选一个节点
2)第二个副本:存放在与第一个不同的随机选择的机架上
3)第三个副本:存放在与第二个副本相同机架但是不同的节点上
4)大于三的副本:被放置在集群中的随机节点上



HDFS快照
使用场景
1)备份
2)防止用户的误操作
3)容灾
注意:如果你想创建快照,第一步必须要通过hdfs dfsadmin -allowSnapshot path之后,才能创建快照
允许快照:hdfs dfsadmin -allowSnapshot /user/hadoop
创建快照:hdfs dfs -createSnapshot /user/hadoop s0(快照名称)
表示创建成功:Created snapshot /user/hadoop/.snapshot/s0
查找快照:hadoop fs -ls /user/hadoop/.snapshot
创建文件夹:hadoop fs -touchz /user/hadoop/f{1,2,3}
再次创建快照:hdfs dfs -createSnapshot /user/hadoop s1(此时的快照包含新建的文件)
删除文件:hadoop fs -rm /user/hadoop/f3
查找误操作快照:hadoop fs -ls -R /user/hadoop/.snapshot
拷贝误操作:hdfs dfs -cp -ptopax /user/hadoop/.snapshot/s1/f3 /user/hadoop/
重命名:hdfs dfs -renameSnapshot /user/hadoop/ oldname newname
查询快照目录:hdfs lsSnapshottableDir
比较快照差异:hdfs snapshotDiff /user/hadoop/ num1 num2
删除快照:hdfs dfs -deleteSnapshot /user/hadoop/ s_init
禁用快照:hdfs dfsadmin -disallowSnapshot /user/hadoop/
HDFS日志收集实战案例
需求:将业务系统产生的日志(用户行为日志、业务系统日志)通过我们开发应用程序,将其日志收集到HDFS

HDFS Java API 操作
1、创建maven项目,pom.xml文件中下载hadoop jar包
< dependencies >
< dependency >
< groupId > org.apache.hadoop </ groupId >
< artifactId > hadoop-client </ artifactId >
< version > 2.7.3 </ version >
</ dependency >
</ dependencies >
2、创建文件夹
Configuration cfg = new Configuration();
FileSystem files = FileSystem. get (cfg);
files.mkdirs( new Path( "file1" ));
3、上传文件
String path = "填写你上传文件路径 " ;
InputStream in = new FileInputStream(path);
byte [] buffer = new byte [ 1024 ];
FSDataOutputStream out = files.create( new Path( "file1/a.java" ));
int n = 0 ;
while ( true ){
n=in.read(buffer);
if (n==- 1 ){
break ;
}
out.write(buffer, 0 ,n);
out.flush();
}
in.close();
out.close();
3、下载文件
String dowloadpath = "填写你下载文件的存储位置 " ;
OutputStream out = new FileOutputStream( new File(dowloadpath, "b.java" ));
FSDataInputStream in = files.open( new Path( "file1/a.java" ));
byte [] buffer = new byte [ 1024 ];
int n = 0 ;
while ( true ) {
n = in.read(buffer);
if (n == - 1 ) {
break ;
}
out.write(buffer, 0 , n);
out.flush();
}
4、日志收集
Logger log = LogManager. getLogger ( "类名" );
int i = 0 ;
while ( true ){
log.info( "......." + new Date().toString()+ ".............." );
i++;
Thread. sleep ( 500 );
if (i> 10000 ){
break ;
}
}
resources/log4j.properties:
log4j.rootLogger = INFO,log
log4j.appender.log = org.apache.log4j.RollingFileAppender
log4j.appender.log.layout = org.apache.log4j.PatternLayout
log4j.appender.log.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
log4j.appender.log.Threshold = INFO
log4j.appender.log.ImmediateFlush = TRUE
log4j.appender.log.Append = TRUE
#log4j.appender.log.File = 这块可以写 hadoop 集群下面
#下面的路径是日志存放文件
log4j.appender.log.File = D:/Program Files/BigData/IDeaProject/logs/access.log
log4j.appender.log.MaxFileSize = 10KB
log4j.appender.log.MaxBackupIndex = 20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值