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集群