001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 package org.apache.hadoop.hdfs.client; 019 020 import java.io.IOException; 021 import java.net.URI; 022 023 import org.apache.hadoop.classification.InterfaceAudience; 024 import org.apache.hadoop.classification.InterfaceStability; 025 import org.apache.hadoop.conf.Configuration; 026 import org.apache.hadoop.fs.FileSystem; 027 import org.apache.hadoop.fs.Path; 028 import org.apache.hadoop.hdfs.DistributedFileSystem; 029 import org.apache.hadoop.hdfs.protocol.HdfsConstants; 030 import org.apache.hadoop.hdfs.tools.DFSAdmin; 031 032 /** 033 * The public API for performing administrative functions on HDFS. Those writing 034 * applications against HDFS should prefer this interface to directly accessing 035 * functionality in DistributedFileSystem or DFSClient. 036 * 037 * Note that this is distinct from the similarly-named {@link DFSAdmin}, which 038 * is a class that provides the functionality for the CLI `hdfs dfsadmin ...' 039 * commands. 040 */ 041 @InterfaceAudience.Public 042 @InterfaceStability.Evolving 043 public class HdfsAdmin { 044 045 private DistributedFileSystem dfs; 046 047 /** 048 * Create a new HdfsAdmin client. 049 * 050 * @param uri the unique URI of the HDFS file system to administer 051 * @param conf configuration 052 * @throws IOException in the event the file system could not be created 053 */ 054 public HdfsAdmin(URI uri, Configuration conf) throws IOException { 055 FileSystem fs = FileSystem.get(uri, conf); 056 if (!(fs instanceof DistributedFileSystem)) { 057 throw new IllegalArgumentException("'" + uri + "' is not an HDFS URI."); 058 } else { 059 dfs = (DistributedFileSystem)fs; 060 } 061 } 062 063 /** 064 * Set the namespace quota (count of files, directories, and sym links) for a 065 * directory. 066 * 067 * @param src the path to set the quota for 068 * @param quota the value to set for the quota 069 * @throws IOException in the event of error 070 */ 071 public void setQuota(Path src, long quota) throws IOException { 072 dfs.setQuota(src, quota, HdfsConstants.QUOTA_DONT_SET); 073 } 074 075 /** 076 * Clear the namespace quota (count of files, directories and sym links) for a 077 * directory. 078 * 079 * @param src the path to clear the quota of 080 * @throws IOException in the event of error 081 */ 082 public void clearQuota(Path src) throws IOException { 083 dfs.setQuota(src, HdfsConstants.QUOTA_RESET, HdfsConstants.QUOTA_DONT_SET); 084 } 085 086 /** 087 * Set the disk space quota (size of files) for a directory. Note that 088 * directories and sym links do not occupy disk space. 089 * 090 * @param src the path to set the space quota of 091 * @param spaceQuota the value to set for the space quota 092 * @throws IOException in the event of error 093 */ 094 public void setSpaceQuota(Path src, long spaceQuota) throws IOException { 095 dfs.setQuota(src, HdfsConstants.QUOTA_DONT_SET, spaceQuota); 096 } 097 098 /** 099 * Clear the disk space quota (size of files) for a directory. Note that 100 * directories and sym links do not occupy disk space. 101 * 102 * @param src the path to clear the space quota of 103 * @throws IOException in the event of error 104 */ 105 public void clearSpaceQuota(Path src) throws IOException { 106 dfs.setQuota(src, HdfsConstants.QUOTA_DONT_SET, HdfsConstants.QUOTA_RESET); 107 } 108 109 /** 110 * Allow snapshot on a directory. 111 * @param path The path of the directory where snapshots will be taken. 112 */ 113 public void allowSnapshot(Path path) throws IOException { 114 dfs.allowSnapshot(path); 115 } 116 117 /** 118 * Disallow snapshot on a directory. 119 * @param path The path of the snapshottable directory. 120 */ 121 public void disallowSnapshot(Path path) throws IOException { 122 dfs.disallowSnapshot(path); 123 } 124 }