1. 程式人生 > >hadoop分散式檔案系統(HDFS)常用API學習

hadoop分散式檔案系統(HDFS)常用API學習

1、org.apache.hadoop.fs.FileSystem

範圍 方法 返回值 描述
addDelegationTokens(String renewer, Credentials credentials) Token<?>[] 新增新的token,返回所有的token
append(Path f) FSDataOutputStream 新增一個已經存在的檔案
append(Path f, int bufferSize) FSDataOutputStream 新增一個已經存在的檔案,自定義緩衝區
abstract append(Path f, int bufferSize, Progressable progress) FSDataOutputStream 新增一個已經存在的檔案,自定義緩衝區和寫入過程
appendFile(Path path) FSDataOutputStreamBuilder 建立一個FSDataOutputStreamBuilder,用於新增檔案
static areSymlinksEnabled() boolean 檔案系統中的符號連線是否可用
cancelDeleteOnExit(Path f) boolean 在FileSystem關閉時取消刪除指定的檔案
protected canonicalizeUri(URI uri) URI 規範給定的URI
protected checkPath(Path path) void 檢查Path是否屬於此FileSystem。
static clearStatistics() void 重置所有檔案系統的所有統計資訊
close() void 關閉這個FileSystem例項
static closeAll() void 關閉所有快取的FileSystem例項
static closeAllForUGI(UserGroupInformation ugi) void 關閉給定UGI的所有快取檔案系統例項
completeLocalOutput(Path fsOutputFile, Path tmpLocalFile) void 當我們都寫完目標時呼叫。
concat(Path trg, Path[] psrcs) void 將存在的檔案連線
copyFromLocalFile(boolean delSrc, boolean overwrite, Path[] srcs, Path dst) void 將本地檔案複製到hdfs中
copyFromLocalFile(boolean delSrc, boolean overwrite, Path src, Path dst) void 將本地檔案複製到hdfs中
copyFromLocalFile(boolean delSrc, Path src, Path dst) void 將本地檔案複製到hdfs中
copyFromLocalFile(Path src, Path dst) void 將本地檔案複製到hdfs中
copyToLocalFile(boolean delSrc, Path src, Path dst) void 將hdfs的檔案複製到本地檔案
copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem) void 將hdfs的檔案複製到本地檔案
copyToLocalFile(Path src, Path dst) void 將hdfs的檔案複製到本地檔案
static create(FileSystem fs, Path file, FsPermission permission) FSDataOutputStream 建立一個檔案,並新增許可權(注意:並不能直接建立一個檔案,而是建立了一個輸入流,其他的也一樣)
create(Path f) FSDataOutputStream 在指定的路徑上建立一個FSDataOutputStream。
create(Path f, boolean overwrite) FSDataOutputStream 在指定的路徑上建立一個FSDataOutputStream。
create(Path f, boolean overwrite, int bufferSize) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, boolean overwrite, int bufferSize, Progressable progress) FSDataOutputStream 在指定的路徑上建立一個檔案,自定義進度
create(Path f, boolean overwrite, int bufferSize, short replication, long blockSize) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) FSDataOutputStream 在指定的路徑上建立一個檔案
abstract create(Path f, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress, Options.ChecksumOpt checksumOpt) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, Progressable progress) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, short replication) FSDataOutputStream 在指定的路徑上建立一個檔案
create(Path f, short replication, Progressable progress) FSDataOutputStream 在指定的路徑上建立一個檔案
createFile(Path path) FSDataOutputStreamBuilder 建立一個FSDataOutputStreamBuilder,用於建立檔案
createNewFile(Path f) boolean 建立一個空檔案
createNonRecursive(Path f, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) FSDataOutputStream 在指定的路徑中開啟一個檔案
createNonRecursive(Path f, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) FSDataOutputStream 在指定的路徑中開啟一個檔案
createNonRecursive(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress) FSDataOutputStream 在指定的路徑中開啟檔案
createSnapshot(Path path) Path 使用預設名稱建立快照。
createSnapshot(Path path, String snapshotName) Path 建立一個快照
createSymlink(Path target, Path link, boolean createParent) void 建立一個符號連線
delete(Path f) boolean 刪除一個檔案
abstract delete(Path f, boolean recursive) boolean 是否迴圈刪除一個檔案及其子檔案
deleteOnExit(Path f) boolean 當FileSystem關閉時,刪除指定的檔案
deleteSnapshot(Path path, String snapshotName) void 刪除目錄的快照
static enableSymlinks() void 啟用符號連線
exists(Path f) boolean 檢查路徑是否存在
protected fixRelativePart(Path p) Path 修復相對路徑
static get(Configuration conf) FileSystem 返回配置的FileSystem例項
static get(URI uri, Configuration conf) FileSystem 通過uri和配置檔案例項一個FileSystem
static get(URI uri, Configuration conf, String user) FileSystem 獲取基於uri,傳入配置和使用者的FileSystem例項
getAclStatus(Path path) AclStatus 獲取檔案或目錄的ACL
static getAllStatistics() List<FileSystem.Statistics> 獲取FileSystem中所有的統計資訊
Collection<? getAllStoragePolicies() extends 檢索此檔案系統支援的所有儲存策略
getBlockSize(Path f) long 獲取FileSystem中塊的大小
getCanonicalServiceName() String 獲取此FileSystem的規範服務名稱
protected getCanonicalUri() URI 返回此FileSystem的URI的規範化形式
getContentSummary(Path f) ContentSummary 返回給定的路徑或檔案的摘要資訊
getDefaultBlockSize() long 獲取FileSystem的預設塊大小
getDefaultBlockSize(Path f) long 返回大型輸入檔案應該被最優分割的位元組數,以最大限度地減少I/O時間
protected getDefaultPort() int 獲取此FileSystem的預設埠
getDefaultReplication() short 獲取此FileSystem的預設副本數
getDefaultReplication(Path path) short 獲取路徑的預設複本數
static getDefaultUri(Configuration conf) URI 從配置獲取預設的FileSystem URI
getFileBlockLocations(FileStatus file, long start, long len) BlockLocation[] 返回包含給定檔案部分的主機名,偏移量和大小的陣列
getFileBlockLocations(Path p, long start, long len) BlockLocation[] 返回包含給定檔案部分的主機名,偏移量和大小的陣列
getFileChecksum(Path f) FileChecksum 如果FS支援校驗和,則獲取檔案的校驗和
getFileChecksum(Path f, long length) FileChecksum 獲取從檔案開始到特定長度獲取檔案的校驗和
getFileLinkStatus(Path f) FileStatus 返回表示路徑的檔案狀態物件,如果路徑指向符號連結,則返回符號連結的FileStatus。如果底層檔案系統不支援符號連結,則該行為等同於#getFileStatus()
abstract getFileStatus(Path f) FileStatus 返回表示路徑的檔案狀態物件。
static getFileSystemClass(String scheme, Configuration conf) Class<?> 獲取檔案系統的FileSystem實現類。
protected getFSofPath(Path absOrFqPath, Configuration conf) static 通過path和配置獲取FileSystem例項
static getGlobalStorageStatistics() GlobalStorageStatistics 獲取全域性儲存統計資訊
getHomeDirectory() Path 在此FileSystem中返回當前使用者的主目錄。
protected getInitialWorkingDirectory() Path 注意:使用新的FileContext類,getWorkingDirectory()將被刪除
getLength(Path f) long 獲取檔案內容的長度
getLinkTarget(Path f) Path 獲取符號連線的實際檔案
static getLocal(Configuration conf) LocalFileSystem 獲取本地檔案系統
getName() String 獲取檔案系統的名稱
static getNamed(String name, Configuration conf) FileSystem 根據名字和配置例項一個FileSystem
getPathHandle(FileStatus stat, Options.HandleOpt… opt) PathHandle 建立一個持久的,可序列化的給定實體物件的處理
getQuotaUsage(Path f) QuotaUsage 返回給定檔案的配額使用情況
getReplication(Path src) short 獲取指定檔案得到副本數量
getScheme() String 返回此FileSystem的Scheme
getServerDefaults() FsServerDefaults 返回FileSystem的預設Server
getServerDefaults(Path p) FsServerDefaults 返回一組Server的預設配置值
static getStatistics() Map<String,FileSystem.Statistics> 獲取FileSystem中的統計資料
static getStatistics(String scheme, Class<? extends FileSystem> cls) FileSystem.Statistics
getStatus() FsStatus 返回描述檔案系統使用和容量的狀態物件。
getStatus(Path p) FsStatus 返回描述檔案系統使用和容量的狀態物件。
getStoragePolicy(Path src) BlockStoragePolicySpi 查詢給定檔案或目錄的有效儲存策略ID
getStorageStatistics() StorageStatistics 獲取此FileSystem物件的儲存情況
getTrashRoot(Path path) Path 當指定的路徑被刪除時,獲取當前使用者的垃圾桶根目錄
getTrashRoots(boolean allUsers) Collection<FileStatus> 獲取當前使用者或所有使用者的所有垃圾桶
abstract getUri() URI 返回標識此檔案系統的URI
getUsed() long 返回檔案系統中所有檔案的總大小
getUsed(Path path) long 返回指定路徑中所有檔案的總大小
abstract getWorkingDirectory() Path 獲取給定檔案系統的當前工作目錄
getXAttr(Path path, String name) byte[] 獲取檔案或目錄的xattr key和value
getXAttrs(Path path) Map<String,byte[]> 獲取檔案或目錄的所有xattr key/value對
getXAttrs(Path path, List<String> names) Map<String,byte[]> 獲取檔案或目錄的所有xattrs
globStatus(Path pathPattern) FileStatus[] 返回所有匹配filePattern的FileStatus,但是不去校驗檔案
globStatus(Path pathPattern, PathFilter filter) FileStatus[] 返回所有符合pathPattern,並且過濾後的FileStatus
initialize(URI name, Configuration conf) void 初始化檔案系統
isDirectory(Path f) boolean 判斷一個檔案是不是檔案件
isFile(Path f) boolean 判斷path物件是不是一個檔案
listCorruptFileBlocks(Path path) RemoteIterator<Path> 列出損壞的檔案塊
listFiles(Path f, boolean recursive) RemoteIterator<LocatedFileStatus> 列出給定路徑中檔案的狀態和塊位置
listLocatedStatus(Path f) RemoteIterator<LocatedFileStatus> 如果路徑是目錄,則列出給定路徑中檔案/目錄的狀態
protected listLocatedStatus(Path f, PathFilter filter) RemoteIterator<LocatedFileStatus> 列出一個目錄
abstract listStatus(Path f) FileStatus[] 如果路徑是目錄,則列出給定路徑中檔案/目錄的狀態
listStatus(Path[] files) FileStatus[] 使用預設路徑過濾器過濾給定路徑列表中的檔案/目錄
listStatus(Path[] files, PathFilter filter) FileStatus[] 使用使用者提供的路徑過濾器過濾給定路徑列表中的檔案/目錄
listStatus(Path f, PathFilter filter) FileStatus[] 使用使用者提供的路徑過濾器過濾給定路徑中的檔案/目錄
listStatusIterator(Path p) RemoteIterator<FileStatus> 返回一個遠端迭代器,以便在使用條目時按需呼叫後續呼叫
listXAttrs(Path path) List<String> 獲取檔案或目錄的所有xattr名稱
makeQualified(Path path) Path 限定使用此FileSystem的路徑,如果相對,則返回絕對路徑
static mkdirs(FileSystem fs, Path dir, FsPermission permission) boolean 使用用提供的許可權建立一個目錄。
mkdirs(Path f) boolean 以預設許可權建立一個目錄
abstract mkdirs(Path f, FsPermission permission) boolean 建立指定許可權的檔案,如果檔案父目錄不存在,則會自動建立
modifyAclEntries(Path path, List<AclEntry> aclSpec) void 修改檔案和目錄的ACL條目
moveFromLocalFile(Path[] srcs, Path dst) void 將本地檔案移動到FileSystem
moveFromLocalFile(Path src, Path dst) void 將本地檔案移動到FileSystem
moveToLocalFile(Path src, Path dst) void 將檔案複製到本地檔案系統,然後將其從遠端檔案系統中刪除(如果已成功複製)
static newInstance(Configuration conf) FileSystem 為所提供的配置的預設檔案系統返回一個唯一配置的FileSystem實現。
static newInstance(URI uri, Configuration config) FileSystem 返回此URI的模式和許可權的FileSystem
static newInstance(URI uri, Configuration conf, String user) FileSystem 返回此URI的方案和許可權以及給定使用者的FileSystem
static newInstanceLocal(Configuration conf) LocalFileSystem 獲取唯一的本地FileSystem物件
open(Path f) FSDataInputStream 在指定的路徑中開啟一個FSDataInputStream
open(PathHandle fd) FSDataInputStream 開啟一個匹配PathHandle例項的FSDataInputStream
open(PathHandle fd, int bufferSize) FSDataInputStream 開啟一個匹配PathHandle例項的FSDataInputStream
abstract open(Path f, int bufferSize) FSDataInputStream 在指定的路徑中開啟一個FSDataInputStream
static printStatistics() void 將所有統計資訊以流Sysem.out輸處
protected processDeleteOnExit() void 刪除標記為退出時刪除的所有路徑
removeAcl(Path path) void 刪除除檔案和目錄的基本ACL條目以外的所有條目
removeAclEntries(Path path, List<AclEntry> aclSpec) void 從檔案和目錄中刪除ACL條目
removeDefaultAcl(Path path) void 從檔案和目錄中刪除所有預設ACL條目。
removeXAttr(Path path, String name) void 刪除檔案或目錄的xattr。
abstract rename(Path src, Path dst) boolean 將Path src重新命名為Path dst
protected rename(Path src, Path dst, Options.Rename… options) void
renameSnapshot(Path path, String snapshotOldName, String snapshotNewName) void 重新命名快照
protected resolveLink(Path f) Path 通過任何符號連結或掛載點解析路徑,返回路徑的全限定路徑
resolvePath(Path p) Path 通過任何符號連結或掛載點解析路徑,返回路徑的全限定路徑
setAcl(Path path, List<AclEntry> aclSpec) void 完全替代檔案和目錄的ACL,丟棄所有現有條目
static setDefaultUri(Configuration conf, String uri) void 在配置中設定預設的FileSystem URI
static setDefaultUri(Configuration conf, URI uri) void 在配置中設定預設的FileSystem URI
setOwner(Path p, String username, String groupname) void 設定一個路徑的所有者
setPermission(Path p, FsPermission permission) void 設定路徑的許可權
setReplication(Path src, short replication) boolean 設定現有檔案的複本數
setStoragePolicy(Path src, String policyName) void 設定給定檔案或目錄的儲存策略
setTimes(Path p, long mtime, long atime) void 設定檔案的訪問時間
setVerifyChecksum(boolean verifyChecksum) void 設定驗證校驗和標誌
abstract setWorkingDirectory(Path new_dir) void 設定給定檔案系統的當前工作目錄
setWriteChecksum(boolean writeChecksum) void 設定寫校驗和標誌
setXAttr(Path path, String name, byte[] value) void 設定檔案或目錄的xattr。
setXAttr(Path path, String name, byte[] value, EnumSet<XAttrSetFlag> flag) void 設定檔案或目錄的xattr
startLocalOutput(Path fsOutputFile, Path tmpLocalFile) Path 返回使用者可以將輸出寫入的本地檔案
supportsSymlinks() boolean 是都支援符號連線
truncate(Path f, long newLength) boolean 將指定路徑中的檔案截斷為指定的大小
unsetStoragePolicy(Path src) void 取消設定給定檔案或目錄的儲存策略集

