大数据学习——MapReduce学习——字符统计WordCount
操作背景
jdk的版本為1.8以上
ubuntu12
hadoop2.5偽分布
安裝 Hadoop-Eclipse-Plugin
要在 Eclipse 上編譯和運(yùn)行 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 版本)復(fù)制到 Eclipse 安裝目錄的 plugins 文件夾中,運(yùn)行?
eclipse -clean?重啟 Eclipse 即可(添加插件后只需要運(yùn)行一次該命令,以后按照正常方式啟動(dòng)就行了)。
配置 Hadoop-Eclipse-Plugin
在繼續(xù)配置前請(qǐng)確保已經(jīng)開(kāi)啟了 Hadoop
?
1. 按照如下流程進(jìn)入Hadoop Map/Reduce界面
Window--》Preference--》Hadoop Map/Reduce
點(diǎn)擊右側(cè)的Browse...選擇Hadoop的安裝路徑,然后點(diǎn)擊ok即可
2.按照如下操作到切換 Map/Reduce 開(kāi)發(fā)視圖
Window--》Open Perspective--》Other
彈出一個(gè)窗口選擇Map/Reduce即可
3.建立與 Hadoop 集群的連接
點(diǎn)擊 Eclipse軟件右下角的 Map/Reduce Locations 面板,在面板中單擊右鍵,選擇 New Hadoop Location
在彈出的General選項(xiàng)面板里
設(shè)置兩處
1.Location Name隨便寫(xiě)就是連接名
2.DFS Master的Port與fs.defaultFS(設(shè)置為hdfs://localhost:9000)的端口號(hào)相同為9000?
設(shè)置完成以后配置好后,點(diǎn)擊左側(cè) Project Explorer 中的 MapReduce Location (點(diǎn)擊三角形展開(kāi))就能直接查看 HDFS 中的文件列表了,雙擊可以查看內(nèi)容,右鍵點(diǎn)擊可以上傳、下載、刪除?
在 Eclipse 中創(chuàng)建 MapReduce 項(xiàng)目
?
用剛剛創(chuàng)建的Map/Reduce視圖新建目錄mymapreduce1/in,在此目錄下上傳文件文件名為buyer_favorite1,
這個(gè)文件的目錄和名字可以自行修改,但要注意修改代碼中的Path in的路徑和文價(jià)名
此文件為某電商網(wǎng)站用戶對(duì)商品的收藏?cái)?shù)據(jù),記錄了用戶收藏的商品id以及收藏日期
buyer_favorite1包含:買家id,商品id,收藏日期這三個(gè)字段
內(nèi)容如下
買家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點(diǎn)擊File--》New--》Other找到Map/Reduce Project點(diǎn)擊創(chuàng)建即可。
然后將以下代碼放到項(xiàng)目中
代碼是是統(tǒng)計(jì)每個(gè)買家收藏商品數(shù)量
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);//這個(gè)路徑是存放用戶收藏商品的信息Path in = new Path("hdfs://localhost:9000/mymapreduce1/in/buyer_favorite1");//這個(gè)路徑也可自行設(shè)置,但是路徑必須不存在Path out = new Path("hdfs://localhost:9000/mymapreduce1/out");FileInputFormat.addInputPath(job, in);FileOutputFormat.setOutputPath(job, out);System.exit(job.waitForCompletion(true) ? 0 : 1);}/*** * 第一個(gè)Object表示輸入key的類型;第二個(gè)Text表示輸入value的類型;*第三個(gè)Text表示表示輸出鍵的類型;第四個(gè)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工具包中的一個(gè)類,用于將字符串進(jìn)行拆分 //StringTokenizer構(gòu)造函數(shù)的第二個(gè)參數(shù)是分割符,確認(rèn)文件中的分割符是三個(gè)空格或者一個(gè)tabStringTokenizer tokenizer = new StringTokenizer(value.toString()," ");word.set(tokenizer.nextToken());context.write(word, one);}}//參數(shù)同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文件
結(jié)果如下
參考資料
http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/?tdsourcetag=s_pcqq_aiomsg
轉(zhuǎn)載于:https://www.cnblogs.com/wei-jing/p/9971690.html
總結(jié)
以上是生活随笔為你收集整理的大数据学习——MapReduce学习——字符统计WordCount的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 导航栏下拉菜单效果代码
- 下一篇: CSS导航条菜单:带小三角形