操作命令
- 創(chuàng)建用例
* get
fs = FileSystem.get(conf)
- 創(chuàng)建目錄
* mkdirs
fs.mkdirs(path)
- 寫(xiě)入文件
* create
out = fs.create(path)
out.write(bytes)
out.hsync()
IOUtils.closeStream(out)
- 追加文件
* append
out = fs.append(path)
out.write(bytes)
out.hsync()
IOUtils.closeStream(out)
- 讀取文件
* open
in = fs.open(path)
reader = new BufferedReader(new InputStreamReader(in))
readerLine = reader.readLine()
IOUtils.closeStream(reader)
IOUtils.closeStream(in)
- 刪除文件
* delete
fs.delete(path,false)
- 刪除目錄
* delete
fs.delete(path,true)
- 存儲(chǔ)策略
* 為HDFS上某個(gè)文件或文件夾指定存儲(chǔ)策略。policyName
* <li>HOT
* <li>WARM
* <li>COLD
* <li>LAZY_PERSIST
* <li>ALL_SSD
* <li>ONE_SSD
DistributedFileSystem dfs = (DistributedFileSystem) fs
BlockStoragePolicySpi[] storage = dfs.getStoragePolicies();
dfs.setStoragePolicy(destPath, policyName);
- FileSystem:是客戶(hù)端應(yīng)用的核心類(lèi)
get
create
copyFromLocalFile
mkdirs
rename
delete
exists
getFileStatus
getFileBlockLocations
open
create
append
2.FileStatus:記錄文件和目錄的狀態(tài)信息
getModificationTime
getPath
運(yùn)行維護(hù)
- 內(nèi)存規(guī)劃
NameNode JVM配置可以根據(jù)文件對(duì)象數(shù)量來(lái)評(píng)估,正常情況下每1千萬(wàn)文件數(shù)量,nn的堆內(nèi)存需要6G, - 容量均衡
- datanode的balance
- disk的balance
- 副本放置策略(可用磁盤(pán)剩余空間策略(org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy )
- 回收機(jī)制
默認(rèn)1h檢測(cè)一次,默認(rèn)2天清理一次,skiptrash跳過(guò)回收站直接刪除 - 文件權(quán)限
默認(rèn)創(chuàng)建文件或文件夾權(quán)限是755 - 預(yù)留磁盤(pán)
預(yù)留磁盤(pán)百分比 默認(rèn)10% - 常見(jiàn)問(wèn)題
- IOException (Too many open files) 句柄數(shù)超過(guò)限制
- 當(dāng)執(zhí)行HDFS客戶(hù)端命令時(shí),客戶(hù)端程序異常退出,報(bào)“java.lang.OutOfMemoryError”的錯(cuò)誤,需要修改CLIENT_GC_OPTS修改HDFS客戶(hù)端的內(nèi)存上限
- 在JournalNode節(jié)點(diǎn)有斷電,數(shù)據(jù)目錄磁盤(pán)占滿(mǎn),網(wǎng)絡(luò)異常時(shí),會(huì)導(dǎo)致JournalNode上的EditLog不連續(xù)。此時(shí)如果重啟NameNode,很可能會(huì)失敗。需要從其他jn節(jié)點(diǎn)上把EditLog拷貝補(bǔ)齊,然后重啟