Hadoop学习笔记: HDFS(1)

一. HDFS概述

HDFS组成架构

 NameNode(nn) 是整个集群的管理. 管理HDFS的名称空间, 配置副本策略, 数据块(Block)映射信息以及处理客户端读写请求.

DataNode 是下属的工作组, 当NameNode下达命令时, 由DataNode来实际执行命令: 存储实际的数据块, 以及执行数据块的读/写操作

Client 也即客户端, 是用户的操作端. 主要承担以下任务: 

> 文件切分. 用户将文件上传至HDFS时, Client将文件切分成Block进行上传

> 与NameNode交互获取文件的位置信息

> 与DataNode交互进行读/写操作

> 通过命令管理HDFS, 例如NameNode格式化

> 通过命令访问HDFS

SecodaryNameNode 并非NameNode的备份, 而是协助NameNode完成工作

> 辅助NameNode, 定期合并Fsimage和Edits并推送给NameNode

> 紧急情况下辅助恢复NameNode

HDFS文件块大小

HDFS中的文件在物理上是分块储存, 块(Bolck)的默认大小在Hadoop2.x/3.x版本中是128M, 1.x版本中是64M. 块的大小可以通过配置参数(dfs.blocksize)来规定.

为何需要寻找到一个合适的块大小呢? 因为如果块设置得太小, 则块数量会增长, 这样会增加寻址时间. 相反的, 如果块设置得太大, 则会使得数据从磁盘传输至服务器的时间变大. 实际上, HDFS块的大小主要取决于磁盘传输速率, 也即I/O端口限制了块的大小.

二. HDFS的Shell操作(重点)

> 查看全部命令

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop fs

命令及参数解读:Hadoop - hdfs dfs常用命令的使用 - 整合侠 - 博客园Hadoop - hdfs dfs常用命令的使用 用法 1,-mkdir 创建目录Usage:hdfs dfs -mkdir [-p] < paths>选项:-p很像Unix mkdirhttps://www.cnblogs.com/lizm166/p/13355183.html> 查看命令参数(本例为 -rm 命令)

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -help rm

1) 上传

> -moveFromLocal 从本地剪切粘贴到HDFS

参数一: 本地原文件路径

参数二: 需要储存的HDFS文件路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs  -moveFromLocal  ./shuguo.txt  /sanguo

> -copyFromLocal 或 -put 从本地拷贝文件到HDFS

参数一: 本地原文件路径

参数二: 需要储存的HDFS文件路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal weiguo.txt /sanguo

 > -appendToFile 追加一个文件到已存在的文件末尾

参数一: 本地源文件路径

参数二: HDFS上需要追加的目标文件路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt

2) 下载

> -copyToLocal 或 -get 从HDFS拷贝到本地

参数一: HDFS原文件路径

参数二: 需要储存在本地的文件路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo.txt ./
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt

3) HDFS直接操作

> -ls 显示目录信息

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /sanguo

> -cat 显示文件内容

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo.txt

> -chgrp -chmod -chown 同Linux文件系统中的用法一致, 修改文件所属权限

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs  -chmod 666  /sanguo/shuguo.txt
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs  -chown  atguigu:atguigu   /sanguo/shuguo.txt

> -mkdir 创建路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo

> -cp 从HDFS的一个路径拷贝到HDFS的另一个路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo

> -mv 在HDFS中移动文件

> -tail 显示一个文件末尾1kb的数据

> -rm 删除文件或文件夹

> -rm -r 递归删除目录及目录里的内容

> -du 统计文件夹的大小信息

参数:
-s选项将显示文件长度的汇总摘要,而不是单个文件。
-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)

 > -setrep 设置HDFS中副本数量

三. HDFS的API操作

客户端环境准备

1) 将HDFS的Windows依赖文件拷贝到非中文路径
2) 配置HADOOP_HOME环境变量

 
3) 配置Path环境变量
 

4) 创建Maven工程, 导入相应的依赖坐标及日志
依赖坐标:

<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.1.3</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.30</version>
    </dependency>
</dependencies>

 日志: 在项目的src/main/resource目录下, 创建名为"log4j.properties"的文件

log4j.rootLogger=INFO, stdout  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
log4j.appender.logfile=org.apache.log4j.FileAppender  
log4j.appender.logfile.File=target/spring.log  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

5) 创建包名 com.atguigu.hdfs
Windows客户端下的HDFS操作客户端icon-default.png?t=LA92https://github.com/Mimimitsu/HDFSclientMavenProject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值