气性不和平,则文章事功俱无足取
语言多矫饰,则人品心术尽属可疑
Hadoop必读书目(精选)
本文参考文献包含于上述书籍
分布式存储系统HDFS(Hadoop Distributed File System)是一个文件系统,类似于Linux的文件系统。HDFS有目录,目录下可以存储文件,但它是一个分布式的文件系统。
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上
超大文件
流式数据访问
商用硬件
低延迟的数据访问
大量的小文件
多用户写入,任意修改文件
HDFS架构图
注:Rack-机架 Replication-副本 Block-数据块 Metadata-元数据
hdfs fsck / -files -blocks
注意:多个Block的写入是并行进行的,即多个Block同时写入
hadoop fs -appendToFile ...
hdfs balancer [-threshold ] [-policy ] [-exclude [-f | ]] [-include [-f | ]] [-idleiterations ]
选项名称 | 说明 |
---|---|
-threshold |
表示平衡的阀值,取值范围在0%到100%之间 即每个DataNode中空间使用率与HDFS集群总的空间使用率的差距百分比 |
-policy |
平衡策略,默认DataNode 应用于重新平衡HDFS存储的策略,默认DataNode策略平衡了DataNode 级别的存储,这类似于之前发行版的平衡策略 BlockPool 策略平衡了块池级别和DataNode级别的存储,BlockPool策略仅适用于Federated HDFS服务 |
-exclude/include | 参数-exclude 和-include 是用来选择Balancer时,可以指定哪几个DataNode之间重分布也可以从HDFS集群中排除哪几个节点不需要重分布 |
-idleiterations |
迭代检测的次数 |
hadoop fs -cat URI [URI ...]
hadoop fs -chgrp [-R] GROUP URI [URI ...]
hadoop fs -chmod [-R] URI [URI ...]
-R
表示递归hadoop fs -chwon [-R] [OWNER] [:[GROUP]] URI [URI ...]
-R
表示递归hadoop fs -copyFromLocal URI
put
命令,但可以拷贝目录-f
表示覆盖原来已存在目录hadoop fs -copyToLocal [-ignorecrc] [-crc] URI
get
命令,但可以拷贝目录hadoop fs -count [-q] [-h] [-v]
-h
表示输出格式化后的信息-v
表示输出表头-count | -count -q | 输出列 | 说明 |
---|---|---|---|
√ | QUOTA | 命名空间quota(创建的文件数目) | |
√ | REMAINING_QUOTA | 剩余的命名空间quota(剩余能创建的文件数目) | |
√ | SPACE_QUOTA | 物理空间quota(限制磁盘空间占用大小) | |
√ | REMAININNG_SPACE_QUOTA | 剩余的物理空间 | |
√ | √ | DIR_COUNT | 目录数目 |
√ | √ | FILE_COUNT | 文件数目 |
√ | √ | CONTEXT_SIZE | 目录逻辑空间大小 |
√ | √ | PATHNAME | 路径 |
hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...]
-f
表示如果目标目录已存在,则覆盖之前的目录hadoop distcp
标识 | 描述 | 备注 |
---|---|---|
-p[rbugp] | Preserve r:replication number b:blocak size u:user g:group p:permission |
修改次数不会被保留 当指定 -update 时,更新的状态不会被同步,除非文件大小不同,比如文件被重新创建 |
-i | 忽略失败 | 该选项回避默认情况提供关于拷贝的更精确的统计,同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试 如果一个Map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败 |
-log |
记录日志到 |
DisCp为每个文件的每次尝试拷贝操作都记录入职,并把日志作为Map的输出 如果一个Map失败了,当重新执行时这个日志不会被保留 |
-m |
同时拷贝的最大数目 | 指定了拷贝数据时Map的数目 并不是Map越多吞吐量越大 |
-overwrite | 覆盖目标 | 如果一个Map失败并且没有使用i 选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝它会改变生成目标路径的语义,用户需要小心使用该选项 |
-update | 如果源和目标的大小不一样则进行覆盖 | 这不是“同步”操作,是否执行覆盖的唯一标准是源文件和目标文件大小是否相同 如果不同,则源文件替换目标文件 它会改变生成目标路径的语义,用户需要小心使用该选项 |
-f |
使用 |
等价于把所有文件名列在命令行中 urilist_uri列表应该是完整合法的URI |
参考官网
12. df
hadoop fs -df [-h] URI [URI ...]
显示目录空闲空间
-h
表示转换为更加易读的方式,比如67108864用64M代替
13. dfsadmin
hadoop dfsadmin [GENERIC_OPTIONS]
hadoop dfsadmin
支持一些和HDFS管理相关的操作
hadoop dfsadmin -help
能列出所有当前支持的命令
命令选项 | 描述 |
---|---|
-report | 报告文件系统的基本信息和统计信息 |
-safemode enter | leave | get | wait | 安全模式维护命令 安全模式是NameNode的一个状态,在这种状态下,NameNode不接受对名字空间的更改(只读),并且不复制或者删除块 NameNode会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式 安全模式可以手动进入,但是这样的话也必须手动关闭安全模式 |
-refreshNodes | 重新读取hosts和exclude文件 更新允许连到NameNode的或那些需要退出或入编的DataNode的集合 |
-finalizeUpgrade | 中街HDFS的升级操作,DataNode删除前一个版本的工作目录,之后NameNode也删除前一个版本的工作目录 这个操作完结整个升级过程 |
-upgradeProgress status | details | force | 请求当前系统的升级状态以及状态细节,或者强制进行升级操作 |
-metasave filename | 保存NameNode的主要数据结构到hadoop.log.dir属性指定的目录下的 对于下面每一项, 1. NameNode收到的DataNode心跳信号 2. 等待被复制的块 3. 正在被复制的块 4. 等待被删除的块 |
-setQuota |
为每个目录 下列情况之一会报错 1. N不是一个正整数 2. 用户不是管理员 3. 这个目录不存在或者是文件 4. 目录会马上超出新设定的配额 |
-clrQuota |
为每个目录 下列情况之一会报错 1. 这个目录不存在或者是文件 2. 用户不是管理员 如果目录原来没有配额则不会报错 |
hadoop fs -expunge
hdfs fsck [-list-corruptfileblocks |[-move | -delete | -openforwrite] [-files [-blocks [-locations | - racks]]] [-includeSnapshots] [-storagepolicies] [-blockId ]
选项名 | 说明 |
---|---|
-list -corruptfileblocks | 查看文件中损坏的块 |
-move | 将损坏的文件移动至 /lost+found 目录 |
-delete | 删除损坏的文件 |
-files | 检查并列出所有文件状态 |
-openforwrite | 检查并打印正在被打开执行写操作的文件 |
-blocks | 打印文件的Block报告(需要和-files 一起使用) |
-locations | 打印文件块的位置信息(需要和-files -blocks 一起使用) |
-racks | 打印文件块位置所在的机架信息 |
hadoop fs -get [-ignorecrc] [-crc]
hdfs getconf
命令选项 | 说明 |
---|---|
path | 从此路径开始检查 |
-delete | 删除损坏的文件 |
-files | 打印出正在检查的文件 |
-files -blocks | 打印块报告 |
-files -blocks -locations | 打印每个块的位置 |
-files -blocks -racks | 打印出DataNode位置的网络拓扑 |
-includeSnapshots | 如果给定路径指示快照表目录或其下有快照表目录,则包含快照数据 |
-list -corruptfileblocks | 打印出丢失的块和它们所属的文件的列表 |
-move | 将损坏的文件移至 /lost+found |
-openforwrite | 打印出已打开以供写入的文件 |
-storagepolicies | 打印出块的存储策略摘要 |
-blockId | 打印出该块的信息 |
参考官网
hadoop fs -getmerge [addnl]
addnl
是可选的,用于指定在每个文件结尾添加一个换行符hadoop fs -ls
hadoop fs -lsr
ls
命令的递归版本,类似于Unix中ls -R
hadoop fs -mkdir
mkdir -p
,它会创建路径中的各级父目录hadoop fs -mv URI [URI ...]
hdfs oev [OPTIONS] i INPUT_FILE -o OUTPUT_FILE
参数名 | 说明 | 必选参数 | 可选参数 |
---|---|---|---|
-i, –inputFile |
输入edits文件,如果是xml后缀,表示XML格式,其他表示二进制 | √ | |
-o,–outputFile |
输出文件,如果已存在,则会覆盖原文件 | √ | |
-p,–processor |
指定转换类型:binary (二进制格式),xml (默认,XML格式),stats (打印edits文件的静态统计信息) | √ | |
-f, –fix -txids | 重置输入edits文件中的transaction IDs | √ | |
-r, –recover | 使用recovery模式,跳过eidts中的错误记录 | √ | |
-v, –verbose | 打印处理过程的输出 | √ |
oiv
hdfs oiv [OPTIONS] -i INPUT_FILE
用于将FsImage文件转换成其他格式文件,如文本文件、XML文件
参数名 | 说明 | 必选参数 | 可选参数
:-: | :-: | :-: | :-:
-i, –inputFile
-o, –outputFile
-p, –processor
-h, –help|显示帮助信息||√
put
hadoop fs -put
从本地文件系统中复制单个或多个源路径到目标文件系统,也支持从标准输入中读入输入写入目标文件系统
rm
hadoop fs -rm URI [URI ...]
删除指定的文件,只删除非空目录和文件
-r
表示递归删除
setrep
hadoop fs -setrep [-R] [-w]
改变一个文件的副本系数
-R
选项用于递归改变目录下所有文件的副本系数
-w
选项指定该请求等待操作执行结束
stat
hadoop fs -tail [-f] URI
返回执行路径的统计信息
-f 选项 |
说明 |
---|---|
%F | 文件类型 |
%b | 文件大小 |
%g | 所属组 |
%o | Block大小 |
%n | 文件名 |
%r | 复制因子数 |
%u | 文件所有者 |
%Y, %y | 修改日期 |
hadoop fa -tail [-f] URI
-f
表示根据文件描述符进行追踪,当文件改名或被删除,追踪停止hadoop fs -text
cat
,将源文件输出为文本格式hadoop fs -touchz URI [URI ...]
hadoop fs -truncate [-w]
-w
表示要求该命令等待回复完成hadoop fs -usage command
hadoop fs - find ..
/
-print
expression选项 | 说明 |
---|---|
-name pattern | 不区分大小写,对大小写不敏感 |
-iname pattern | 对大小写敏感 |
打印 | |
-print0 | 打印在一行 |
hadoop fs -getfacl [-R]
-R
指定递归查找命令 | 说明 |
---|---|
hdfs dfsadmin -allowSnapshot |
建立快照目录 如果该操作成功,那么目录会变成snapshottable |
hdfs dfsadmin -disallowSnapshot |
文件夹里面所有快照在快照失效前必须被删除,如果没有该目录,则会建立 |
hdfs dfsadmin -createSnapshot |
snapshottable目录创建一个快照 该命令需要snapshottable目录的权限 |
hdfs dfsadmin -deleteSnapshot |
从一个snapshottable目录删除快照 该命令需要snapshottable目录的权限 |
hdfs dfsadmin -renameSnapshot |
重命名快照 该命令需要snapshottable目录的权限 |
hdfs lsSnapshottableDir | 获取当前用户的所有snapshottable |
hdfs snapshotDiff |
得到两个快照之间的不同 该命令需要两个目录的权限 |
Eclipse连接Hadoop集群
IntelliJ IDEA连接Hadoop集群
Hadoop分布式文件系统(HDFS)Java接口(HDFS Java API)详细版
Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现
Java抽象类org.apache.hadoop.fs.FileSystem定义了Hadoop中一个文件系统的客户端接口,并且该抽象类有几个具体实现,其中和Hadoop紧密相关的见下表
文件系统 | URI方案 | Java实现(都在org.apache.hadoop包中) | 描述 |
---|---|---|---|
Local | file | fs.LocalFileSystem | 使用客户端校验和的本地磁盘文件系统 使用RawLocalFileSystem表示无校验和的本地磁盘文件系统 |
HDFS | hdfs | hdfs.DistributedFileSystem | Hadoop的分布式文件系统 将HDFS设计成与MapReduce结合使用,可以实现高性能 |
WebHDFS | Webhdfs | Hdfs.web.WebHdfsFileSystem | 基于HTTP的文件系统,提供对HDFS的认证读/写访问 |
Secure WebHDFS | swebhdfs | hdfs.web.SWebHdfsFileSystem | WebHDFS的HTTPS版本 |
HAR | har | fs.HarFileSystem | 一个构件在其他文件系统之上用于文件存档的文件系统 Hadoop存档文件系统通常用于将HDFS中的多个文件打包成一个存档文件,以减少NameNode内存的使用 使用Hadoop的 achive 命令来创建HAR文件 |
View | viewfs | viewfs.ViewFileSystem | 针对其他Hadoop文件系统的客户端挂载表 通常用于为联邦NameNode创建挂载点 |
FTP | ftp | fs.ftp.FTPFileSystem | 由FTP服务器支持的文件系统 |
S3 | S3a | fs.s3a.S3AFileSystem | 由Amazon S3支持的文件系统,代替老版本的s3n(S3 原生)实现 |
Azure | wasb | fs.azure.NativeAzureFileSystem | 由Microsoft Azure支持的文件系统 |
Swift | swift | fs.swift.snative.SwiftNativeFileSystem | 由OpenStack Swift支持的文件系统 |
Hadoop对文件系统提供了许多接口,它一般使用URI方案来选取合适的文件系统实例进行交互
命令hadoop fs -ls file:////
可以列出本地文件系统根目录下的文件
Hadoop是用Java写的,通过Java API可以调用大部分Hadoop文件系统的交互操作,比如文件系统的命令解释器就是一个Java命令,它是用Java的FileSystem类来提供文件系统操作
下面是一些文件系统接口介绍,这些接口通常与HDFS一同使用,因为Hadoop中的其它文件系统一般有访问基本文件系统的工具,但它们大多数都能用于任何Hadoop文件系统
有疑问的朋友可以在下方留言或者私信我,我尽快回答
欢迎各路大神萌新指点、交流!
求关注!求点赞!求收藏!