hadoop java操作hdfs


hfdsはhadoopが処理するデータを格納するファイルシステムである.大規模な分散データ処理に適しており、拡張可能な行のファイル分散システムである.
メリット
1、ノードダウンタイムが発生した場合、hdfs、継続的な監視、エラーチェック、フォールトトレランス処理、ドキュメントリカバリ
2、ストレージファイルが巨大で、hdfsはファイルをブロック処理し、ブロック毎のサイズを規定する(デフォルト64 M)
HDfs共通コマンド
コマンドフォーマット:hadoop fs-cmd
1、ディレクトリの追加
    hadoop fs -mkdir args
2、ファイルの追加
    hadoop fs -put localfile hdfsfileurl
備考:putコマンド、hdfsファイルシステムにファイルを入れ、ローカルファイルが消えます
3、書類を取り出す
    hadoop fs -get locaUrl hdfsurl
メモ:get、hdfsのファイルをローカルに取り戻します.しかしhdfsのファイルはまだ存在し、copyに相当する.
4、ファイルの表示
    hadoop fs -cat url
備考:hadoop fs-cat url|moreはページ別に表示できます
5、ファイルの削除
    hadoop fs -rm url
6、ログ方式の表示
    hadoop fs -tail url
JAvaプログラム制御hdfs
Hadoopでファイル操作として使用する主クラスはorgにある.apache.hadoop.fsパッケージにあります.一般的なopen、read、write、closeが含まれています.HadoopファイルのAPIの起点はFileSystemクラスであり、これはファイルシステムとインタラクティブな抽象クラスであり、factoryを呼び出す方法でFileSystemである.get(Configuration conf)は、HDFSインタフェースのFileSystemオブジェクトを次のように取得するために必要なFileSystemインスタンスを取得します.
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);//HDFSのFileSystemオブジェクトを取得
HDFSとローカルファイルシステムのインタラクションを実現するには、ローカルファイルシステムのFileSystemオブジェクトを取得する必要があります.
FileSystem local = FileSystem.getLocal(conf);//ローカルファイルシステムのFileSystemオブジェクトを取得
/**
 * 
 */
package org.jrs.wlh;

import java.io.IOException;

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

/**
 * @PutMeger.java
 * created at 2013-8-7   12:04:08 by jrs521wlh
 * java  hdfs   hdfs     
 * @author jrs521wlh [email protected]
 * @version $Revision$</br>
 * update: $Date$
 */
public class PutMeger {
	
	public static void main(String[] args) throws IOException {
		
		String[] str = new String[]{"E:\\hadoop\\UploadFileClient.java","hdfs://master:9000/user/hadoop/inccnt.java"};
		Configuration conf = new Configuration();
		FileSystem fileS= FileSystem.get(conf);
		FileSystem localFile = FileSystem.getLocal(conf);  //       FileSystem  
		
		Path input = new Path(str[0]); //          
		Path out = new Path(str[1]);  //   hdfs    
		
		try{
			FileStatus[] inputFile = localFile.listStatus(input);  //listStatus             
			FSDataOutputStream outStream = fileS.create(out);      //         
			for (int i = 0; i < inputFile.length; i++) {
				System.out.println(inputFile[i].getPath().getName());
				FSDataInputStream in = localFile.open(inputFile[i].getPath());
				
				byte buffer[] = new byte[1024];
				int bytesRead = 0;
				while((bytesRead = in.read(buffer))>0){  //        
					System.out.println(buffer);
					outStream.write(buffer,0,bytesRead);
				}
				
				in.close();
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}