HDFS文件系统

  • HDFS概念
    • 什么是HDFS
    • HDFS的组成
    • HDFS文件块大小
  • HFDS命令行操作
    • 基本语法
    • 常用命令
  • Java操作hdfs
    • 配置编译环境
    • 获取文件系统
    • 上传文件
    • 文件下载
    • 目录创建
    • 删除文件
    • 文件重命名

前置条件:hadoop环境搭建完毕。

hadoop环境搭建

HDFS概念

什么是HDFS

HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。HDFS的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

HDFS的组成

HDFS集群包括,NameNode和DataNode以及Secondary Namenode。NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

HDFS文件块大小

HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64MHDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。默认的块大小实际为64MB,但是很多情况下HDFS使用128MB的块设置。块的大小:10ms*100*100M/s = 100M

HFDS命令行操作

基本语法

hdfs dfs -具体命令
或
hadoop fs -具体命令##注:hdfs dfs 和 hadoop fs 的意义是相同的

常用命令

##注:hdfs中大多数命令和linux中的意义是一样的
## -help:输出这个命令参数hadoop fs -help rm## -ls: 显示目录信息hadoop fs -ls /## -mkdir:在hdfs上创建目录 -p 代表递归创建多个文件夹hadoop fs  -mkdir -p  /aaa/bbb/cc## -moveFromLocal从本地剪切粘贴到hdfshadoop  fs  - moveFromLocal  input/ /input## -moveToLocal:从hdfs剪切粘贴到本地hadoop  fs  - moveToLocal   /input  /home/test## -appendToFile  :追加一个文件到已经存在的文件末尾hadoop  fs  -appendToFile  ./hello.txt  /hello.txt## -cat :显示文件内容hadoop  fs  -cat /hello.txt## -tail:显示一个文件的末尾hadoop  fs  -tail  /hello.txt## -text:以字符形式打印一个文件的内容hadoop  fs  -text   /hello.txt## -chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限hadoop  fs  -chmod  666  /hello.txt## -copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去 hadoop  fs  -copyFromLocal  ./jdk.tar.gz  /test## -copyToLocal:从hdfs拷贝到本地hadoop fs -copyToLocal /test/jdk.tar.gz## -cp :从hdfs的一个路径拷贝到hdfs的另一个路径hadoop  fs  -cp  /test1/jdk.tar.gz  /test2/jdk.tar.gz.2## -mv:在hdfs目录中移动文件hadoop  fs  -mv  /test/jdk.tar.gz  /## -get:等同于copyToLocal,就是从hdfs下载文件到本地hadoop fs -get  /test/jdk.tar.gz## -put:等同于copyFromLocalhadoop  fs  -put  /test/jdk.tar.gz  /test/jdk.tar.gz.2## -rm:删除文件或文件夹hadoop fs -rm -r /test## -rmdir:删除空目录hadoop  fs  -rmdir   /aaa/bbb/ccy## -df :统计文件系统的可用空间信息hadoop  fs  -df  -h  /## -du统计文件夹的大小信息hadoop  fs  -du  -s  -h /test/*## -count:统计一个指定目录下的文件节点数量hadoop fs -count /aaa/## -setrep:设置hdfs中文件的副本数量hadoop fs -setrep 3 /aaa/jdk.tar.gz注:这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量。因为目        前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

Java操作hdfs

配置编译环境

##将下载好编译过的hadoop文件和jar解压到纯英文路径
##配置HADOOP_HOME
##将lib下的所有jar导入到 ide 中下载地址:https://pan.baidu.com/s/1e8VnWSLNowePJjDDHV0ddw  提取码:7ozz

获取文件系统

c
public void initHDFS() throws Exception{// 1 创建配置信息对象Configuration configuration = new Configuration();// 2 获取文件系统FileSystem fs = FileSystem.get(new URI("hdfs://hadoop集群地址:9000"),configuration, "root");// 3 打印文件系统System.out.println(fs.toString());
}

上传文件

@Test
public void putFileToHDFS() throws Exception{// 1 创建配置信息对象Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop集群地址:9000"),configuration, "root");// 2 创建要上传文件所在的本地路径Path src = new Path("c:/hello.txt");// 3 创建要上传到hdfs的目标路径Path dst = new Path("hdfs://hadoop集群地址:9000/hello.txt");// 4 拷贝文件fs.copyFromLocalFile(src, dst);fs.close();
}

文件下载

@Test
public void getFileFromHDFS() throws Exception{// 1 创建配置信息对象Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop集群地址:9000"),configuration, "root");        // 2 下载文件// boolean delSrc 指是否将原文件删除// Path src 指要下载的文件路径// Path dst 指将文件下载到的路径// boolean useRawLocalFileSystem 是否开启文件效验fs.copyToLocalFile(false, new Path("/hello.txt"), new Path("d:/hellocopy.txt"), true);fs.close();
}

目录创建

