2017-11-07 8 views
-1

コマンドプロンプトで次のコマンドを実行すると、JavaのHDFSディレクトリの行数をカウントする方法はありますか?Hdfsファイルの行数

hadoop fs -cat /abc/def/* | wc -l 

特にmap-reduceまたはsparkコードを書く代わりにHADOOP APIを使用します。このような

答えて

2

何か作業をする必要があります: -

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FSDataInputStream; 
import org.apache.hadoop.fs.FileStatus; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 

public class LineCounter { 

    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 

     Configuration conf = new Configuration(); 
     conf.addResource(new FileInputStream("hdfs-site.xml")); 
     conf.addResource(new FileInputStream("core-site.xml")); 

     conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); 
     conf.set("fs.file.impl",org.apache.hadoop.fs.LocalFileSystem.class.getName()); 

     FileSystem fs = FileSystem.get(conf); 
     Path pt = new Path("/some/path"); 

     FileStatus[] status = fs.listStatus(pt); 

     int count = 0; 

     for(FileStatus f : status){ 
      if(f.isFile()){ 
       FSDataInputStream inputStream = fs.open(f.getPath()); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 

       String line = reader.readLine(); 

       while(line!=null){ 
        count++; 
        line = reader.readLine(); 
       } 

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

    } 

} 
関連する問題