clientprotocol.java
来自「Hadoop是一个用于运行应用程序在大型集群的廉价硬件设备上的框架。Hadoop」· Java 代码 · 共 208 行
JAVA
208 行
/** * Copyright 2005 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.hadoop.dfs;import java.io.*;/********************************************************************** * ClientProtocol is used by a piece of DFS user code to communicate * with the NameNode. User code can manipulate the directory namespace, * as well as open/close file streams, etc. * * @author Mike Cafarella **********************************************************************/interface ClientProtocol { /////////////////////////////////////// // File contents /////////////////////////////////////// /** * Open an existing file, at the given name. Returns block * and DataNode info. The client will then have to contact * each indicated DataNode to obtain the actual data. There * is no need to call close() or any other function after * calling open(). */ public LocatedBlock[] open(String src) throws IOException; /** * Create a new file. Get back block and datanode info, * which describes where the first block should be written. * * Successfully calling this method prevents any other * client from creating a file under the given name, but * the caller must invoke complete() for the file to be * added to the filesystem. * * Blocks have a maximum size. Clients that intend to * create multi-block files must also use reportWrittenBlock() * and addBlock(). */ public LocatedBlock create(String src, String clientName, String clientMachine, boolean overwrite) throws IOException; /** * A client that has written a block of data can report completion * back to the NameNode with reportWrittenBlock(). Clients cannot * obtain an additional block until the previous one has either been * reported as written or abandoned. */ public void reportWrittenBlock(LocatedBlock b) throws IOException; /** * If the client has not yet called reportWrittenBlock(), it can * give up on it by calling abandonBlock(). The client can then * either obtain a new block, or complete or abandon the file. * * Any partial writes to the block will be garbage-collected. */ public void abandonBlock(Block b, String src) throws IOException; /** * A client that wants to write an additional block to the * indicated filename (which must currently be open for writing) * should call addBlock(). * * addBlock() returns block and datanode info, just like the initial * call to create(). * * A null response means the NameNode could not allocate a block, * and that the caller should try again. */ public LocatedBlock addBlock(String src, String clientMachine) throws IOException; /** * A client that wants to abandon writing to the current file * should call abandonFileInProgress(). After this call, any * client can call create() to obtain the filename. * * Any blocks that have been written for the file will be * garbage-collected. */ public void abandonFileInProgress(String src) throws IOException; /** * The client is done writing data to the given filename, and would * like to complete it. * * The function returns whether the file has been closed successfully. * If the function returns false, the caller should try again. * * A call to complete() will not return true until all the file's * blocks have been replicated the minimum number of times. Thus, * DataNode failures may cause a client to call complete() several * times before succeeding. */ public boolean complete(String src, String clientName) throws IOException; /////////////////////////////////////// // Namespace management /////////////////////////////////////// /** * Rename an item in the fs namespace */ public boolean rename(String src, String dst) throws IOException; /** * Remove the given filename from the filesystem */ public boolean delete(String src) throws IOException; /** * Check whether the given file exists */ public boolean exists(String src) throws IOException; /** * Check whether the given filename is a directory or not. */ public boolean isDir(String src) throws IOException; /** * Create a directory (or hierarchy of directories) with the given * name. */ public boolean mkdirs(String src) throws IOException; /** * Get a listing of the indicated directory */ public DFSFileInfo[] getListing(String src) throws IOException; /////////////////////////////////////// // System issues and management /////////////////////////////////////// /** * getHints() returns a list of hostnames that store data for * a specific file region. It returns a set of hostnames for * every block within the indicated region. * * This function is very useful when writing code that considers * data-placement when performing operations. For example, the * MapReduce system tries to schedule tasks on the same machines * as the data-block the task processes. */ public String[][] getHints(String src, long start, long len) throws IOException; /** * obtainLock() is used for lock managemnet. It returns true if * the lock has been seized correctly. It returns false if the * lock could not be obtained, and the client should try again. * * Locking is a part of most filesystems and is useful for a * number of inter-process synchronization tasks. */ public boolean obtainLock(String src, String clientName, boolean exclusive) throws IOException; /** * releaseLock() is called if the client would like to release * a held lock. It returns true if the lock is correctly released. * It returns false if the client should wait and try again. */ public boolean releaseLock(String src, String clientName) throws IOException; /** * Client programs can cause stateful changes in the NameNode * that affect other clients. A client may obtain a file and * neither abandon nor complete it. A client might hold a series * of locks that prevent other clients from proceeding. * Clearly, it would be bad if a client held a bunch of locks * that it never gave up. This can happen easily if the client * dies unexpectedly. * * So, the NameNode will revoke the locks and live file-creates * for clients that it thinks have died. A client tells the * NameNode that it is still alive by periodically calling * renewLease(). If a certain amount of time passes since * the last call to renewLease(), the NameNode assumes the * client has died. */ public void renewLease(String clientName) throws IOException; /** * Get a set of statistics about the filesystem. * Right now, only two values are returned. * [0] contains the total storage capacity of the system, * in bytes. * [1] contains the available storage of the system, in bytes. */ public long[] getStats() throws IOException; /** * Get a full report on the system's current datanodes. * One DatanodeInfo object is returned for each DataNode. */ public DatanodeInfo[] getDatanodeReport() throws IOException;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?