@Test
public void mkdirAtHDFS() throws Exception{// 1 创建配置信息对象Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop集群地址:9000"),configuration, "root");    //2 创建目录fs.mkdirs(new Path("/user/output"));fs.close();
}

删除文件

@Test
public void deleteAtHDFS() throws Exception{// 1 创建配置信息对象Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop集群地址:9000"),configuration, "root");   //2 删除文件夹时 ,如果是非空文件夹,参数2必须给值truefs.delete(new Path("/user/output"), true);fs.close();
}

文件重命名

@Test
public void renameAtHDFS() throws Exception{// 1 创建配置信息对象Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop集群地址:9000"),configuration, "root");//2 重命名文件或文件夹fs.rename(new Path("/hello.txt"), new Path("/hellonihao.txt"));fs.close();
}

HDFS文件系统(含hdfs常用命令,java对hdfs API的简单操作)相关推荐

  1. Linux文件系统简介及常用命令

    在linux系统中一切皆是文件,下面简要总结了一下linux文件系统中分区类型.文件系统类型以及常用命令. 一.分区类型 1.主分区:最多只能有四个 2.扩展分区:只能有一个,也可以看做是主分区的一种 ...

  2. linux常用命令 java,Java工程在Linux常用命令

    Java Web工程 在Linux下操作常用命令 cd ../ 退出当前目录,前往父文件夹 cd ezoffice 进入ezoffice文件夹 ls 查看目录 ps -ef|grep java 查看J ...

  3. 常用命令-JAVA大数据-Week5-DAY2-linux

    文章目录 前言 2.Linux 2.1 目录结构 2.2.3. 目录查看.目录创建和目录删除命令 2.2.4. 目录切换命令 2.2.5. 文件操作命令 2.2.5.1. touch 常见使用方式: ...

  4. birt java api_BIRT使用API进行简单部署

    在网上查了下BIRT的文章,不是很多.而且讲述的也不是十分全面.还是得自己琢磨啊. 刚实验好,贴上来分享一下共同交流.希望也能帮助到对API部署还困惑的人. 做这个纯粹是看官网上的例子,还有好多疑点, ...

  5. java hdfs 新建目录_如何用java在hdfs中创建一个新目录?

    public static void main(String[] args) throws IOException, URISyntaxException { ????????????配置config ...

  6. 常用的Java流程引擎API开发调用接口大全-工作流引擎设计

    关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 一.程序调用开发接口  二.   接口说明 所谓的驰骋工作流引擎的接口, ...

  7. java 简单使用baidu地图API进行简单操作

    1.获取百度地图AK [链接网址:百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com)](百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com ...

  8. JAVA的循环结构以及简单操作

    1.循环结构分为几种? 分为三种:for循环:while循环:do...while循环: 1.1for循环:适合次数比较固定的情况 for(初始化变量:条件语句:变量的变化) {   代码    } ...

  9. HDFS的访问方式之HDFS shell的常用命令

    场景 CentOS7上搭建Hadoop集群(入门级): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119335883 在上面搭 ...

最新文章

  1. 【Python】keras卷积神经网络识别mnist
  2. 双击.exe文件出现Debug Error: abort() has been called解决办法(之一)
  3. 老司机也晕车--java字符串String晕车之旅
  4. java的简单工厂模式_java设计模式之简单工厂模式
  5. pythoni屏幕连点_【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)
  6. 2016-8-2更新日志
  7. NAT(NAPT)地址转换过程
  8. html 内嵌xml数据库,是否可以在SQLite数据库中存储XML/HTML文件?
  9. 真狠!10000mAh超大电池手机发布,真的神机...
  10. Build Settings发布设置
  11. NYOJ题目37-回文字符串
  12. 找出大于200的最小的质数
  13. Java Web三大组件
  14. 掌控你的信息流:在自己的VPS上部署RSSHub
  15. Cosine Similarity(余弦相似度)
  16. 《袁老师访谈录》第十九期-【在商言商·思享会】(第一场)“企业如何抓住新一代科技红利”...
  17. 北京师范大学计算机学院 姚力,姚力(北京师范大学信息科学与技术学院院长)_百度百科...
  18. 麦克劳林公式怎么记忆_怎么背麦克劳林公式?
  19. 超级通俗易懂的自然连接
  20. MATLAB——patch绘制多边形

热门文章

  1. AI看脸就知道性取向,不服气的我做了一个实验,结果……
  2. 第十六讲 A5流密码算法
  3. 公司sns JSSDK组件列表-20131011
  4. 搭建My Batis(Maven + MySql + log4j)
  5. 【进阶C语言】静态版通讯录的实现(详细讲解+全部源码)
  6. python面向对象-老王开枪
  7. 福禄克DSX-5000、8000网线测试仪如何解决不良线缆问题
  8. Coinbase入局带火以太坊L2生态,Arbitrum生态大盘点
  9. 接口推送数据原理_数据同步组件(Canal)在珍爱网的应用与实践
  10. Python中字符串使用单引号、双引号标识和三引号标识,什么是三引号?什么情况下用哪种标识?