通过Java执行HDFS命令

通过Java执行HDFS命令,java,hadoop,command-line,hdfs,Java,Hadoop,Command Line,Hdfs,因此,我必须通过Java运行HDFS命令,如HDFS dfs–ls/some_folder,但我不知道如何操作,而且在线解释非常混乱 有人能给我一个简单的解释和一些我可以使用的实际代码吗?Hadoop实际上支持通过它的文件系统类读取HDFS目录和文件,而给定的目录实际上可以递归地读取其内容 例如,在我的系统中,我有一个名为wc\u out的目录,其中包含以下内容(这是两个名为\u SUCCESS和part-r-00000)的文件,我们可以通过命令行看到: 我使用文件系统类来确定作为参数传递给以

因此,我必须通过Java运行HDFS命令,如
HDFS dfs–ls/some_folder
,但我不知道如何操作,而且在线解释非常混乱


有人能给我一个简单的解释和一些我可以使用的实际代码吗?

Hadoop实际上支持通过它的
文件系统
类读取HDFS目录和文件,而给定的目录实际上可以递归地读取其内容

例如,在我的系统中,我有一个名为
wc\u out
的目录,其中包含以下内容(这是两个名为
\u SUCCESS
part-r-00000
)的文件,我们可以通过命令行看到:

我使用
文件系统
类来确定作为参数传递给以下程序的目录,并使用
LocatedFileStatus
类来检索每个文件信息的特定字段(例如文件路径,如果它是否为目录,它的大小、长度和权限)(您可以通过API文档查看可以检索的内容):

import org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.util.GenericOptionsParser;
导入org.apache.hadoop.fs.FileSystem;
导入org.apache.hadoop.fs.FileStatus;
导入org.apache.hadoop.fs.LocatedFileStatus;
导入org.apache.hadoop.fs.RemoteIterator;
导入org.apache.hadoop.fs.FSDataOutputStream;
导入org.apache.hadoop.mapreduce.lib.input.FileSplit;
导入java.io.*;
导入java.io.IOException;
导入java.util.*;
导入java.nio.charset.StandardCharset;
公共类目录
{
公共静态void main(字符串[]args)引发异常
{
路径输入_dir=新路径(args[0]);
Configuration conf=新配置();
FileSystem fs=FileSystem.get(conf);
如果(fs.存在(输入目录))
{
RemoteIterator file_list=fs.listFiles(input_dir,true);
System.out.println(“+args[0]+”目录的内容:”);
System.out.println(“===========================================================================================\n”);
while(文件\u list.hasNext())
{
LocatedFileStatus文件=文件\列表.next();
System.out.println(file.getPath()+“|”+file.isDirectory()+“|”+file.getLen()+“|”+file.getPermission()+“\n”);
}   
System.out.println(“=========================================================================”);
}
其他的
System.out.println(“名为\”“+args[0]+“\”的目录不存在”);
}
}
因此,我们可以检查程序的输出是否正确,以及(信息方面)是否与通过
hadoop fs-ls dir_name
命令获得的命令行信息相同:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.*;
import java.io.IOException;
import java.util.*;
import java.nio.charset.StandardCharsets;

public class Dir_ls
{
    public static void main(String[] args) throws Exception 
    {
        Path input_dir = new Path(args[0]);

        Configuration conf = new Configuration();

        FileSystem fs = FileSystem.get(conf);

        if(fs.exists(input_dir))
        {
            RemoteIterator<LocatedFileStatus> file_list = fs.listFiles(input_dir, true);

            System.out.println("\nContents of the " + args[0] + " directory:");
            System.out.println("==========================================\n");

            while(file_list.hasNext())
            {
                LocatedFileStatus file = file_list.next();

                System.out.println(file.getPath() + " | " + file.isDirectory() +  " | " + file.getLen() + " | " + file.getPermission() + "\n");
            }   

            System.out.println("==========================================");
        }
        else
            System.out.println("Directory named \"" + args[0] + "\" doesn't exist.");
    }
}