hadoop分布式文件存储系统,用来解决海量数据的存储问题

HDFS的组成------核心配置文件:hdfs-site.xml、core-site.xml

NameNode:负责整个HDFS集群的管理(比如监控DataNode的运行状态、调度DataNode去处理数据);存储元数据(包含数据的基本信息,有两个重要文件:fsimage, editsfsimage, edits)

  • core-site.xml中:
    • fs.defaultFS-------用于指定NameNode的地址;
    • hadoop.tmp.dir----指定HDFS集群中相关文件存储的目录
  • hdfs-site.xml中:
    • dfs.namenode.name.dir------明确指定NameNode的镜像文件和日志文件等应该在什么路径下,如果不配置,则默认在hadoop.tmp.dir配置的目录的dfs/name下
    • dfs.namenode.http-address---------(0.0.0.0:50070)用来配置NameNode的外部访问端口号

DataNode:负责整个集群的数据存储(数据就是以文件存储的),底层是以block块去存储数据的,一个block块默认128M

  • hdfs-site.xml:
    • dfs.replication------配置block块的副本数,默认是3
    • dfs.namenode.heartbeat.recheck-interval-------NameNode检测DataNode状态的间隔时间,默认是5分钟,单位是ms
    • dfs.heartbeat.interval--------NameNode和DataNode的心跳时间,默认是3秒

      Notes:NameNode认为DataNode死亡的时间计算表达式:

                                    2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

    • dfs.datanode.data.dir-------用来指定DataNode中存储的block块的存放在Linux上的路径,默认在hadoop.tmp.dir/dfs/data目录下
    • dfs.namenode.datanode.registration.ip-hostname-check-------hadoop默认配置HDFS的DataNode,Yarn的NodeManager,需要在 slaves文件配置,默认配置主机名,并且会对主机名在/etc/hosts文件做IP对照,如果没有,则无法正常启动。如果我们配置的是IP,那么必须将这一项设置为false,否则会把IP当做主机名去处理
    • dfs.datanode.http-address---------(0.0.0.0:50075)用来配置DataNode的外部访问端口号
  • slaves:
    • 指定DataNode/NodeManager的节点在哪些主机上(配置在这个文件中的主机,会随着start-dfs.sh一起启动)
    • 这个文件中默认配置需要用主机名配置(主机名必须在/etc/hosts文件中配置主机映-----主机名对应的IP地址))
    • 如果在slaves中配置的是IP地址,那么必须关掉HDFS中的hostname转换IP的检查,否则配置的IP不生效
  • dfs.hosts:
    • 白名单文件:类似于slaves,里面配置的也是一些主机地址,只不过配置在白名单中的地址可以和NameNode、ResourceManager之间联系心跳。
    • 注意:
      • 它与slaves文件的功能不一样,slaves中配置的这些主机会随着start-dfs.sh一起启动,但是配置在dfs.hosts文件中的主机不会随着这些启动,需要单独启动
      • dfs.hosts文件主要是用来做服役新节点的,如果增加了一个新节点之后,那么在dfs.hosts中增加新节点地址即可,但是如果你想让这个新节点下一次随着start-dfs.sh一起启动,那么必须在slaves文件中也增加以下
      • dfs.hosts文件必须在hdfs-site.xml文件中配置一下,配置项是dfs.hosts,值是这个文件的路径
  • dfs.hosts.exclude:
    • 黑名单文件:和slaves类似,配置的也是主机地址,但是配置在这个地方的地址禁止和NameNode、ResourceManager联系
    • 注意:
      • 黑名单文件也必须在hdfs-site.xml中配置dfs.hosts.exclude这个配置项
      • 黑名单文件一般做退役数据节点使用
      • 如果一个地址既在白名单出现,也在黑名单文件出现,那么就代表这个节点要退役

SecondaryNameNode:主要负责辅助NameNode去合并日志文件和镜像文件

  • hdfs-site.xml:
    • dfs.namenode.secondary.http-address------(0.0.0.0:50090)代表SecondaryNameNode的外部访问路径
  • 作用:
    • 可以帮助NameNode合并文件
    • 可以恢复NameNode中丢失的元数据(将SecondaryNameNode目录下的文件复制到NameNode配置的路径中即可恢复)

