前に書く
この記事では、HDFSの小さなインスタンスを使用して、Hadoop 2.7.7分散クラスター環境にファイルが存在するかどうかを判断し、コマンドラインを使用してHDFSプログラムをHadoop 2.xバージョンでコンパイルおよびパッケージ化する方法を紹介します。
Hadoop classhpath情報をCLASSPATH変数に追加します
Hadoop 2.xバージョンでは、jarは1つのhadoop-core * .jarに集中しなくなりましたが、複数のjarに分割されています。たとえば、Hadoop 2.7.7を使用してWordCountインスタンスを実行するには、少なくとも次の3つのjarが必要です。
- $ HADOOP_HOME / share / hadoop / common / hadoop-common-2.7.7.jar
- $ HADOOP_HOME / share / hadoop / mapreduce / hadoop-mapreduce-client-core-2.7.7.jar
- $ HADOOP_HOME / share / hadoop / common / lib / commons-cli-1.2.jar
実際には、コマンドによって、hadoop classpath
我々は、Hadoopのプログラムを実行するために必要なすべてのクラスパス情報を取得することができます。
Hadoop classhpath情報をCLASSPATH変数に追加し、次の行を〜/ .bashrcに追加します。
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
実行することを忘れないでくださいsource ~/.bashrc
有効にするには、変数を。
HDFSプログラムのコンパイル、パッケージ化、実行
HDFSプログラムを作成します。ここに、指定したファイルが存在するかどうかを判別するための小さな栗があります。
vi FileExist.java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileExist {
public static void main(String[] args){
try{
String fileName = "test";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://Master:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(fileName))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
javac
FileExist.javaをコンパイルするコマンド
javac FileExist.java
コンパイル後、.classファイルが生成されていることがわかります
次に、.classファイルをjarにパッケージ化して、Hadoopで実行します
jar -cvf FileExist.jar ./FileExist*.class
パッケージ化後、FileExist.jarパッケージが生成されていることがわかります
次に、jarパッケージを実行できます
hadoop jar FileExist.jar FileExist
FileExist.jarは、実行するjarパッケージです。FileExistは、jarパッケージのメインメソッドが配置されているクラスです。
運用実績
もちろん、あなたはまた、HDFS特定の参照と同様のプログラムを実行するためにコンパイラパッケージで、MapReduceのプログラムを実行するコマンドラインコンパイラパッケージを使用することができ、ここに書くためにHDFSの小さなサンプルプログラムを実行するコマンドラインコンパイラパッケージを使用してコマンドラインコンパイラパッケージ独自のMapReduceプログラムを使用して実行します