操作命令
- 创建用例
* get
fs = FileSystem.get(conf)
- 创建目录
* mkdirs
fs.mkdirs(path)
- 写入文件
* 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)
- 存储策略
* 为HDFS上某个文件或文件夹指定存储策略。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:是客户端应用的核心类
get
create
copyFromLocalFile
mkdirs
rename
delete
exists
getFileStatus
getFileBlockLocations
open
create
append
2.FileStatus:记录文件和目录的状态信息
getModificationTime
getPath
运行维护
- 内存规划
NameNode JVM配置可以根据文件对象数量来评估,正常情况下每1千万文件数量,nn的堆内存需要6G, - 容量均衡
- datanode的balance
- disk的balance
- 副本放置策略(可用磁盘剩余空间策略(org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy )
- 回收机制
默认1h检测一次,默认2天清理一次,skiptrash跳过回收站直接删除 - 文件权限
默认创建文件或文件夹权限是755 - 预留磁盘
预留磁盘百分比 默认10% - 常见问题
- IOException (Too many open files) 句柄数超过限制
- 当执行HDFS客户端命令时,客户端程序异常退出,报“java.lang.OutOfMemoryError”的错误,需要修改CLIENT_GC_OPTS修改HDFS客户端的内存上限
- 在JournalNode节点有断电,数据目录磁盘占满,网络异常时,会导致JournalNode上的EditLog不连续。此时如果重启NameNode,很可能会失败。需要从其他jn节点上把EditLog拷贝补齐,然后重启