HDFS的操作----要求HDFS必须处于启动状态(start-dfs.sh)

HDFS的命令行操作:在shell中使用命令操作

【补充:shell脚本编程语言----Linux中运行的命令都是shell命令,我们也可以将shell命令写在一个shell脚本中,然后去运行】

  1. 命令语法:
    • hdfs dfs 可选操作 文件路径 … (官方建议使用)
    • hdfs fs 可选操作 文件路径 …
  1. 常用命令:
    • 从hdfs上下载(复制)一个文件到Linux本地
      1. hdfs dfs -copyToLocal src dst
      2. hdfs dfs -get src dst
    • 复制一个Linux本地文件到HDFS
      1. hdfs dfs -put src dst
      2. hdfs dfs -copyFromLocal src dst
    • HDFS剪切文件到Linux / Linux剪切文件到HDFS
      1. hdfs dfs -moveToLocal / moveFromLocal
    • HDFS文件的删除 / 重命名 / 移动 / 复制
      1. hdfs dfs -rmdir/-rm / -r / -mv / -cp hdfs相关路径
    • 将本地文件的内容追加到HDFS上一个文件中
      1. hdfs dfs -appendToFile
    • 将hadoop上的多个文件下载到Linux本地,并将文件内容合并
      1. hdfs dfs -getmerge hdfs文件路径 Linux路径

Java API操作

  1. 环境准备:① 本地安装hadoop软件并配置环境变量;② hdfs操作需要依赖的jar包(手动 / maven依赖)
  2. 重点类
    • Configuration:代表HDFS的配置文件,配置文件的优先级高于HDFS软件中的配置

      set(String key, String value)

    • FileSystem:HDFS文件系统的一个抽象表示,可以通过这个类获取HDFS上任何一个文件或者文件夹

      get(URI, Configuration, String user):获取文件/目录

      copyFromLocalFile(Path, Path):从本地复制文件到hadoop

      CopyToLocalFile(Path, Path):从hadoop复制文件到Linux本地

      moveToLocalFile / moveFromLocalFile(Path):剪切文件到hadoop/Linux本地

      delete(Path, boolean):删除文件/目录,boolean值表示是否递归删除

      rename(Path, Path):重命名文件

      mkdirs(Path):创建目录

      createNewFile(Path):创建文件

      create(Path) ---- IO,文件输出流,代表可以通过输出流往文件中写数据

      open(Path) -----IO,文件输入流,代表可以通过输入流将HDFS中的数据读取到Linux中

      isFile(Path):是否为文件?

      isDirectory(Path):是否为目录?

      exists(Path):文件/目录是否存在

      listFiles(Path, boolean):查找目录下所有文件,boolean值指定是否打印当前文件及当前文件目录下含有的目录下的文件

      listStatus(Path):将path路径下所有文件和文件夹打印出来,不能递归打印

    • FileStatus:HDFS上一个文件的抽象表示,可以获取文件的权限、用户、修改时间等等操作

      getOwner():获取拥有者

      getGroup():获取所属组

      getPermission():获取文件权限

      getModifationTime():获取文件最后一次修改时间

      getBlockSize():获取文件每一个块的大小

      getReplication():获取文件副本数

      getPath():获取当前文件目录

      isFile():是否为文件?

      isDirectory():是否为目录?

