大数据学习——MapReduce学习——字符统计WordCount
操作背景
jdk的版本為1.8以上
ubuntu12
hadoop2.5偽分布
安裝 Hadoop-Eclipse-Plugin
要在 Eclipse 上編譯和運行 MapReduce 程序,需要安裝 hadoop-eclipse-plugin,可下載 Github 上的?hadoop2x-eclipse-plugin(備用下載地址:http://pan.baidu.com/s/1i4ikIoP)。
下載后,將 release 中的 hadoop-eclipse-kepler-plugin-2.6.0.jar (還提供了 2.2.0 和 2.4.1 版本)復制到 Eclipse 安裝目錄的 plugins 文件夾中,運行?
eclipse -clean?重啟 Eclipse 即可(添加插件后只需要運行一次該命令,以后按照正常方式啟動就行了)。
配置 Hadoop-Eclipse-Plugin
在繼續配置前請確保已經開啟了 Hadoop
?
1. 按照如下流程進入Hadoop Map/Reduce界面
Window--》Preference--》Hadoop Map/Reduce
點擊右側的Browse...選擇Hadoop的安裝路徑,然后點擊ok即可
2.按照如下操作到切換 Map/Reduce 開發視圖
Window--》Open Perspective--》Other
彈出一個窗口選擇Map/Reduce即可
3.建立與 Hadoop 集群的連接
點擊 Eclipse軟件右下角的 Map/Reduce Locations 面板,在面板中單擊右鍵,選擇 New Hadoop Location
在彈出的General選項面板里
設置兩處
1.Location Name隨便寫就是連接名
2.DFS Master的Port與fs.defaultFS(設置為hdfs://localhost:9000)的端口號相同為9000?
設置完成以后配置好后,點擊左側 Project Explorer 中的 MapReduce Location (點擊三角形展開)就能直接查看 HDFS 中的文件列表了,雙擊可以查看內容,右鍵點擊可以上傳、下載、刪除?
在 Eclipse 中創建 MapReduce 項目
?
用剛剛創建的Map/Reduce視圖新建目錄mymapreduce1/in,在此目錄下上傳文件文件名為buyer_favorite1,
這個文件的目錄和名字可以自行修改,但要注意修改代碼中的Path in的路徑和文價名
此文件為某電商網站用戶對商品的收藏數據,記錄了用戶收藏的商品id以及收藏日期
buyer_favorite1包含:買家id,商品id,收藏日期這三個字段
內容如下
買家id 商家id 收藏日期 10181 1000481 2010-04-04 16:54:31 20001 1001597 2010-04-07 15:07:52 20001 1001560 2010-04-07 15:08:27 20042 1001368 2010-04-08 08:20:30 20067 1002061 2010-04-08 16:45:33 20056 1003289 2010-04-12 10:50:55 20056 1003290 2010-04-12 11:57:35 20056 1003292 2010-04-12 12:05:29 20054 1002420 2010-04-14 15:24:12 20055 1001679 2010-04-14 19:46:04 20054 1010675 2010-04-14 15:23:53 20054 1002429 2010-04-14 17:52:45 20076 1002427 2010-04-14 19:35:39 20054 1003326 2010-04-20 12:54:44 20056 1002420 2010-04-15 11:24:49 20064 1002422 2010-04-15 11:35:54 20056 1003066 2010-04-15 11:43:01 20056 1003055 2010-04-15 11:43:06 20056 1010183 2010-04-15 11:45:24 20056 1002422 2010-04-15 11:45:49 20056 1003100 2010-04-15 11:45:54 20056 1003094 2010-04-15 11:45:57 20056 1003064 2010-04-15 11:46:04 20056 1010178 2010-04-15 16:15:20 20076 1003101 2010-04-15 16:37:27 20076 1003103 2010-04-15 16:37:05 20076 1003100 2010-04-15 16:37:18點擊File--》New--》Other找到Map/Reduce Project點擊創建即可。
然后將以下代碼放到項目中
代碼是是統計每個買家收藏商品數量
import java.io.IOException; import java.util.StringTokenizer; 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;public class WordCount {public static void main(String[] args) throws IOException,ClassNotFoundException, InterruptedException {Job job = Job.getInstance();job.setJobName("WordCount");job.setJarByClass(WordCount.class);job.setMapperClass(doMapper.class);job.setReducerClass(doReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//這個路徑是存放用戶收藏商品的信息Path in = new Path("hdfs://localhost:9000/mymapreduce1/in/buyer_favorite1");//這個路徑也可自行設置,但是路徑必須不存在Path out = new Path("hdfs://localhost:9000/mymapreduce1/out");FileInputFormat.addInputPath(job, in);FileOutputFormat.setOutputPath(job, out);System.exit(job.waitForCompletion(true) ? 0 : 1);}/*** * 第一個Object表示輸入key的類型;第二個Text表示輸入value的類型;*第三個Text表示表示輸出鍵的類型;第四個IntWritable表示輸出值的類型*/public static class doMapper extendsMapper<Object, Text, Text, IntWritable> {public static final IntWritable one = new IntWritable(1);public static Text word = new Text();protected void map(Object key, Text value, Context context)throws IOException, InterruptedException {//StringTokenizer是Java工具包中的一個類,用于將字符串進行拆分 //StringTokenizer構造函數的第二個參數是分割符,確認文件中的分割符是三個空格或者一個tabStringTokenizer tokenizer = new StringTokenizer(value.toString()," ");word.set(tokenizer.nextToken());context.write(word, one);}}//參數同Map一樣,依次表示是輸入鍵類型,輸入值類型,輸出鍵類型,輸出值類型public static class doReducer extendsReducer<Text, IntWritable, Text, IntWritable> {private IntWritable result = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable value : values) {sum += value.get();}result.set(sum);context.write(key, result);}} }右鍵此Map/Reduce Project=>Run As=>Run on Hadoop
Map/Reduce視圖工具查看輸出目錄中的part-r-00000文件
結果如下
參考資料
http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/?tdsourcetag=s_pcqq_aiomsg
轉載于:https://www.cnblogs.com/wei-jing/p/9971690.html
總結
以上是生活随笔為你收集整理的大数据学习——MapReduce学习——字符统计WordCount的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 导航栏下拉菜单效果代码
- 下一篇: 理解 iOS 和 macOS 的内存管理