2、org.apache.hadoop.fs.Path

方法 返回值 說明 備註
new Path(String path) String 建構函式
new Path(URI url) boolean 建構函式
getName() String 獲取檔案或者資料夾的名字
path.isAbsolute() boolean 判斷資料夾或檔案是否是絕對路徑
isRoot() boolean 是不是根目錄
depth() int 檔案或資料夾的深度 相對與根路徑,根路徑是0,使用者目錄是2,….
getParent() String 檔案或資料夾的父路徑 如果是根目錄則返回null
isAbsoluteAndSchemeAuthorityNull boolean 如果檔案或目錄是絕對路徑,並且Scheme和Authority都是null返回true
isUriPathAbsolute boolean 檔案或目錄的uri path 是不是絕對路徑
suffix(String s) Path 為檔案或目錄新增字尾
toUri() URI path物件轉uri物件

3、org.apache.hadoop.FileStatus

方法 返回值 說明 備註
getPath() Path 返回檔案的Path物件
getAccessTime long 返回檔案的上一次訪問時間
getGroup() String 返回檔案的組屬性
getOwner() String 返回檔案的擁有者
getBlockSize() long 返回檔案的塊大小
getLen() long 返回檔案內容大小
getPermission() FsPermission 返回檔案的許可權物件
getModificationTime() long 返回檔案最後修改時間
getSymlink() Path 返回檔案符號連線路徑
hasAcl() boolean 檔案是否設定ACL
isEncrypted() boolean 檔案是否加密
isFile() boolean 判斷是否是檔案
getReplication() int 返回檔案副本數
isSnapshotEnabled() boolean 是否使用快照

