DFSCheck 也是个命令行工具类,提供DFS卷的基本检查,以检查是否存在错误
直接看代码吧
public class DFSck extends ToolBase {
private static final Log LOG = LogFactory.getLog(DFSck.class.getName());
DFSck() {}
/**
* Filesystem checker.
* @param conf current Configuration
* @throws Exception
*/
public DFSck(Configuration conf) throws Exception {
setConf(conf);
}
private String getInfoServer() throws IOException {
InetSocketAddress addr =
DataNode.createSocketAddr(conf.get("fs.default.name"));
int infoPort = conf.getInt("dfs.info.port", 50070);
return addr.getHostName() + ":" + infoPort;
}
/**
* @param args
*/
public int run(String[] args) throws Exception {
String fsName = getInfoServer();
if (args.length == 0) {
System.err.println("Usage: DFSck <path> [-move | -delete] [-files] [-blocks [-locations]]");
System.err.println("\t<path>\tstart checking from this path");
System.err.println("\t-move\tmove corrupted files to /lost+found");
System.err.println("\t-delete\tdelete corrupted files");
System.err.println("\t-files\tprint out files being checked");
System.err.println("\t-blocks\tprint out block report");
System.err.println("\t-locations\tprint out locations for every block");
return -1;
}
StringBuffer url = new StringBuffer("http://"+fsName+"/fsck?path=");
String dir = "/";
// find top-level dir first
for (int idx = 0; idx < args.length; idx++) {
if (!args[idx].startsWith("-")) { dir = args[idx]; break; }
}
url.append(URLEncoder.encode(dir, "UTF-8"));
for (int idx = 0; idx < args.length; idx++) {
if (args[idx].equals("-move")) { url.append("&move=1"); }
else if (args[idx].equals("-delete")) { url.append("&delete=1"); }
else if (args[idx].equals("-files")) { url.append("&files=1"); }
else if (args[idx].equals("-blocks")) { url.append("&blocks=1"); }
else if (args[idx].equals("-locations")) { url.append("&locations=1"); }
}
URL path = new URL(url.toString());
URLConnection connection = path.openConnection();
InputStream stream = connection.getInputStream();
InputStreamReader input =
new InputStreamReader(stream, "UTF-8");
try {
int c = input.read();
while (c != -1) {
System.out.print((char) c);
c = input.read();
}
} finally {
input.close();
}
return 0;
}
public static void main(String[] args) throws Exception {
int res = new DFSck().doMain(new Configuration(), args);
System.exit(res);
}
}