Hadoop之HDFS实用篇

系列文章目录

Hadoop了解篇
Hadoop之HDFS
Hadoop之MapReduce
Hadoop之Yarn
Hadoop之优化&新特性



前言

当下数据量的爆发式增长,在一个操作系统中,我们很难存下所有数据,这时就需要将数据放在等多个操作系统的磁盘中。此时另一个难题就出来了,我们如何对多台电脑的磁盘进行管理呢?这个时候分布式文件管理系统就登场了。


一、HDFS是什么?

1.HDFS

是一个文件系统,用于储存文件,通过目录树来定位文件
并且是分布式的,文件分布在多台服务器的磁盘中。

2.应用场景

适合一次写入,多次读出,不支持文件的修改。(内部维持多个副本,随机写的话,分布式数据一致性会受到挑战。而如果一定要保证实时的数据一致性,那么性能上的牺牲就会太大了。所以说,随机写不属于HDFS的适用场景。)

3.HDFS特点

优点:

特点 为何?
高容错性 内部维持多个副本,单一副本丢失,可自动恢复
处理数据量大 最大处理TB、PB级别的数据;处理百万规模的文件数量
可在廉价机器上 内部维持多个副本,单一副本丢失,可自动恢复

缺点:

特点 为何?
低延迟储存做不到 多副本机制的弊端 ,毫秒级储存难以达到
多小文件高效存储做不到 会占用大量的NameNode的内存来储存文件元数据;小文件的寻址时间会超过读取时间
并发写入,随机修改做不到 一个文件只能一个写,不可以多线程同时写;仅支持数据的追加(Append)

二、HDFS组成

1.构架

组件 作用
NameNode 管理元数据、配置副本策略、管理Block映射信息、处理客户端读写请求
DataNode 存储实际的数据块、执行数据的读/写操作
Client 文件切分成Block然后上传 、与NameNode交互,获取文件位置信息、与DataNode交互,读取/写入数据、提供命令管理/操作HDFS,eg:对NameNode的格式化
Secondory NameNode 紧急情况下,可辅助恢复NameNode了,具体见后续

2.HDFS文件块(Block)大小的如何确定?

首先明白:HDFS上的文件在物理上是分块存储(Block),块的大小我们可以根据实际的生产环境通过配置参数(dfs blocksize)来设定。在老版本中默认大小为64M,新版本(2.X)中默认大小为128M。

why?

以从HDFS上下载一个文件为例:

约定:寻址时间为传输时间的1%时,为最佳状态
1.假设寻址时间为10ms,即查找目标Block的时间为10ms
2.因此在最佳状态下,传输时间为10/0.01=1s
3.而目前磁盘的传输速率普遍为100M/S
4.1S * 100M/S = 100M
5.最接近100M就是128M

3.HDFS的Shell操作

1)基本语法

bin/hadoop fs 具体命令
or
bin/hdfs dfs 具体命令

2)常用命令实操
(1)上传

-moveFromLocal:从本地剪切粘贴到HDFS上
hadoop fs -moveFromLocal ./helloworld.txt /input

-copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去
hadoop fs -copyFromLocal ./helloworld.txt /input

-appendToFile:追加一个文件到已经存在的文件末尾
hadoop fs -appendToFile helloworld.txt /input/yilei.txt

-put:等同于copyFromLocal
hadoop fs -put ./helloworld.txt /input

(2)下载

-copyToLocal:从HDFS上拷贝到本地
hadoop fs -copyToLocal /input/helloworld.txt ./

-get:等同于copyToLocal
hadoop fs -get ./helloworld.txt /input

-getmerge:合并多个文件下载
hadoop fs -getmerge /user/yilei/bin/* ./helloworld.txt

3)HDFS直接操作

-ls:显示目录信息
hadoop fs -ls

-mkdir:在HDFS上创建目录
hadoop fs -mkdir /sanguo/liubei.txt

-cat:显示文件内容
hadoop fs -cat /sanguo/liubei.txt

-cp :从HDFS的一个路径拷贝到HDFS的另一个路径
hadoop fs -cp /sanguo/liubei.txt /input/

-du:统计文件夹的大小信息
hadoop fs -du -s -h /sanguo
2.7k  /sanguo

-setrep:设置HDFS中的文件副本数
hadoop fs -setrep 10 /sanguo/liubei.txt

二、HDFS客户端操作

1.HDFS客户端环境准备

1)下载Hadoop
2)配置Hadoop的环境变量
3)配置Path环境变量,重启电脑
4)创建Maven工程,并导入相应的依赖

2.HDFS的API操作

获取文件系统对象的方式一:(常用方式)

public class HdfsClient{
   
	@Test
	public void testMkdirs(){
   
	//连接地址
	UIR uri = new URI("hdfs://hadoop01:9820");
	//创建配置文件对象
	Configuration conf = new Configuration();
	//1.文件系统对象
	/*
	参数一:NameNode的连接地址
	参数二:配置文件对象
	参数三:操作hdfs的用户
	*/
	FileSystem fs = FileSystem.get(uri,conf,"yilei")
	//2.对应操作
	System.out.println(fs
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值