hdfs文件夹大小
㈠ hadoop HDFS有提供查看空间总大小以及剩余空间大小的接口吗
是能查看的:
看src/webapps/hdfs/dfshealth.jsp,对应50070查看到的那个页面,里面搜就有了
例如: Configured Capacity对应:
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getCapacityTotal()剩下的自己用同样的方法找一下就都有了
㈡ 怎样改变hdfs块大小
hdfs的块大小由dfs.block.size参数决定,默认是67108864,想要修改该值可以在hdfs-site.xml中修改,如下
<property>
<name>dfs.block.size</name>
<value>67108864</value>
<description>The default block size for new files.</description>
</property>
㈢ 怎么查看hdfs 某个文件夹的文件块
这种情况比较复杂!如果文件小于64MB,存储按该文件的块大小等于该文件的大小。
读取时是根据存在namenode上面的映射表来读取的。
按实际存储的大小来读取,不是从硬盘上面读取的,是从HDFS
上面读取的。
另外,在文件上传时,就会根据块的大小将各个块分布到各个
datanode节点上面的。如果文件已经上传,需要修改默认块的大小,
那么需要执行一条语句将HDFS上面的原有文件重新分块并存储。
㈣ hdfs适合存储多大的单个文件
首先hdfs是建立在多个机器文件系统上的一个逻辑上的文件系统。它的底层数据以数据块方式存储,块大小可进行调整。
假如你设置一个数据块大小为256M,上传一个1G的文件,它底层会将这个文件分成4块存储,每个块256M。你在hdfs上看到的是一个完整的文件,随时可对这个文件进行操作,无需关注它的存储。就像你在操作系统上操作文件一样,无需关注它存在那个磁盘哪个扇区
㈤ HDFS中的块与普通文件系统的块有什么区别
分布式文件系统很多,包括GFS,HDFS,HDFS基本可以认为是GFS的一个简化版实现,二者因此有很多相似之处。首先,GFS和HDFS都采用单一主控机+多台工作机的模式,由一台主控机(Master)存储系统全部元数据,并实现数据的分布、复制、备份决策,主控机还实现了元数据的checkpoint和操作日志记录及回放功能。工作机存储数据,并根据主控机的指令进行数据存储、数据迁移和数据计算等。其次,GFS和HDFS都通过数据分块和复制(多副本,一般是3)来提供更高的可靠性和更高的性能。当其中一个副本不可用时,系统都提供副本自动复制功能。同时,针对数据读多于写的特点,读服务被分配到多个副本所在机器,提供了系统的整体性能。最后,GFS和HDFS都提供了一个树结构的文件系统,实现了类似与Linux下的文件复制、改名、移动、创建、删除操作以及简单的权限管理等。然而,GFS和HDFS在关键点的设计上差异很大,HDFS为了规避GFS的复杂度进行了很多简化。首先,GFS最为复杂的部分是对多客户端并发追加同一个文件,即多客户端并发Append模型 。GFS允许文件被多次或者多个客户端同时打开以追加数据,以记录为单位。假设GFS追加记录的大小为16KB ~ 16MB之间,平均大小为1MB,如果每次追加都访问GFS Master显然很低效,因此,GFS通过Lease机制将每个Chunk的写权限授权给Chunk Server。写Lease的含义是Chunk Server对某个Chunk在Lease有效期内(假设为12s)有写权限,拥有Lease的Chunk Server称为Primary Chunk Server,如果Primary Chunk Server宕机,Lease有效期过后Chunk的写Lease可以分配给其它Chunk Server。多客户端并发追加同一个文件导致Chunk Server需要对记录进行定序,客户端的写操作失败后可能重试,从而产生重复记录,再加上客户端API为异步模型,又产生了记录乱序问题。Append模型下重复记录、乱序等问题加上Lease机制,尤其是同一个Chunk的Lease可能在Chunk Server之间迁移,极大地提高了系统设计和一致性模型的复杂度。而在HDFS中,HDFS文件只允许一次打开并追加数据,客户端先把所有数据写入本地的临时文件中,等到数据量达到一个Chunk的大小(通常为64MB),请求HDFS Master分配工作机及Chunk编号,将一个Chunk的数据一次性写入HDFS文件。由于累积64MB数据才进行实际写HDFS系统,对HDFS Master造成的压力不大,不需要类似GFS中的将写Lease授权给工作机的机制,且没有了重复记录和乱序的问题,大大地简化了系统的设计。然而,我们必须知道,HDFS由于不支持Append模型带来的很多问题,构建于HDFS之上的Hypertable和HBase需要使用HDFS存放表格系统的操作日志,由于HDFS的客户端需要攒到64MB数据才一次性写入到HDFS中,Hypertable和HBase中的表格服务节点(对应于Bigtable中的Tablet Server)如果宕机,部分操作日志没有写入到HDFS,可能会丢数据。其次是Master单点失效的处理 。GFS中采用主从模式备份Master的系统元数据,当主Master失效时,可以通过分布式选举备机接替主Master继续对外提供服务,而由于Replication及主备切换本身有一定的复杂性,HDFS Master的持久化数据只写入到本机(可能写入多份存放到Master机器的多个磁盘中防止某个磁盘损害),出现故障时需要人工介入。另外一点是对快照的支持 。GFS通过内部采用-on-write的数据结构实现集群快照功能,而HDFS不提供快照功能。在大规模分布式系统中,程序有bug是很正常的情况,虽然大多数情况下可以修复bug,不过很难通过补偿操作将系统数据恢复到一致的状态,往往需要底层系统提供快照功能,将系统恢复到最近的某个一致状态。总之,HDFS基本可以认为是GFS的简化版,由于时间及应用场景等各方面的原因对GFS的功能做了一定的简化,大大降低了复杂度。
㈥ 三个节点hdfs-site.xml该怎么配置
<!--Thu Aug 15 20:47:13 2013-->
<configuration>
<property>
<name>dfs.cluster.administrators</name>
<value> hdfs</value>
<!-- HDFS 超级管理员用户 -->
</property>
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
<!-- 是否开启 token 访问验证 -->
</property>
<property>
<name>dfs.datanode.failed.volumes.tolerated</name>
<value>0</value>
<!-- 能够导致DN挂掉的坏硬盘最大数,默认0就是只要有1个硬盘坏了,DN就会shutdown -->
</property>
<property>
<name>dfs.replication.max</name>
<value>50</value>
<!-- 有时dn临时故障恢复后会导致数据超过默认备份数。复制份数的最多数,通常没什么用,可以不用写配置文件里。 -->
</property>
<property>
<name>dfs.datanode..reserved</name>
<value>1073741824</value>
<!-- 每块磁盘所保留的空间大小,需要设置一些,主要是给非hdfs文件使用,默认是不保留,0字节 -->
</property>
<property>
<name>dfs.blockreport.initialDelay</name>
<value>120</value>
<!-- 推迟第一个 block报告在几秒钟内 -->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
<!-- 真正的datanode数据保存路径,可以写多块硬盘,逗号分隔.把这些位置分散在每个节点上的所有磁盘上可以实现磁盘 I/O 平衡,因此会显着改进磁盘 I/O 性能。 -->
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
<!-- 指定datanode的最大数量的线程用于传输数据。默认 4096 -->
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:50070</value>
<!--namenode web UI-->
</property>
<property>
<name>dfs.client.read.shortcircuit.streams.cache.size</name>
<value>4096</value>
<!-- 在客户端读取前会创建一个FileinputStreamCache,就是由前两个参数控制大小和过期时间,
dfs.client.read.shortcircuit.streams.cache.size和dfs.client.read.shortcircuit.streams.cache.expiry.ms -->
</property>
<property>
<name>dfs.namenode.avoid.write.stale.datanode</name>
<value>true</value>
<!-- 表明是否要避免写为“过时”的心跳消息尚未收到的NameNode超过指定的时间间隔数据节点。写操作将避免使用陈旧的数据节点,除非多数据节点的配置比例
(dfs.namenode.write.stale.datanode.ratio)被标记为失效。见dfs.namenode.avoid.read.stale.datanode为读取一个类似的设置。 -->
</property>
<property>
<name>dfs.namenode.avoid.read.stale.datanode</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.stale.datanode.interval</name>
<value>30000</value>
<!-- 默认时间间隔一个datanode标记为“down机”,即。 ,如果 namenode没有接到一个datanode心跳超过这个时间间隔,datanode将标记为“过期”。 过期的间隔不能太小 (默认值是3倍 心跳间隔)-->
<!--dfs.client.read.shortcircuit.streams.cache.size和dfs.client.read.shortcircuit.streams.cache.expiry.ms
以及dfs.client.read.shortcircuit.skip.checksum和dfs.client.read.shortcircuit.buffer.size.其中,
在客户端读取前会创建一个FileinputStreamCache,就是由前两个参数控制大小和过期时间的,其中key就是Datanode+block;
后两个参数就是决定是否跳过校验以及校验的块大小.-->
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
<!-- 在HDFS中启用权限检查 TRUE|FALSE。-->
</property>
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:8010</value>
<!--DN的IPC监听端口,写0的话监听在随机端口通过心跳传输给NN -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
<!-- NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0的HA方案使用,也可以在一台服务器的多块硬盘上使用 -->
</property>
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
<!-- JournalNode web UI监听。 如果端口是0,那么服务器将启动将自定义端口。 -->
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
<!-- DN的心跳检测时间间隔 3 秒 -->
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>750</value>
<!-- datanode所使用的本地文件夹的路径权限,默认755 -->
</property>
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
<!-- 创建文件和目录使用umask值。 -->
</property>
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>6250000</value>
<!-- 每个datanode指定的最大数量的带宽,每秒的字节数。-->
</property>
<property>
<name>dfs.namenode.accesstime.precision</name>
<value>0</value>
<!-- HDFS文件的访问时间精确值。 默认值是1小时。 设置的值为0禁用HDFS的访问时间。-->
</property>
<property>
<name>dfs.namenode.write.stale.datanode.ratio</name>
<value>1.0f</value>
<!-- 当总datanodes陈旧datanodes数量的比率明显 超过这个比例,停止避免写入失效节点,防止出现问题。-->
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
<!-- secondary namenode 节点存储 checkpoint 文件目录-->
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/grid/0/hdfs/journal</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
<!-- 2.X 版本默认值:134217728 说明: 这个就是hdfs里一个文件块的大小了,默认128M;太大的话会有较少map同时计算,
太小的话也浪费可用map个数资源,而且文件太小namenode就浪费内存多。对于较大集群,可设为256MB,根据需要进行设置。-->
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<!-- hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6 -->
</property>
<property>
<name>dfs.block.local-path-access.user</name>
<value>hbase</value>
</property>
<property>
<name>dfs.datanode.address</name>
<value>0.0.0.0:50010</value>
<!-- DN的服务监听端口,端口为0的话会随机监听端口,通过心跳通知NN -->
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50075</value>
<!-- DN的tracker页面监听地址和端口 -->
</property>
<property>
<name>dfs.https.namenode.https-address</name>
<value>c6401.ambari.apache.org:50470</value>
<!-- NN的HTTPS的tracker页面监听地址和端口 -->
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<!-- 使WebHDFS Namenodes和Datanodes(REST API)。-->
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
<!--NN启动后展开的线程数。-->
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
<!-- secondary name node web 监听端口 -->
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hdfs</value>
</property>
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>1.0f</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
</configuration>
㈦ hdfs为什么不适合处理大量的小文件
在HDFS中,namenode将文件系统中的元数据存储在内存中,因此,HDFS所能存储的文件数量会受到namenode内存的限制。一般来说,每个文件、目录、数据块的存储信息大约占150个字节,根据当前namenode的内存空间的配置,就可以计算出大约能容纳多少个文件了。
有一种误解就是,之所以HDFS不适合大量小文件,是因为即使很小的文件也会占用一个块的存储空间。这是错误的,HDFS与其它文件系统不同,小于一个块大小的文件,不会占用一个块的空间。
㈧ 查看hdfs各目录分别占用多少空间
[hadoop@slave3 java]$ hadoop fs -help
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-FromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-ToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[- [-s] [-h] <path> ...]
[-expunge]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-usage [cmd ...]]
-appendToFile <localsrc> ... <dst> :
Appends the contents of all the given local files to the given dst file. The dst
file will be created if it does not exist. If <localSrc> is -, then the input is
read from stdin.
-cat [-ignoreCrc] <src> ... :
Fetch all files that match the file pattern <src> and display their content on
stdout.
-checksum <src> ... :
Dump checksum information for files that match the file pattern <src> to stdout.
Note that this requires a round-trip to a datanode storing each block of the
file, and thus is not efficient to run on a large number of files. The checksum
of a file depends on its content, block size and the checksum algorithm and
parameters used for creating the file.
-chgrp [-R] GROUP PATH... :
This is equivalent to -chown ... :GROUP ...
-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH... :
Changes permissions of a file. This works similar to the shell's chmod command
with a few exceptions.
-R modifies the files recursively. This is the only option currently
supported.
<MODE> Mode is the same as mode used for the shell's command. The only
letters recognized are 'rwxXt', e.g. +t,a+r,g-w,+rwx,o=r.
<OCTALMODE> Mode specifed in 3 or 4 digits. If 4 digits, the first may be 1 or
0 to turn the sticky bit on or off, respectively. Unlike the
shell command, it is not possible to specify only part of the
mode, e.g. 754 is same as u=rwx,g=rx,o=r.
If none of 'augo' is specified, 'a' is assumed and unlike the shell command, no
umask is applied.
-chown [-R] [OWNER][:[GROUP]] PATH... :
Changes owner and group of a file. This is similar to the shell's chown command
with a few exceptions.
-R modifies the files recursively. This is the only option currently
supported.
If only the owner or group is specified, then only the owner or group is
modified. The owner and group names may only consist of digits, alphabet, and
any of [-_./@a-zA-Z0-9]. The names are case sensitive.
WARNING: Avoid using '.' to separate user name and group though Linux allows it.
If user names have dots in them and you are using local file system, you might
see surprising results since the shell command 'chown' is used for local files.
-FromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
Identical to the -put command.
-ToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst> :
Identical to the -get command.
-count [-q] [-h] <path> ... :
Count the number of directories, files and bytes under the paths
that match the specified file pattern. The output columns are:
DIR_COUNT FILE_COUNT CONTENT_SIZE FILE_NAME or
QUOTA REMAINING_QUOTA SPACE_QUOTA REMAINING_SPACE_QUOTA
DIR_COUNT FILE_COUNT CONTENT_SIZE FILE_NAME
The -h option shows file sizes in human readable format.
-cp [-f] [-p | -p[topax]] <src> ... <dst> :
Copy files that match the file pattern <src> to a destination. When ing
multiple files, the destination must be a directory. Passing -p preserves status
[topax] (timestamps, ownership, permission, ACLs, XAttr). If -p is specified
with no <arg>, then preserves timestamps, ownership, permission. If -pa is
specified, then preserves permission also because ACL is a super-set of
permission. Passing -f overwrites the destination if it already exists. raw
namespace extended attributes are preserved if (1) they are supported (HDFS
only) and, (2) all of the source and target pathnames are in the /.reserved/raw
hierarchy. raw namespace xattr preservation is determined solely by the presence
(or absence) of the /.reserved/raw prefix and not by the -p option.
-createSnapshot <snapshotDir> [<snapshotName>] :
Create a snapshot on a directory
-deleteSnapshot <snapshotDir> <snapshotName> :
Delete a snapshot from a directory
-df [-h] [<path> ...] :
Shows the capacity, free and used space of the filesystem. If the filesystem has
multiple partitions, and no path to a particular partition is specified, then
the status of the root partitions will be shown.
-h Formats the sizes of files in a human-readable fashion rather than a number
of bytes.
- [-s] [-h] <path> ... :
Show the amount of space, in bytes, used by the files that match the specified
file pattern. The following flags are optional:
-s Rather than showing the size of each indivial file that matches the
pattern, shows the total (summary) size.
-h Formats the sizes of files in a human-readable fashion rather than a number
of bytes.
Note that, even without the -s option, this only shows size summaries one level
deep into a directory.
The output is in the form
size disk space consumed name(full path)
-expunge :
Empty the Trash
-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst> :
Copy files that match the file pattern <src> to the local name. <src> is kept.
When ing multiple files, the destination must be a directory. Passing -p
preserves access and modification times, ownership and the mode.
-getfacl [-R] <path> :
Displays the Access Control Lists (ACLs) of files and directories. If a
directory has a default ACL, then getfacl also displays the default ACL.
-R List the ACLs of all files and directories recursively.
<path> File or directory to list.
-getfattr [-R] {-n name | -d} [-e en] <path> :
Displays the extended attribute names and values (if any) for a file or
directory.
-R Recursively list the attributes for all files and directories.
-n name Dump the named extended attribute value.
-d Dump all extended attribute values associated with pathname.
-e <encoding> Encode values after retrieving them.Valid encodings are "text",
"hex", and "base64". Values encoded as text strings are enclosed
in double quotes ("), and values encoded as hexadecimal and
base64 are prefixed with 0x and 0s, respectively.
<path> The file or directory.
-getmerge [-nl] <src> <localdst> :
Get all the files in the directories that match the source file pattern and
merge and sort them to only one file on local fs. <src> is kept.
-nl Add a newline character at the end of each file.
-help [cmd ...] :
Displays help for given command or all commands if none is specified.
-ls [-d] [-h] [-R] [<path> ...] :
List the contents that match the specified file pattern. If path is not
specified, the contents of /user/<currentUser> will be listed. Directory entries
are of the form:
permissions - userId groupId sizeOfDirectory(in bytes)
modificationDate(yyyy-MM-dd HH:mm) directoryName
and file entries are of the form:
permissions numberOfReplicas userId groupId sizeOfFile(in bytes)
modificationDate(yyyy-MM-dd HH:mm) fileName
-d Directories are listed as plain files.
-h Formats the sizes of files in a human-readable fashion rather than a number
of bytes.
-R Recursively list the contents of directories.
很简单明了,前面的数字即为目录所占空间的大小,后面的因为我前期 备份数为3 后期改为2 所以可能会不一样
㈨ 怎么改变HDFS块大小
这个一般没必要修改,因为默认的配置就可以,大块的文件减少了寻址开销(就是寻找文件的速度快)而且即使文件小于默认块大小,hdfs也不会让单个文件占用一个块,你要修改的话,去 conf 目录下
在hdfs-site.xml中添加一下属性:
<property>
<name>dfs.block.size</name>
<value>块大小 以KB为单位</value>//只写数值就可以
</property>
< property>
< name>dfs.namenode.fs-limits.min-block-size</name>
< value>51200</value>
< /property>
< property>
< name>dfs.namenode.fs-limits.max-blocks-per-file</name>
< value>51200</value>
< /property>
最后这个文件系统的大小应该是有个算法得出来得。
另外一种是在hdfs-site.xml中修改,这种因该是不改变文件原有块得大小,新建得文件大小改变,如下
<property>
<name>dfs.block.size</name>
<value>块大小</value>
<description>The default block size for new files.</description>
</property>
㈩ hive文件块大小与hdfs设置大小不一致
在hdfs-site.xml配置文件里加上如下内容:
[html view plain
<property>
<name>dfs.blocksize</name>
<value>2m</value>
</property>
<property>
<name>dfs.namenode.fs-limits.min-block-size</name>
<value>2m</value>
</property>
然后重启Hadoop集群