【hadoop学习】在伪分布式hadoop上手把手实践word count程序【下】

15 篇文章 0 订阅

3. 准备输入的数据文件

前段时间看svm,也参考了libsvm,其中有个分类测试数据,内容如下:

-1 5:1 7:1 14:1 19:1 39:1 40:1 51:1 63:1 67:1 73:1 74:1 76:1 78:1 83:1 
-1 3:1 6:1 17:1 22:1 36:1 41:1 53:1 64:1 67:1 73:1 74:1 76:1 80:1 83:1 
-1 5:1 6:1 17:1 21:1 35:1 40:1 53:1 63:1 71:1 73:1 74:1 76:1 80:1 83:1 
-1 2:1 6:1 18:1 19:1 39:1 40:1 52:1 61:1 71:1 72:1 74:1 76:1 80:1 95:1 
-1 3:1 6:1 18:1 29:1 39:1 40:1 51:1 61:1 67:1 72:1 74:1 76:1 80:1 83:1 
-1 4:1 6:1 16:1 26:1 35:1 45:1 49:1 64:1 71:1 72:1 74:1 76:1 78:1 101:1 
1 5:1 7:1 17:1 22:1 36:1 40:1 51:1 63:1 67:1 73:1 74:1 76:1 81:1 83:1 
1 2:1 6:1 14:1 29:1 39:1 42:1 52:1 64:1 67:1 72:1 75:1 76:1 82:1 83:1 
1 4:1 6:1 16:1 19:1 39:1 40:1 51:1 63:1 67:1 73:1 75:1 76:1 80:1 83:1 
1 3:1 6:1 18:1 20:1 37:1 40:1 51:1 63:1 71:1 73:1 74:1 76:1 82:1 83:1 

当然实际不止这十行,还有很多,我就不都列出来了。刚好,可以统计这些项在整个文件中出现的次数。

将这个文件放到hdfs上去,首先建立一个input路径,用命令

bin/hadoop fs -mkdir ./input

检查是否创建成功,用命令

bin/hadoop fs -ls

为啥总是写“bin/hadoop”?可以cd到bin目录下,不过运行hadoop命令也需要写“./hadoop ......”,一样麻烦。接下来,将这个文件放到hdfs的./input目录中,用命令

bin/hadoop fs -put /Volumes/Data/Works/TryJava/hadoopWordCount/dataTry.txt ./input

第一个是本地路径,第二个是hadoop路径。

注意:每次重新开机,都要重新启动hadoop,用bin/start_all.sh脚本。否则hadoop不会自动启动,hadoop没有启动起来,fs命令根本运行不了。


4. 在hadoop上运行hadoopWordCount程序

运行如下命令

bin/hadoop jar /Volumes/Data/Works/TryJava/hadoopWordCount/bin/helloWordCount.jar hadoopWordCount.hadoopWordCount ./input/dataTry.txt ./output

第一个参数是jar包的本地路径;第二个参数其实由helloWordCount类的main函数决定(args[1]),是输入数据的路径,是hdfs路径;第三个参数是输出结果的路径。需要注意的是,输出结果的路径必须是不存在的。否则hadoop认为这已经有了结果,会拒绝执行任务

一切顺利的话,从控制台上可以看到输出信息:

hello world for hadoop word count!
12/10/11 22:37:18 INFO input.FileInputFormat: Total input paths to process : 1
12/10/11 22:37:18 INFO mapred.JobClient: Running job: job_201210112225_0002
12/10/11 22:37:19 INFO mapred.JobClient:  map 0% reduce 0%
12/10/11 22:37:31 INFO mapred.JobClient:  map 100% reduce 0%
12/10/11 22:37:43 INFO mapred.JobClient:  map 100% reduce 100%
12/10/11 22:37:45 INFO mapred.JobClient: Job complete: job_201210112225_0002
12/10/11 22:37:45 INFO mapred.JobClient: Counters: 17
12/10/11 22:37:45 INFO mapred.JobClient:   Job Counters 
12/10/11 22:37:45 INFO mapred.JobClient:     Launched reduce tasks=1
12/10/11 22:37:45 INFO mapred.JobClient:     Launched map tasks=1
12/10/11 22:37:45 INFO mapred.JobClient:     Data-local map tasks=1
12/10/11 22:37:45 INFO mapred.JobClient:   FileSystemCounters
12/10/11 22:37:45 INFO mapred.JobClient:     FILE_BYTES_READ=9876916
12/10/11 22:37:45 INFO mapred.JobClient:     HDFS_BYTES_READ=2207611
12/10/11 22:37:45 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=14815403
12/10/11 22:37:45 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=1164
12/10/11 22:37:45 INFO mapred.JobClient:   Map-Reduce Framework
12/10/11 22:37:45 INFO mapred.JobClient:     Reduce input groups=125
12/10/11 22:37:45 INFO mapred.JobClient:     Combine output records=0
12/10/11 22:37:45 INFO mapred.JobClient:     Map input records=30956
12/10/11 22:37:45 INFO mapred.JobClient:     Reduce shuffle bytes=4938455
12/10/11 22:37:45 INFO mapred.JobClient:     Reduce output records=125
12/10/11 22:37:45 INFO mapred.JobClient:     Spilled Records=1380897
12/10/11 22:37:45 INFO mapred.JobClient:     Map output bytes=4017851
12/10/11 22:37:45 INFO mapred.JobClient:     Combine input records=0
12/10/11 22:37:45 INFO mapred.JobClient:     Map output records=460299
12/10/11 22:37:45 INFO mapred.JobClient:     Reduce input records=460299

信息的具体含义,可以查hadoop相关书籍。很多书都会做很详细的解释,我这里就不解释了。总之,运行成功!


5. 查看运行结果文件

在hdfs的“./output”目录下,有两个文件:_logs和part-r-00000(表示这是reduce任务的第0个输出)。用如下命令查看结果:

bin/hadoop fs -cat ./output/part-r-00000 | less

结果显示如下:

-1      23510
1       7446
100:1   53
101:1   79
102:1   64
103:1   613
104:1   36
105:1   23
106:1   28
107:1   67
108:1   17
109:1   26
10:1    1978
110:1   47
111:1   44
112:1   56
113:1   12
114:1   58
115:1   33
116:1   12
117:1   16
118:1   15
119:1   98
11:1    1222
120:1   19
121:1   31
122:1   20
123:1   1
12:1    14
13:1    6
14:1    6186
15:1    6189
16:1    6197
17:1    6177

呵呵,可以看到,“-1”出现的次数是23510,就这个文件来说,-1表示负类的样本数;相应的,正样本数是7446。接下来,特征“100:1”出现的次数是53,特征“101:1”是79......我就不具体解释了,做过机器学习算法的人都会知道上面表示什么意思。


总之,word count程序在我macbook pro的伪分布式上成功运行!将来,可以在进一步折腾了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值