呼叫MapReduce對檔案中單詞出現次數進行統計
呼叫MapReduce對檔案中各個單詞出現次數進行統計
一、Ubuntu安裝
1.開啟VirtualBox,點選“建立”按鈕,建立一個虛擬機器
2.選擇記憶體大小
3.建立虛擬硬碟
4.選擇虛擬硬碟檔案型別VDI
5.虛擬硬碟選擇動態分配
6.選擇檔案儲存的位置和容量大小
7.下載的Ubuntu LTS 14.04的ISO映像檔案,進入設定介面後,點選儲存中的沒有碟片,再點選光碟按鈕,選擇一個虛擬光碟機,新增下載的Ubuntu LTS 14.04 ISO映像檔案
8.選擇建立的虛擬機器Ubuntu,點選“啟動”按鈕
9.選擇剛才的ISO檔案
10.啟動看到Ubuntu的安裝歡迎介面。選擇安裝ubuntu Kylin
11.選擇繼續
12.安裝型別選擇其他選項
13.點選新建分割槽表,新增swap和ect4型別分割槽
14.選擇相應時區和鍵盤佈局
15.建立使用者名稱和密碼
16.安裝完成,重啟
二、準備工作
1.建立hadoop使用者
1.程式碼如下
$ sudo useradd -m hadoop -s /bin/bash
2.設定密碼,新增管理員許可權。
$ sudo passwd hadoop
$ sudo adduser hadoop sudo
3.更新apt
$ sudo apt-get update
4.安裝配置檔案VIM。
$ sudo apt-get install vim
5.安裝SSH、配置SSH無密碼登陸。
$ sudo apt-get install openssh-server
6.安裝JAVA環境
下載檔案jdk-8u162-linux-x64.tar.gz 使用Filezilla傳輸到“/home/linziyu/Downloads/”目錄下。
$ cd /usr/lib
$ sudo mkdir jvm #建立/usr/lib/jvm目錄用來存放JDK檔案
$ cd ~ #進入hadoop使用者的主目錄
$ cd Downloads
$ sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #解壓
7.設定環境變數
$ cd ~
$ vim ~/.bashrc
上面命令使用vim編輯器(檢視vim編輯器使用方法)開啟了hadoop這個使用者的環境變數配置檔案,請在這個檔案的開頭位置,新增如下幾行內容:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201215223800862.png?x-oss-
儲存.bashrc檔案並退出vim編輯器。然後,繼續執行如下命令讓.bashrc檔案的配置立即生效:
$ source ~/.bashrc
2.安裝 Hadoop3.1.3
下載檔案hadoop-3.1.3.tar.gz 使用Filezilla傳輸到“/usr/local/”目錄下。
$ sudo tar -zxf ~/下載/hadoop-3.1.3.tar.gz -C /usr/local # 解壓
$ cd /usr/local/
$ sudo mv ./hadoop-3.1.3/ ./hadoop # 將資料夾名改為hadoop
$ sudo chown -R hadoop ./hadoop
3.Hadoop偽分散式配置
1.Hadoop 的配置檔案位於 /usr/local/hadoop/etc/hadoop/ 中,偽分散式需要修改2個配置檔案 core-site.xml 和 hdfs-site.xml 。
修改配置檔案 core-site.xml ,將當中的
修改為下面配置:
同樣的,修改配置檔案 hdfs-site.xml:
2.執行 NameNode 的格式化:
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format
3.開啟 NameNode 和 DataNode 守護程式。
$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh
`
三、 呼叫MapReduce執行WordCount對單詞進行計數
1.將待分析的檔案上傳到HDFS
1.使用Firezilla將2002.txt檔案傳到hadoop中
檔案已傳進/home/hadoop資料夾下。
啟動hadoop,將2002.txt上傳至HDFS。
2.安裝eclipse
在ubuntu軟體中心中下載安裝:
下載後執行如下命令,將 Eclipse 安裝至 /usr/lib 目錄中:
sudo tar -zxf ~/下載/eclipse-java-mars-1-linux-gtk*.tar.gz -C/usr/lib
3.在 Eclipse 中建立 MapReduce 專案
1.在Eclipse中建立專案。
2.選擇“File–>New–>Java Project”選單,開始建立一個Java工程,彈出如下圖所示介面。
在“Project name”後面輸入工程名稱“WordCount”,選中“Use default location”,讓這個Java工程的所有檔案都儲存到“/home/hadoop/workspace/WordCount”目錄下。在“JRE”這個選項卡中,選擇jdk1.8.0_162。然後,點選介面底部的“Next>”按鈕,進入下一步的設定。
3.為專案新增需要用到的JAR包。
4.點選介面右側的“Add External JARs…”按鈕,彈出如下圖所示介面。
(1)“/usr/local/hadoop/share/hadoop/common”目錄下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目錄下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/mapreduce”目錄下的所有JAR包,但是,不包括jdiff、lib、lib-examples和sources目錄。
(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目錄下的所有JAR包。
5.在Eclipse工作介面左側的“Package Explorer”皮膚中(如下圖所示),找到剛才建立好的工程名稱“WordCount”,然後在該工程名稱上點選滑鼠右鍵,在彈出的選單中選擇“New–>Class”選單。
6.選擇“New–>Class”選單以後會出現如下圖所示介面。
在該介面中,只需要在“Name”後面輸入新建的Java類檔案的名稱,這裡採用名稱“WordCount”,其他都可以採用預設設定,然後,點選介面右下角“Finish”按鈕。
4.執行MapReduce的 wordcount程式進行單詞統計
檔案MapReduce處理的程式碼,在exclipse上執行 wordcount程式:
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);
}
}
}
10.編譯打包程式。
11.點選介面右下角的“OK”按鈕,開始執行程式。程式執行結束後,會在底部的“Console”皮膚中顯示執行結果資訊
12.把Java應用程式打包生成JAR包,部署到Hadoop平臺上執行。現在可以把詞頻統計程式放在“/usr/local/hadoop/myapp”目錄下。
$ cd /usr/local/hadoop
$ mkdir myapp
13.在Eclipse工作介面左側的“Package Explorer”皮膚中,在工程名稱“WordCount”上點選滑鼠右鍵,在彈出的選單中選擇“Export”,
14.在該介面中,選擇“Runnable JAR file”,然後,點選“Next>”按鈕,彈出如下圖所示介面。
15.執行程式。
cd /usr/local/hadoop
./sbin/start-dfs.sh
16.把2002.txt上傳到HDFS中的“/user/hadoop/input”目錄下
$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -put ./2002.txt input
17.檢視HDFS input檔案,看是否存在2002.txt。
18.使用hadoop jar命令執行程式
$ cd /usr/local/hadoop
$ ./bin/hadoop jar ./myapp/WordCount.jar input output
19.檢視output資料夾是否有執行成功後生成的檔案以及檢視執行後生成的output/part-r-00000這個檔案。
20.將output資料夾下載至本地:
21.檢視檔案:
22.檢視part-r-00000檔案:
四、總結
通過本次實驗讓我瞭解並學習了很多東西,從ubuntu,hadoop,jdk和eclipse的安裝再到WordCount執行完成後的結果,每個步驟都讓我知道和學習了一些操作、命令和知識。在這次試驗之後我對大資料這門課有了不一樣的理解,對linux的命令記得更牢了。並且在這次實驗的操作過程中也發現了很多自己的不足之處,在今後會多加練習提高自身水平。
五、參考資料
1.http://dblab.xmu.edu.cn/blog/install-hadoop/
2. http://dblab.xmu.edu.cn/blog/285/
3. http://dblab.xmu.edu.cn/blog/290-2/
4. http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/
相關文章
- **呼叫MapReduce對檔案中各個單詞出現的次數進行統計**
- 在Linux中呼叫MapReduce對檔案中各個單詞出現次數進行統計Linux
- 統計檔案中出現的單詞次數
- matlab之對元素出現的次數進行統計Matlab
- 【轉】matlab之對元素出現的次數進行統計Matlab
- centos下對檔案某些特定字串分組統計出現次數CentOS字串
- samtools flagstat引數對比對的bam檔案進行統計
- 詞頻統計mapreduce
- Linux下如何對目錄中的檔案進行統計Linux
- 在linux系統中對檔案進行分割Linux
- 統計英文名著中單詞出現頻率
- 統計陣列中各數字(元素)出現的次數陣列
- JavaScript統計字元出現的次數JavaScript字元
- 統計字串出現的次數(C)字串
- Git統計檔案的行數Git
- Matlab 統計陣列中各數字(元素)出現的次數Matlab陣列
- C++ 統計單詞數C++
- 利用python內建函式,快速統計單詞在文字中出現的次數Python函式
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- hadoop學習筆記:執行wordcount對檔案字串進行統計案例Hadoop筆記字串
- matlab——統計相同元素出現的次數Matlab
- hadoop archive合併小檔案並進行mapreduce來減少map的數量HadoopHive
- LVM中對基於xfs的檔案系統進行擴容LVM
- 統計陣列元素中每個元素出現的次數陣列
- Java小程式--統計指定字串中字元 ‘a’ 出現的次數Java字串字元
- java 統計大文字檔案的行數Java
- python統計英文文字中的迴文單詞數Python
- PHP+Mysql統計檔案下載次數例項PHPMySql
- 在JS中統計函式執行次數JS函式
- 結對第二次—文獻摘要熱詞統計及進階需求
- 結對第二次--文獻摘要熱詞統計及進階需求
- 統計檔案數目
- linux統計檔案個數及程式碼總行數Linux
- Matlab tabulate統計數字出現的次數,如果陣列中出現0Matlab陣列
- 用Python如何統計文字檔案中的詞頻?(Python練習)Python
- python pandas超簡單 對單列值進行計數 value_countsPython
- matlab如何統計矩陣各元素的出現次數Matlab矩陣
- 利用HashMap統計字串各個字元出現的次數HashMap字串字元