hdfs dfs -chmod -R 777 /install.log
chown
格式:hdfs dfs -chmod [-R] URI[URI …]
作用:改变文件的所属用户和用户组,如果使用-R选项,则对整个目录有效递归执行,使用这一命令的用户必须是文件的所属用户,或者超级用户
hdfs dfs -chown -R hadoop:hadoop /install.log
appendToFile
格式:hdfs dfs -appendToFile …
作用:追加一个或者多个文件到hdfs指定文件中,也可以从命令行读取输入
hdfs dfs -appendToFile a.xml b.xml /big.xml
HDFS文件 限额配置
hdfs dfs -count -q -h /user/root/dir1 #查看配额信息
hdfs dfs -mkdir -p user/root/dir #创建hdfs文件夹
hdfs dfsadmin -setQuota 2 dir #给该文件夹下面设置最多上传两个文件,发现只能上传一个文件
hdfs dfsadmin -clrQuota /user/root/dir #清楚文件数量限制
空间大小限额
在设置空间配额时,设置的空间至少是block_size*3大小
hdfs dfsadmin -setSpaceQuota 4k /user/root/dir #限制空间大小4kb
hdfs dfs -put /root/a.txt /user/root/dir
生成任意大小文件的命令
dd if=/dev/zero of=1.txt bs=1M count=2 #生成2M的文件
清楚空间配额限制
hdfs dfsadmin -setSpaceQuota dirq
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbN1YHpQ-1629014721324)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814174354575.png)]
安全模式操作命令
hdfs dfsadmin -safemode get #查看安全模式状态
hdfs dfsadmin -safemode enter #进入安全模式
hdfs dfsadmin -safemode leave #离开安全模式
测试写入速度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x9T2oTvp-1629014721325)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814174905487.png)]
完成之后查看写入速度结果
hdfs dfs -text /benchmarks/TestDFSIO/io_write/part-0000
测试读取速度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IE8bPbFT-1629014721325)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814175737924.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ugWw4fV-1629014721326)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814204225595.png)]
-
Client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否存在,父目录是否存在,返回是否可以上传
-
Client请求第一个block该传输到哪些DataNode服务器上
-
NameNode根据配置文件中指定的被封数量及机架感知原理进行文件分配,返回可用的DataNode地址如:A,B,C
Hadoop在设计时3考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储测量为本地一份,同机机架内其他某一节点上一份,不同机架的某一节点上一份。
-
Client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,后逐级返回client
-
Client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认64K),A收到一个packet就会传给B,B传给C,A每传爱一个packet会放入一个应答队列等待应答
-
数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipelineack发送给Client
-
当一个block传输完成之后,Client再吃请求NameNode上传第二个block到服务1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMBOpW5h-1629014721326)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814205646759.png)]
-
Client向NameNode发起RPC请求,来确定请求文件block所在的位置
-
NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址;这些返回的DN地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的DN状态为STALE,这样的排靠后
-
Client选取排序靠前的DataNode来读取block,然后客户端本身就是DataNode,那么将从本地直接获取数据(短路读取特性)
-
底层上本质是建立Socket Stream(FSDataInputStream),重复的的调用父类DataInputStream的read方法,直到这个块上的数据读取完毕;
-
当读完列表的block后,若文件读取还没有结束,客户端会继续想NameNode获取下一批block列表;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOiRiZ3H-1629014721327)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814212944070.png)]
当Hadoop的集群当中,NameNode的所有元数据信息都保存到FsImage与Eidts文件当中,这两个文件啊就记录了所有的是数据的元数据信息,元数据信息的保存目录配置在了hdfs-site.xml当中
dfs.namenode.name.dir
file:///export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas,file:///export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2
dfs.namenode.edits.dir
file:///export/servers/hadoop-2.7.5/hadoopoDatas/nn/edits
edits
-
edits存放了客户端最近一段时间的操作日志
-
客户端对HDFS进行写文件时会首先记录在edits文件中
-
edits修改时元数据也会更新
fsimage
-
NameNode中关于元数据的镜像,一般称为检查点,fsimage存放了一份比较完整的元数据信息
-
因为fsimage是NameNode的完整的镜像,如果每次加载到内存生成树拓扑结构,这是非常耗内存和CPU,所以一般开始时对NameNode的操作都放在edits中
-
fsimage内容包含了NameNode管理下的所有DataNode文件及文件block及block所在的DataNode的元数据信息
-
随着edits内容增大,就需要一定时间点和fsimage合并
fsimage中的文件信息查看
使用命令 hdfs oiv
cd /export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas
hdfs oiv -i fsimage_0000000000000000864 -p XML -o hello.xml
edits中的文件信息查看
使用命令 hdfs oev
cd /export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas
hdfs oev -i edits_0000000000000000865-0000000000000000866 -p XML -o myedit.xml
SecondaryNameNode如何辅助管理fsimage与edits文件?
-
SecondaryNameNode定期合并fsimage和edits,把edits控制在一个范围内
-
配置SecondaryNameNode
-
SecondayNameNode在conf/masters中指定
-
在masters指定的机器上,修改hdfs-site.xml
dfs.http.address
host:50070
- 修改core-site.xml,这一步不做配置保持默认也可以
//多久记录一次 HDFS镜像,默认1小时
fs.checkpoint.period
3600
//一次记录多大,默认64M
fs.checkpoint
67108864
-
SecondaryNameNode通知NameNode切换editlog
-
SecondaryNameNode从NameNode中获得fsimage和editlog(通过http方式)
-
SecondaryNameNode将fsimage载入内存,然后开始合并editlog,合并之后称为新的fsimage
-
SecondaryNameNode将新的fsimage发回给NameNode
-
NameNode用新的fsimage替换旧的fsimage
特点
完成合并的SecondaryNameNode,会请求NameNode停止使用edits,暂时将新鞋操作放入一个新的文件夹中edits_new
==============================================================================
配置Window下的Hadoop环境
在windows系统需要配置hadoop运行环境,否则直接运行代码会出现以下问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXzJTdOh-1629014721328)(C:\Users\WANG\AppData\Roaming\Typora\typora-user-images\image-20210814233506617.png)]
步骤:
第一步:将hadoop2.7.5文件夹拷贝到一个没有中文没有空格的路径下面
第二步:在windows上面配置hadoop的环境变量:HADOOP_HOME,并将%HADOOP_HOME%\bin添加到path中
第三步:把hadoop2.7.5文件夹中bin目录下的hadoop.dll文件放到系统盘:C:\Window\System32目录
第四步:关闭windows重启
导入Maven依赖
org.apache.hadoop
hadoop-common
2.7.5
org.apache.hadoop
hadoop-client
2.7.5
org.apache.hadoop
hadoop-hdfs
2.7.5
org.apache.hadoop
hadoop-mapreduce-client-core
2.7.5
@Test
public void demo1() throws Exception{
//第一步:注册hdfs的url
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
//获取文件输入流
InputStream inputStream = new URL(“hdfs://node01:8020/a.txt”).openStream();
//获取文件输出流
FileOutputStream outputStream = new FileOutputStream(new File(“D:\hello.txt”));
//实现文件的拷贝
IOUtils.copy(inputStream,outputStream);
//关闭流
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
}
涉及的主要类
在Java中操作HDFS,主要涉及一下class:
Configuration
- 该类的对象封装了客户端或者服务器的配置
FileSystem
该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作,通过FileSystem的静态方法get获得该对象
FileSystem fs = FileSystem.get(conf)
get方法从conf中的一个参数fs.defaultFS的配置值判断具体是什么类
如果我们的代码中没有指定fs.defaultFS,并且工程ClassPath下也没有给定相应的配置,conf中的默认值就来自于Hadoop的Jar包中的core-default.xml
默认值为file:///,则获取的不是一个DistributedFileSystem的实例,而是一个本地文件系统的客户端对象
第一种方式
@Test
public void getFileSystem1() throws IOException{
//创建Configuration对象
Configuration configuration = new Configuration();
//指定我们使用的文件系统类型
configuration.set(“fs.defaultFS”,“hdfs://node01:8020/”);
//获取指定的文件系统
FileSystem fileSystem = FileSystem.get(configuration);
System.out.println(fileSystem.toString());
}
第二种方式
@Test
public void getFileSystem2() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI(“hdfs://node01:8020”), new Configuration());
System.out.println(“fileSystem:”+fileSystem);
}
第三种方式
@Test
public void getFileSystem3() throws Exception{
Configuration configuration = new Configuration();
configuratioin.set(“fs.defaultFS”,“hdfs://node01:8020”);
FileSystem fileSystem = FileSystem.newInstance(configurartion);
System.out.println(fileSystem.toString());
}
第四种方式
@Test
public void getFileSystem4() throws Exception{
FileSystem fileSystem = FileSystem.newInstance(new URI(“hdfs://node01:8020”),new Configuration());
System.out.println(fileSystem.toString());
}
使用API遍历
@Test
public void listMyFiles() throws Exception{
//获取fileSystem类
FileSystem fileSystem = FileSystem.get(new URI(“hdfs://node01:8020”),new Configuration());
//获取RemoteIterator得到所有的文件或者文件夹,第一个参数指定遍历的路径,第二个参数表示是否要递归遍历
RemoteIterator locatedFileStatusRemoteIterator = fileSystem.listFiles(new Path(“/”),true);
while(locatedFileStatusRemoteIterator.hasNext()){
LocatedFileStatus next = locatedFileStatusRemoteIterator.next();
System.out.println(next.getPath().toString());
}
fileSystem.close();
}
@Test
public void mkdirs() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI(“hdfs://node01:8020”), new Configuration());
boolean mkdirs = fileSystem.mkdirs(new Path(“/hello/mydir/test”));
fileSystem.close();
}
@Test
public void getFileToLocal() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI(“hdfs://node01:8020”),new Configuration());
FSDataInputStream inputStream = fileSystem.open(new Path(“/timer.txt”));
FileOutputStream outputStream = new FileOutStream(new File(“e:\timer.txt”));
IOUtils.copy(inputStream,outputStream);
IOUtils.closeQuietly(inputStream);
IOUtils.closeQuietly(outputStream);
fileSystem.close();
}
方式2:
@Test
public void downloadFile2() throws Exception{
//1、获取FileSystem
FileSystem fileSystem = FileSystem.get(new URI(“hdfs://node01:8020”),new Configuration());
//2、调用方法,实现文件的下载
fileSystem.copyToLocalFile(new Path(“/a.txt”),new Path(“D://a.txt”));
//3、关闭FileSystem
fileSystem.close();
}
@Test
public void putData() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI(“hdfs://node01:8020”),new Configuration());
fileSystem.copyFromLocalFile(new Path(“file:///c:\install.log”),new Path(“/hello/mydir/test”));
fileSystem.close();
}
1、停止hdfs集群,在node01机器上执行以下命令
cd /export/servers/hadoop-2.7.5
sbin/stop-dfs.sh
2、修改node01机器上的hdfs-site.xml当中的配置文件
cd /export/servers/hadoop-2.7.5/etc/hadoop
vim hdfs-site.xml
dfs.permissions.enabled
true
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
最后
小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
程序员代码面试指南 IT名企算法与数据结构题目最优解
这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!
《TCP-IP协议组(第4版)》
本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。
本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。
Java开发手册(嵩山版)
这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**
MySQL 8从入门到精通
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
JAVA核心知识点+1000道 互联网Java工程师面试题
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
…(img-jLx9lwgf-1713854004535)]
MySQL 8从入门到精通
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。
[外链图片转存中…(img-AFg23cPw-1713854004535)]
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
[外链图片转存中…(img-t5ROiJmc-1713854004536)]
JAVA核心知识点+1000道 互联网Java工程师面试题
[外链图片转存中…(img-XrPJgtm8-1713854004536)]
[外链图片转存中…(img-OXcvZFjU-1713854004536)]
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
[外链图片转存中…(img-QFr17hGr-1713854004536)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!