HDFS总结的更多相关文章

  1. hadoop 2.7.3本地环境运行官方wordcount-基于HDFS

    接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...

  2. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  3. python基础操作以及hdfs操作

    目录 前言 基础操作 hdfs操作 总结 一.前言        作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...

  4. C#、JAVA操作Hadoop(HDFS、Map/Reduce)真实过程概述。组件、源码下载。无法解决:Response status code does not indicate success: 500。

    一.Hadoop环境配置概述 三台虚拟机,操作系统为:Ubuntu 16.04. Hadoop版本:2.7.2 NameNode:192.168.72.132 DataNode:192.168.72. ...

  5. HDFS的架构

    主从结构 主节点,只有一个: namenode 从节点,有很多个: datanodes 在版本1中,主节点只有一个,在 版本2中主节点有两个. namenode 负责(管理): 接收用户操作请求 维护 ...

  6. hdfs以及hbase动态增加和删除节点

    一个知乎上的问题:Hbase的Region server和hadoop的datanode是否可以部署在一台服务器上?如果是的话,二者是否是一对一的关系?部署在同一台服务器上,可以减少数据跨网络传输的流 ...

  7. hadoop程序问题:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///

    Java代码如下: FileSystem fs = FileSystem.get(conf); in = fs.open(new Path("hdfs://192.168.130.54:19 ...

  8. 01 HDFS 简介

    01.HDFS简介 大纲: hadoop2 介绍 HDFS概述 HDFS读写流程 hadoop2介绍 框架的核心设计是HDFS(存储),mapReduce(分布式计算),YARN(资源管理),为海量的 ...

  9. 何为HDFS?

    该文来自百度百科,自我收藏. Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...

  10. Flume(4)实用环境搭建:source(spooldir)+channel(file)+sink(hdfs)方式

    一.概述: 在实际的生产环境中,一般都会遇到将web服务器比如tomcat.Apache等中产生的日志倒入到HDFS中供分析使用的需求.这里的配置方式就是实现上述需求. 二.配置文件: #agent1 ...

随机推荐

  1. 台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯

    前言   前面使用485和网口与台达成功建立通讯,但是485是使用用的ASICC模式,多数情况下是使用RTU模式提升通讯效率.   下载安装台达ISPSoft软件   官网下载地址:https://d ...

  2. Java 创建PDF文件包的2种方法

    1. 概述 PDF文件包可方便在仅打开一个窗口的情况下阅读多个文档,通过将多个PDF文档或其他非PDF文档封装在一起,打开文件包后可以随意切换查看文件包中的文档,在需要编辑更改的情况,也可以打开文本包 ...

  3. Center OS 7 通过Docker部署yapi

    Center OS 7 通过Docker部署yapi 版本要求 Linux Center OS 7 安装Docker #Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前 ...

  4. CRM系统用多种形式与客户无障碍沟通

    当您与潜在客户.联系人交流,或者团队内部沟通时,是不是经常要在CRM系统和第三方应用之间来回切换,仅仅是为了打电话.开会等,简直不要太麻烦.而CRM客户管理系统与Zoho Meeting的集成,就能够 ...

  5. 全局获取HttpContext

    全局获取HttpContext 在我们平常开发中会有这样的需求,我们的Service业务层需要获取请求上下文中的用户信息,一般我们从控制器参数传递过来.如果你觉得这样就可以了,请您关闭文章. 场景 但 ...

  6. SpringBoot | 1.3 约定编程Spring AOP

    前言 前面聊过Spring的一个很重要的概念,IoC控制反转,接下来就是AOP了: 1. AOP切面编程 面向切面编程,是利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度 ...

  7. leetcode第156场周赛5207

    当时做的时候,一直理解想搞dp,后面可能思路有点乱了,写不出来... 看了评论区的大佬,才发现是滑动窗口的题目,学习到了. 思路分析: 1.这题可以转化成求数组最大子数组的和不超过maxCost的长度 ...

  8. nmon工具安装及nmon analyser的使用

    步骤一:下载nmon及nmon analyser工具 nmon:http://nmon.sourceforge.net/pmwiki.php 根据自己系统的版本下载相应的版本即可 nmon analy ...

  9. SQL 查询并不是从 SELECT 开始的

    原文地址:SQL queries don't start with SELECT 原文作者:Julia Evans(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...

  10. 题解 SP3591 PATHEADS - Patting Heads

    类似桶排 先看有多少头奶牛抽出这个数 再看这个数的奶牛能拍多少人的头(别忘了-1,自己不能拍自己) 最后根据输入输出 110ms #include<bits/stdc++.h> using ...