單元測試

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Cluster;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class FileStatusTest {
    private FileSystem fs;
    private Path path = new Path("hdfs://localhost/user/lhy/poem");
    private Cluster cluster;

    @Before
    public void setUp() throws IOException, InterruptedException {
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS","hdfs://localhost");
        fs = FileSystem.get(configuration);
    }


    @After
    public void tearDown() throws IOException {
        if (fs != null){
            fs.close();
        }

        if (cluster != null){
            cluster.close();
        }
    }

    @Test
    public void pathTest() throws IOException {
        System.out.println("------------org.apache.hadoop.fs.Path-test-start----------");
        System.out.println("檔案或目錄的名字:"+ path.getName());
        System.out.println("檔案或目錄是否是絕對路徑:" + path.isAbsolute());
        System.out.println("是不是根目錄:" + path.isRoot());
        System.out.println("根目錄的深度是1,使用者目錄深度是2,此處檔案的深度是: " + path.depth());
        System.out.println("檔案或目錄的父資料夾:" + path.getParent());
        System.out.println("檔案或目錄isAbsoluteAndSchemeAuthorityNull:" + path.isAbsoluteAndSchemeAuthorityNull());
        System.out.println("檔案或目錄的父資料夾:" + path.getParent());
        System.out.println("檔案或目錄的URI Path 是不是絕對路徑:" + path.isUriPathAbsolute());
        System.out.println("為檔案或目錄新增字尾:" + path.suffix(".TXT"));
        System.out.println("path物件轉uri物件:" + path.toUri());
        System.out.println("------------org.apache.hadoop.fs.Path-test-end----------\n");
    }


    @Test
    public void fileStatusTest() throws IOException {
        System.out.println("------------org.apache.hadoop.fs.FileStatus-test-start----------");
        FileStatus fileStatus = fs.getFileStatus(path);
        System.out.println("檔案的path:" + fileStatus.getPath());
        System.out.println("檔案的上一次訪問時間:" + fileStatus.getAccessTime());
        System.out.println("檔案所屬組:" + fileStatus.getGroup());
        System.out.println("檔案的所屬:" + fileStatus.getOwner());
        System.out.println("檔案快的大小(單位bit):" + fileStatus.getBlockSize());
        System.out.println("檔案內容長度" + fileStatus.getLen());
        System.out.println("檔案的許可權:"+ fileStatus.getPermission());
        System.out.println("最後修改時間:"+ fileStatus.getModificationTime());
//        System.out.println("檔案連線的路徑(軟連線或者硬連線的路徑):"+ fileStatus.getSymlink());//if link path not found,will be throw an exception
        System.out.println("是否是一個資料夾:"+fileStatus.isDirectory());
        System.out.println("檔案是否設定ACL:"+fileStatus.hasAcl());
        System.out.println("檔案是否加密:"+fileStatus.isEncrypted());
        System.out.println("是否是檔案:"+fileStatus.isFile());
        System.out.println("檔案個副本個數:"+fileStatus.getReplication());
        System.out.println("是否使用快照:"+fileStatus.isSnapshotEnabled());
        System.out.println("------------org.apache.hadoop.fs.FileStatus-test-end----------\n");
    }

    @Test
    public void filSystemTest() throws IOException {
        Path path = new Path("poem");

        System.out.println("目錄或檔案是否存在:" + fs.exists(path));
        System.out.println("獲取檔案系統的服務地址:" + fs.getCanonicalServiceName());
//        Path newPath = new Path("test");
//        System.out.println("使用者目錄下建立資料夾test:" + fs.mkdirs(newPath));//如果已經存在,則會建立失敗,丟擲異常

//        System.out.println("本地檔案拷貝到hdfs,檔案存在則會覆蓋:");
//        Path localPath = new Path(URI.create("/Users/lhy/Desktop/春江花月夜.poem"));
//        fs.copyFromLocalFile(localPath,path);

        System.out.println("列出所有的檔案:");
        FileStatus[] fileStatuses = fs.listStatus(path);
        for (FileStatus fileStatus : fileStatuses){
            System.out.println(fileStatus.getPath());
        }

        System.out.println("列出所有過濾後的檔案:");
        FileStatus[] fileStatuses2 = fs.listStatus(path, path2 -> !path2.getName().contains("txt"));
        for (FileStatus fileStatus : fileStatuses2){
            System.out.println(fileStatus.getPath());
        }

    }

}