**呼叫MapReduce對檔案中各個單詞出現的次數進行統計**
把本地檔案系統的“/home/hadoop/ljk.txt”上傳到HDFS中的當前使用者目錄的input目錄下,也就是上傳到HDFS的“/user/hadoop/input/”目錄下:
-
./bin/hdfs dfs -put /home/hadoop/ljk.txt input
可以使用ls命令檢視一下檔案是否成功上傳到HDFS中,具體如下:
-
./bin/hdfs dfs –ls input
首先,啟動Eclipse
直接採用預設的設定“/home/hadoop/workspace”,工作空間目錄位於hadoop使用者目錄“/home/hadoop”下。
Eclipse啟動以後,呈現的介面如下圖所示。
建立一個Java工程。
在“Project name”後面輸入工程名稱“WordCount”,選中“Use default location”,讓這個Java工程的所有檔案都儲存在“/home/hadoop/workspace/WordCount”目錄下。
進入下一步
需要在這個介面中載入該Java工程所需要用到的JAR包,這些JAR包中包含了與Hadoop相關的Java API。這些JAR包都位於Linux系統的Hadoop安裝目錄下,就是在“/usr/local/hadoop/share/hadoop”目錄下。點選介面中的“Libraries”選項卡,然後,點選介面右側的“Add External JARs…”按鈕,彈出如下圖所示介面。
為了編寫一個MapReduce程式,一般需要向Java工程中新增以下JAR包:
(1)“/usr/local/hadoop/share/hadoop/common”目錄下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目錄下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/mapreduce”目錄下的所有JAR包,但是,不包括lib、lib-examples和sources目錄,具體如下圖所示。
(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目錄下的所有JAR包。
比如,如果要把“/usr/local/hadoop/share/hadoop/common”目錄下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar新增到當前的Java工程中,可以在介面中點選相應的目錄按鈕,進入到common目錄,然後,介面會顯示出common目錄下的所有內容(如下圖所示)。
最後把所需的jar匯入,按下finish
找到開始建立好的工程名稱“WordCount”,然後在該工程名稱上點選滑鼠右鍵,在彈出的選單中選擇“New–>Class”選單。
在該檔案中輸入完整的詞頻統計程式程式碼:
-
import java.io.IOException;
-
import java.util.Iterator;
-
import java.util.StringTokenizer;
-
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 org.apache.hadoop.util.GenericOptionsParser;
-
public class WordCount {
-
public WordCount() {
-
}
-
public static void main(String[] args) throws Exception {
-
Configuration conf = new Configuration();
-
String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();
-
if(otherArgs.length < 2) {
-
System.err.println("Usage: wordcount <in> [<in>...] <out>");
-
System.exit(2);
-
}
-
Job job = Job.getInstance(conf, "word count");
-
job.setJarByClass(WordCount.class);
-
job.setMapperClass(WordCount.TokenizerMapper.class);
-
job.setCombinerClass(WordCount.IntSumReducer.class);
-
job.setReducerClass(WordCount.IntSumReducer.class);
-
job.setOutputKeyClass(Text.class);
-
job.setOutputValueClass(IntWritable.class);
-
for(int i = 0; i < otherArgs.length - 1; ++i) {
-
FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
-
}
-
FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));
-
System.exit(job.waitForCompletion(true)?0:1);
-
}
-
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
-
private static final IntWritable one = new IntWritable(1);
-
private Text word = new Text();
-
public TokenizerMapper() {
-
}
-
public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
-
StringTokenizer itr = new StringTokenizer(value.toString());
-
while(itr.hasMoreTokens()) {
-
this.word.set(itr.nextToken());
-
context.write(this.word, one);
-
}
-
}
-
}
-
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
-
private IntWritable result = new IntWritable();
-
public IntSumReducer() {
-
}
-
public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
-
int sum = 0;
-
IntWritable val;
-
for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
-
val = (IntWritable)i$.next();
-
}
-
this.result.set(sum);
-
context.write(key, this.result);
-
}
-
}
-
}
在彈出的選單中選擇“Run as”,繼續在彈出來的選單中選擇“Java Application”。
然後,會彈出如下圖所示介面。
點選介面右下角的“OK”按鈕,開始執行程式。程式執行結束後,會在底部的“Console”皮膚中顯示執行結果資訊。
下面就可以把Java應用程式打包生成JAR包,部署到Hadoop平臺上執行。現在可以把詞頻統計程式放在“/usr/local/hadoop/myapp”目錄下。如果該目錄不存在,可以使用如下命令建立:
首先,請在Eclipse工作介面左側的“Package Explorer”皮膚中,在工程名稱“WordCount”上點選滑鼠右鍵,在彈出的選單中選擇“Export”,如下圖所示。
然後,會彈出如下圖所示介面。
在該介面中,選擇“Runnable JAR file”,然後,點選“Next>”按鈕,彈出如下圖所示介面。
點選finish後全點ok
可以看到,“/usr/local/hadoop/myapp”目錄下已經存在一個WordCount.jar檔案。
在執行程式之前,需要啟動Hadoop,命令如下:
在啟動Hadoop之後,需要首先刪除HDFS中與當前Linux使用者hadoop對應的input和output目錄(即HDFS中的“/user/hadoop/input”和“/user/hadoop/output”目錄),這樣確保後面程式執行不會出現問題,具體命令如下:
然後,再在HDFS中新建與當前Linux使用者hadoop對應的input目錄,即“/user/hadoop/input”目錄,具體命令如下:
然後把ljk.txt,上傳到HDFS中的“/user/hadoop/input”目錄下,命令如下:
如果HDFS中已經存在目錄“/user/hadoop/output”,則使用如下命令刪除該目錄(因為我沒建立過output所以不需要刪除,此處為資料密令):
-
cd /usr/local/hadoop
-
./bin/hdfs dfs -rm -r /user/hadoop/output
現在,就可以在Linux系統中,使用hadoop jar命令執行程式,命令如下:
上面命令執行以後,當執行順利結束時,螢幕上會顯示類似如下的資訊:
詞頻統計結果已經被寫入了HDFS的“/user/hadoop/output”目錄中,可以執行如下命令檢視詞頻統計結果:
上面命令執行後,會在螢幕上顯示如下詞頻統計結果:
把統計結果下載儲存到output資料夾
感謝您能看到這裡,日後也會更新更多這方面的知識;博主也會更深入去學習,日後能更好地和大家進行交流哦!
相關文章
- 在Linux中呼叫MapReduce對檔案中各個單詞出現次數進行統計Linux
- 呼叫MapReduce對檔案中單詞出現次數進行統計
- 統計檔案中出現的單詞次數
- matlab之對元素出現的次數進行統計Matlab
- 【轉】matlab之對元素出現的次數進行統計Matlab
- 利用HashMap統計字串各個字元出現的次數HashMap字串字元
- 統計陣列中各數字(元素)出現的次數陣列
- Matlab 統計陣列中各數字(元素)出現的次數Matlab陣列
- centos下對檔案某些特定字串分組統計出現次數CentOS字串
- samtools flagstat引數對比對的bam檔案進行統計
- matlab如何統計矩陣各元素的出現次數Matlab矩陣
- Linux下如何對目錄中的檔案進行統計Linux
- 統計陣列元素中每個元素出現的次數陣列
- 詞頻統計mapreduce
- js常見演算法(一):陣列去重,打亂陣列,統計陣列各個元素出現的次數, 字串各個字元的出現次數,獲取地址連結的各個引數JS演算法陣列字串字元
- 在linux系統中對檔案進行分割Linux
- JavaScript統計字元出現的次數JavaScript字元
- 統計字串出現的次數(C)字串
- 統計英文名著中單詞出現頻率
- Git統計檔案的行數Git
- 瓦爾登湖各單詞出現頻次,並按排次由高到低排序排序
- 利用python內建函式,快速統計單詞在文字中出現的次數Python函式
- 讀取檔案,每行不超過100個字元,輸出每行中字母最多的單詞的字母數字元
- python 統計字串裡某個字元出現的次數count()Python字串字元
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- matlab——統計相同元素出現的次數Matlab
- linux統計檔案個數及程式碼總行數Linux
- Java小程式--統計指定字串中字元 ‘a’ 出現的次數Java字串字元
- LVM中對基於xfs的檔案系統進行擴容LVM
- hadoop archive合併小檔案並進行mapreduce來減少map的數量HadoopHive
- ELF檔案中的各個節區
- java 統計大文字檔案的行數Java
- C++ 統計單詞數C++
- python統計英文文字中的迴文單詞數Python
- MATLAB自帶的函式tabulate統計一個陣列中各數字(元素)出現的頻數、頻率Matlab函式陣列
- hadoop學習筆記:執行wordcount對檔案字串進行統計案例Hadoop筆記字串
- 統計陣列個元素出現的個數陣列
- 找出文字中每個字母出現的次數