今天完成的是虛擬機器mapduirce完成單詞統計
好的,下面是使用Java在Hadoop上執行一個完整的WordCount MapReduce作業的詳細步驟,包括準備環境、編寫程式碼、編譯、執行和檢視輸出結果。
好的,下面是使用Java在Hadoop上執行一個完整的WordCount MapReduce作業的詳細步驟,包括準備環境、編寫程式碼、編譯、執行和檢視輸出結果。 ### 步驟 1: 環境準備 1. **安裝Hadoop**:確保Hadoop已經安裝並配置好,包括環境變數設定。 2. **安裝Java**:確保Java JDK已經安裝,並設定好JAVA_HOME環境變數。 3. **配置HDFS**:啟動Hadoop叢集並確認HDFS正常執行。可以使用以下命令啟動Hadoop叢集: ```bash start-dfs.sh start-yarn.sh ``` ### 步驟 2: 建立輸入檔案 1. 在HDFS上建立輸入目錄: ```bash hdfs dfs -mkdir -p /user/lty/homework/input ``` 2. 建立一個文字檔案並上傳到HDFS(例如,建立一個名為`input.txt`的檔案): ```bash echo -e "Hello Hadoop\nHello World" > input.txt hdfs dfs -put input.txt /user/lty/homework/input/ ``` ### 步驟 3: 編寫WordCount程式 1. 建立一個Java檔案,命名為 `WordCount.java`,內容如下: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import java.io.IOException; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { String[] words = value.toString().split("\\s+"); for (String w : words) { word.set(w); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` ### 步驟 4: 編譯Java程式 1. 在命令列中,進入到存放 `WordCount.java` 檔案的目錄。 2. 使用以下命令編譯Java程式: ```bash javac -classpath `hadoop classpath` -d . WordCount.java jar -cvf wordcount.jar -C . . ``` ### 步驟 5: 執行Hadoop作業 使用以下命令在Hadoop叢集上執行WordCount作業: ```bash hadoop jar wordcount.jar WordCount /user/lty/homework/input /user/lty/homework/output ``` ### 步驟 6: 檢視輸出結果 1. 檢視輸出目錄中的結果: ```bash hdfs dfs -ls /user/lty/homework/output ``` 2. 讀取輸出檔案內容: ```bash hdfs dfs -cat /user/lty/homework/output/part-r-00000 ``` ### 步驟 7: 清理輸出(可選) 如果需要重新執行作業,可以先刪除輸出目錄: ```bash hdfs dfs -rm -r /user/lty/homework/output ``` ### 總結 以上步驟詳細描述瞭如何使用Java在Hadoop上編寫、編譯、執行一個簡單的WordCount MapReduce作業。如果在任何步驟中遇到問題,請隨時告訴我,我會幫助你解決!
但是會遇到以下問題:hdfs dfs -ls /user/lty/homework/output輸入命令後沒有任何輸出
這個時候就需要用
hdfs dfs -cat /user/hadoop/homework/output/*命令來輸出。