前一段时间,从配置Hadoop到运行kmeans的mapreduce程序,着实让我纠结了几天,昨天终于把前面遇到的配置问题和程序运行问题搞定。Kmeans算法看起来很简单,但对于第一次接触mapreduce程序来说,还是有些挑战,还好基本都搞明白了。Kmeans算法是从网上下的在此分析一下过程。

Kmeans.Java

[java] view plaincopy
  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.fs.FileSystem;
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Job;
  6. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  7. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  8. public class KMeans {
  9. public static void main(String[] args) throws Exception
  10. {
  11. CenterInitial centerInitial = new CenterInitial();
  12. centerInitial.run(args);//初始化中心点
  13. int times=0;
  14. double s = 0,shold = 0.1;//shold是预制。
  15. do {
  16. Configuration conf = new Configuration();
  17. conf.set("fs.default.name", "hdfs://localhost:9000");
  18. Job job = new Job(conf,"KMeans");//建立KMeans的MapReduce作业
  19. job.setJarByClass(KMeans.class);//设定作业的启动类
  20. job.setOutputKeyClass(Text.class);//设定Key输出的格式:Text
  21. job.setOutputValueClass(Text.class);//设定value输出的格式:Text
  22. job.setMapperClass(KMapper.class);//设定Mapper类
  23. job.setMapOutputKeyClass(Text.class);
  24. job.setMapOutputValueClass(Text.class);//设定Reducer类
  25. job.setReducerClass(KReducer.class);
  26. FileSystem fs = FileSystem.get(conf);
  27. fs.delete(new Path(args[2]),true);//args[2]是output目录,fs.delete是将已存在的output删除
  28. //解析输入和输出参数,分别作为作业的输入和输出,都是文件
  29. FileInputFormat.addInputPath(job, new Path(args[0]));
  30. FileOutputFormat.setOutputPath(job, new Path(args[2]));
  31. //运行作业并判断是否完成成功
  32. job.waitForCompletion(true);
  33. if(job.waitForCompletion(true))//上一次mapreduce过程结束
  34. {
  35. //上两个中心点做比较,如果中心点之间的距离小于阈值就停止;如果距离大于阈值,就把最近的中心点作为新中心点
  36. NewCenter newCenter = new NewCenter();
  37. s = newCenter.run(args);
  38. times++;
  39. }
  40. } while(s > shold);//当误差小于阈值停止。
  41. System.out.println("Iterator: " + times);//迭代次数
  42. }
  43. }

问题:args[]是什么,这个问题纠结了几日才得到答案,args[]就是最开始向程序中传递的参数,具体在Run Configurations里配置,如下

hdfs://localhost:9000/home/administrator/hadoop/kmeans/input hdfs://localhost:9000/home/administrator/hadoop/kmeans hdfs://localhost:9000/home/administrator/hadoop/kmeans/output

代码的功能在程序中注释。

输入数据,保存在2.txt中:(1,1) (9,9) (2,3) (10,30) (4,4) (34,40) (5,6) (15,20)

3.txt用于保存临时的中心

part-r-00000用于保存reduce的结果

程序的mapreduce过程及结果:

[java] view plaincopy
  1. 初始化过程:(10,30) (2,3)
  2. 13/01/26 08:58:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. 13/01/26 08:58:38 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
  4. 13/01/26 08:58:38 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
  5. 13/01/26 08:58:38 INFO input.FileInputFormat: Total input paths to process : 2
  6. 13/01/26 08:58:38 WARN snappy.LoadSnappy: Snappy native library not loaded
  7. 13/01/26 08:58:38 INFO mapred.JobClient: Running job: job_local_0001
  8. 13/01/26 08:58:39 INFO util.ProcessTree: setsid exited with exit code 0
  9. 13/01/26 08:58:39 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@15718f2
  10. 13/01/26 08:58:39 INFO mapred.MapTask: io.sort.mb = 100
  11. 13/01/26 08:58:39 INFO mapred.MapTask: data buffer = 79691776/99614720
  12. 13/01/26 08:58:39 INFO mapred.MapTask: record buffer = 262144/327680
  13. 0list:1
  14. 0c:10
  15. 1list:1
  16. 1c:30
  17. 中心点(2,3)对应坐标(1,1)
  18. Mapper输出:(2,3) (1,1)
  19. 0list:9
  20. 0c:10
  21. 1list:9
  22. 1c:30
  23. 中心点(2,3)对应坐标(9,9)
  24. Mapper输出:(2,3) (9,9)
  25. 0list:2
  26. 0c:10
  27. 1list:3
  28. 1c:30
  29. 中心点(2,3)对应坐标(2,3)
  30. Mapper输出:(2,3) (2,3)
  31. 0list:10
  32. 0c:10
  33. 1list:30
  34. 1c:30
  35. 中心点(10,30)对应坐标(10,30)
  36. Mapper输出:(10,30) (10,30)
  37. 0list:4
  38. 0c:10
  39. 1list:4
  40. 1c:30
  41. 中心点(2,3)对应坐标(4,4)
  42. Mapper输出:(2,3) (4,4)
  43. 0list:34
  44. 0c:10
  45. 1list:40
  46. 1c:30
  47. 中心点(10,30)对应坐标(34,40)
  48. Mapper输出:(10,30) (34,40)
  49. 0list:5
  50. 0c:10
  51. 1list:6
  52. 1c:30
  53. 中心点(2,3)对应坐标(5,6)
  54. Mapper输出:(2,3) (5,6)
  55. 0list:15
  56. 0c:10
  57. 1list:20
  58. 1c:30
  59. 中心点(10,30)对应坐标(15,20)
  60. Mapper输出:(10,30) (15,20)
  61. 13/01/26 08:58:39 INFO mapred.MapTask: Starting flush of map output
  62. 13/01/26 08:58:39 INFO mapred.MapTask: Finished spill 0
  63. 13/01/26 08:58:39 INFO mapred.Task: Task:attempt_local_0001_m_000000_0 is done. And is in the process of commiting
  64. 13/01/26 08:58:39 INFO mapred.JobClient:  map 0% reduce 0%
  65. 13/01/26 08:58:42 INFO mapred.LocalJobRunner:
  66. 13/01/26 08:58:42 INFO mapred.Task: Task 'attempt_local_0001_m_000000_0' done.
  67. 13/01/26 08:58:42 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@77eaf8
  68. 13/01/26 08:58:42 INFO mapred.MapTask: io.sort.mb = 100
  69. 13/01/26 08:58:42 INFO mapred.MapTask: data buffer = 79691776/99614720
  70. 13/01/26 08:58:42 INFO mapred.MapTask: record buffer = 262144/327680
  71. 0list:2
  72. 0c:10
  73. 1list:3
  74. 1c:30
  75. 中心点(2,3)对应坐标(2,3)
  76. Mapper输出:(2,3) (2,3)
  77. 0list:10
  78. 0c:10
  79. 1list:30
  80. 1c:30
  81. 中心点(10,30)对应坐标(10,30)
  82. Mapper输出:(10,30) (10,30)
  83. 0list:34
  84. 0c:10
  85. 1list:40
  86. 1c:30
  87. 中心点(10,30)对应坐标(34,40)
  88. Mapper输出:(10,30) (34,40)
  89. 0list:1
  90. 0c:10
  91. 1list:1
  92. 1c:30
  93. 中心点(2,3)对应坐标(1,1)
  94. Mapper输出:(2,3) (1,1)
  95. 13/01/26 08:58:42 INFO mapred.MapTask: Starting flush of map output
  96. 13/01/26 08:58:42 INFO mapred.MapTask: Finished spill 0
  97. 13/01/26 08:58:42 INFO mapred.Task: Task:attempt_local_0001_m_000001_0 is done. And is in the process of commiting
  98. 13/01/26 08:58:42 INFO mapred.JobClient:  map 100% reduce 0%
  99. 13/01/26 08:58:45 INFO mapred.LocalJobRunner:
  100. 13/01/26 08:58:45 INFO mapred.Task: Task 'attempt_local_0001_m_000001_0' done.
  101. 13/01/26 08:58:45 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@18d7ace
  102. 13/01/26 08:58:45 INFO mapred.LocalJobRunner:
  103. 13/01/26 08:58:45 INFO mapred.Merger: Merging 2 sorted segments
  104. 13/01/26 08:58:45 INFO mapred.Merger: Down to the last merge-pass, with 2 segments left of total size: 192 bytes
  105. 13/01/26 08:58:45 INFO mapred.LocalJobRunner:
  106. Reduce过程第一次
  107. (10,30)Reduce
  108. val:(10,30)
  109. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  110. temlength:2
  111. val:(34,40)
  112. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  113. temlength:2
  114. val:(10,30)
  115. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  116. temlength:2
  117. val:(34,40)
  118. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  119. temlength:2
  120. val:(15,20)
  121. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  122. temlength:2
  123. count:5
  124. outVal:(10,30) (34,40) (10,30) (34,40) (15,20) /outVal
  125. ave0i103.0
  126. ave1i160.0
  127. 写入part:(10,30) (10,30) (34,40) (10,30) (34,40) (15,20)  (20.6,32.0)
  128. Reduce过程第一次
  129. (2,3)Reduce
  130. val:(1,1)
  131. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  132. temlength:2
  133. val:(9,9)
  134. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  135. temlength:2
  136. val:(2,3)
  137. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  138. temlength:2
  139. val:(4,4)
  140. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  141. temlength:2
  142. val:(5,6)
  143. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  144. temlength:2
  145. val:(2,3)
  146. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  147. temlength:2
  148. val:(1,1)
  149. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@141fab6
  150. temlength:2
  151. count:7
  152. outVal:(1,1) (9,9) (2,3) (4,4) (5,6) (2,3) (1,1) /outVal
  153. ave0i24.0
  154. ave1i27.0
  155. 写入part:(2,3) (1,1) (9,9) (2,3) (4,4) (5,6) (2,3) (1,1)  (3.4285715,3.857143)
  156. 13/01/26 08:58:45 INFO mapred.Task: Task:attempt_local_0001_r_000000_0 is done. And is in the process of commiting
  157. 13/01/26 08:58:45 INFO mapred.LocalJobRunner:
  158. 13/01/26 08:58:45 INFO mapred.Task: Task attempt_local_0001_r_000000_0 is allowed to commit now
  159. 13/01/26 08:58:45 INFO output.FileOutputCommitter: Saved output of task 'attempt_local_0001_r_000000_0' to hdfs://localhost:9000/home/administrator/hadoop/kmeans/output
  160. 13/01/26 08:58:48 INFO mapred.LocalJobRunner: reduce > reduce
  161. 13/01/26 08:58:48 INFO mapred.Task: Task 'attempt_local_0001_r_000000_0' done.
  162. 13/01/26 08:58:48 INFO mapred.JobClient:  map 100% reduce 100%
  163. 13/01/26 08:58:48 INFO mapred.JobClient: Job complete: job_local_0001
  164. 13/01/26 08:58:48 INFO mapred.JobClient: Counters: 22
  165. 13/01/26 08:58:48 INFO mapred.JobClient:   File Output Format Counters
  166. 13/01/26 08:58:48 INFO mapred.JobClient:     Bytes Written=129
  167. 13/01/26 08:58:48 INFO mapred.JobClient:   FileSystemCounters
  168. 13/01/26 08:58:48 INFO mapred.JobClient:     FILE_BYTES_READ=1818
  169. 13/01/26 08:58:48 INFO mapred.JobClient:     HDFS_BYTES_READ=450
  170. 13/01/26 08:58:48 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=122901
  171. 13/01/26 08:58:48 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=171
  172. 13/01/26 08:58:48 INFO mapred.JobClient:   File Input Format Counters
  173. 13/01/26 08:58:48 INFO mapred.JobClient:     Bytes Read=82
  174. 13/01/26 08:58:48 INFO mapred.JobClient:   Map-Reduce Framework
  175. 13/01/26 08:58:48 INFO mapred.JobClient:     Map output materialized bytes=200
  176. 13/01/26 08:58:48 INFO mapred.JobClient:     Map input records=2
  177. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce shuffle bytes=0
  178. 13/01/26 08:58:48 INFO mapred.JobClient:     Spilled Records=24
  179. 13/01/26 08:58:48 INFO mapred.JobClient:     Map output bytes=164
  180. 13/01/26 08:58:48 INFO mapred.JobClient:     Total committed heap usage (bytes)=498860032
  181. 13/01/26 08:58:48 INFO mapred.JobClient:     CPU time spent (ms)=0
  182. 13/01/26 08:58:48 INFO mapred.JobClient:     SPLIT_RAW_BYTES=262
  183. 13/01/26 08:58:48 INFO mapred.JobClient:     Combine input records=0
  184. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce input records=12
  185. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce input groups=2
  186. 13/01/26 08:58:48 INFO mapred.JobClient:     Combine output records=0
  187. 13/01/26 08:58:48 INFO mapred.JobClient:     Physical memory (bytes) snapshot=0
  188. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce output records=2
  189. 13/01/26 08:58:48 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=0
  190. 13/01/26 08:58:48 INFO mapred.JobClient:     Map output records=12
  191. 13/01/26 08:58:48 INFO mapred.JobClient: Running job: job_local_0001
  192. 13/01/26 08:58:48 INFO mapred.JobClient: Job complete: job_local_0001
  193. 13/01/26 08:58:48 INFO mapred.JobClient: Counters: 22
  194. 13/01/26 08:58:48 INFO mapred.JobClient:   File Output Format Counters
  195. 13/01/26 08:58:48 INFO mapred.JobClient:     Bytes Written=129
  196. 13/01/26 08:58:48 INFO mapred.JobClient:   FileSystemCounters
  197. 13/01/26 08:58:48 INFO mapred.JobClient:     FILE_BYTES_READ=1818
  198. 13/01/26 08:58:48 INFO mapred.JobClient:     HDFS_BYTES_READ=450
  199. 13/01/26 08:58:48 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=122901
  200. 13/01/26 08:58:48 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=171
  201. 13/01/26 08:58:48 INFO mapred.JobClient:   File Input Format Counters
  202. 13/01/26 08:58:48 INFO mapred.JobClient:     Bytes Read=82
  203. 13/01/26 08:58:48 INFO mapred.JobClient:   Map-Reduce Framework
  204. 13/01/26 08:58:48 INFO mapred.JobClient:     Map output materialized bytes=200
  205. 13/01/26 08:58:48 INFO mapred.JobClient:     Map input records=2
  206. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce shuffle bytes=0
  207. 13/01/26 08:58:48 INFO mapred.JobClient:     Spilled Records=24
  208. 13/01/26 08:58:48 INFO mapred.JobClient:     Map output bytes=164
  209. 13/01/26 08:58:48 INFO mapred.JobClient:     Total committed heap usage (bytes)=498860032
  210. 13/01/26 08:58:48 INFO mapred.JobClient:     CPU time spent (ms)=0
  211. 13/01/26 08:58:48 INFO mapred.JobClient:     SPLIT_RAW_BYTES=262
  212. 13/01/26 08:58:48 INFO mapred.JobClient:     Combine input records=0
  213. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce input records=12
  214. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce input groups=2
  215. 13/01/26 08:58:48 INFO mapred.JobClient:     Combine output records=0
  216. 13/01/26 08:58:48 INFO mapred.JobClient:     Physical memory (bytes) snapshot=0
  217. 13/01/26 08:58:48 INFO mapred.JobClient:     Reduce output records=2
  218. 13/01/26 08:58:48 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=0
  219. 13/01/26 08:58:48 INFO mapred.JobClient:     Map output records=12
  220. 上一次MapReduce结果:第一行:(10,30)  (10,30) (34,40) (10,30) (34,40) (15,20) (20.6,32.0)
  221. 第二行:(2,3)   (1,1) (9,9) (2,3) (4,4) (5,6) (2,3) (1,1) (3.4285715,3.857143)
  222. 0坐标距离:116.36001
  223. 1坐标距离:2.7755103
  224. 新中心点:(20.6,32.0) (3.4285715,3.857143)
  225. 13/01/26 08:58:49 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
  226. 13/01/26 08:58:49 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
  227. 13/01/26 08:58:49 INFO input.FileInputFormat: Total input paths to process : 2
  228. 13/01/26 08:58:49 INFO mapred.JobClient: Running job: job_local_0002
  229. 13/01/26 08:58:49 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@18aab40
  230. 13/01/26 08:58:49 INFO mapred.MapTask: io.sort.mb = 100
  231. 13/01/26 08:58:49 INFO mapred.MapTask: data buffer = 79691776/99614720
  232. 13/01/26 08:58:49 INFO mapred.MapTask: record buffer = 262144/327680
  233. 0list:1
  234. 0c:20.6
  235. 1list:1
  236. 1c:32.0
  237. 中心点(3.4285715,3.857143)对应坐标(1,1)
  238. Mapper输出:(3.4285715,3.857143) (1,1)
  239. 0list:9
  240. 0c:20.6
  241. 1list:9
  242. 1c:32.0
  243. 中心点(3.4285715,3.857143)对应坐标(9,9)
  244. Mapper输出:(3.4285715,3.857143) (9,9)
  245. 0list:2
  246. 0c:20.6
  247. 1list:3
  248. 1c:32.0
  249. 中心点(3.4285715,3.857143)对应坐标(2,3)
  250. Mapper输出:(3.4285715,3.857143) (2,3)
  251. 0list:10
  252. 0c:20.6
  253. 1list:30
  254. 1c:32.0
  255. 中心点(20.6,32.0)对应坐标(10,30)
  256. Mapper输出:(20.6,32.0) (10,30)
  257. 0list:4
  258. 0c:20.6
  259. 1list:4
  260. 1c:32.0
  261. 中心点(3.4285715,3.857143)对应坐标(4,4)
  262. Mapper输出:(3.4285715,3.857143) (4,4)
  263. 0list:34
  264. 0c:20.6
  265. 1list:40
  266. 1c:32.0
  267. 中心点(20.6,32.0)对应坐标(34,40)
  268. Mapper输出:(20.6,32.0) (34,40)
  269. 0list:5
  270. 0c:20.6
  271. 1list:6
  272. 1c:32.0
  273. 中心点(3.4285715,3.857143)对应坐标(5,6)
  274. Mapper输出:(3.4285715,3.857143) (5,6)
  275. 0list:15
  276. 0c:20.6
  277. 1list:20
  278. 1c:32.0
  279. 中心点(20.6,32.0)对应坐标(15,20)
  280. Mapper输出:(20.6,32.0) (15,20)
  281. 13/01/26 08:58:49 INFO mapred.MapTask: Starting flush of map output
  282. 13/01/26 08:58:49 INFO mapred.MapTask: Finished spill 0
  283. 13/01/26 08:58:49 INFO mapred.Task: Task:attempt_local_0002_m_000000_0 is done. And is in the process of commiting
  284. 13/01/26 08:58:50 INFO mapred.JobClient:  map 0% reduce 0%
  285. 13/01/26 08:58:52 INFO mapred.LocalJobRunner:
  286. 13/01/26 08:58:52 INFO mapred.Task: Task 'attempt_local_0002_m_000000_0' done.
  287. 13/01/26 08:58:52 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@147358f
  288. 13/01/26 08:58:52 INFO mapred.MapTask: io.sort.mb = 100
  289. 13/01/26 08:58:52 INFO mapred.MapTask: data buffer = 79691776/99614720
  290. 13/01/26 08:58:52 INFO mapred.MapTask: record buffer = 262144/327680
  291. 0list:2
  292. 0c:20.6
  293. 1list:3
  294. 1c:32.0
  295. 中心点(3.4285715,3.857143)对应坐标(2,3)
  296. Mapper输出:(3.4285715,3.857143) (2,3)
  297. 0list:10
  298. 0c:20.6
  299. 1list:30
  300. 1c:32.0
  301. 中心点(20.6,32.0)对应坐标(10,30)
  302. Mapper输出:(20.6,32.0) (10,30)
  303. 0list:34
  304. 0c:20.6
  305. 1list:40
  306. 1c:32.0
  307. 中心点(20.6,32.0)对应坐标(34,40)
  308. Mapper输出:(20.6,32.0) (34,40)
  309. 0list:1
  310. 0c:20.6
  311. 1list:1
  312. 1c:32.0
  313. 中心点(3.4285715,3.857143)对应坐标(1,1)
  314. Mapper输出:(3.4285715,3.857143) (1,1)
  315. 13/01/26 08:58:52 INFO mapred.MapTask: Starting flush of map output
  316. 13/01/26 08:58:52 INFO mapred.MapTask: Finished spill 0
  317. 13/01/26 08:58:52 INFO mapred.Task: Task:attempt_local_0002_m_000001_0 is done. And is in the process of commiting
  318. 13/01/26 08:58:53 INFO mapred.JobClient:  map 100% reduce 0%
  319. 13/01/26 08:58:55 INFO mapred.LocalJobRunner:
  320. 13/01/26 08:58:55 INFO mapred.Task: Task 'attempt_local_0002_m_000001_0' done.
  321. 13/01/26 08:58:55 INFO mapred.Task:  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@2798e7
  322. 13/01/26 08:58:55 INFO mapred.LocalJobRunner:
  323. 13/01/26 08:58:55 INFO mapred.Merger: Merging 2 sorted segments
  324. 13/01/26 08:58:55 INFO mapred.Merger: Down to the last merge-pass, with 2 segments left of total size: 317 bytes
  325. 13/01/26 08:58:55 INFO mapred.LocalJobRunner:
  326. Reduce过程第一次
  327. (20.6,32.0)Reduce
  328. val:(10,30)
  329. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  330. temlength:2
  331. val:(34,40)
  332. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  333. temlength:2
  334. val:(10,30)
  335. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  336. temlength:2
  337. val:(34,40)
  338. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  339. temlength:2
  340. val:(15,20)
  341. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  342. temlength:2
  343. count:5
  344. outVal:(10,30) (34,40) (10,30) (34,40) (15,20) /outVal
  345. ave0i103.0
  346. ave1i160.0
  347. 写入part:(20.6,32.0) (10,30) (34,40) (10,30) (34,40) (15,20)  (20.6,32.0)
  348. Reduce过程第一次
  349. (3.4285715,3.857143)Reduce
  350. val:(1,1)
  351. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  352. temlength:2
  353. val:(9,9)
  354. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  355. temlength:2
  356. val:(2,3)
  357. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  358. temlength:2
  359. val:(4,4)
  360. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  361. temlength:2
  362. val:(5,6)
  363. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  364. temlength:2
  365. val:(2,3)
  366. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  367. temlength:2
  368. val:(1,1)
  369. values:org.apache.hadoop.mapreduce.ReduceContext$ValueIterable@13043d2
  370. temlength:2
  371. count:7
  372. outVal:(1,1) (9,9) (2,3) (4,4) (5,6) (2,3) (1,1) /outVal
  373. ave0i24.0
  374. ave1i27.0
  375. 写入part:(3.4285715,3.857143) (1,1) (9,9) (2,3) (4,4) (5,6) (2,3) (1,1)  (3.4285715,3.857143)
  376. 13/01/26 08:58:55 INFO mapred.Task: Task:attempt_local_0002_r_000000_0 is done. And is in the process of commiting
  377. 13/01/26 08:58:55 INFO mapred.LocalJobRunner:
  378. 13/01/26 08:58:55 INFO mapred.Task: Task attempt_local_0002_r_000000_0 is allowed to commit now
  379. 13/01/26 08:58:55 INFO output.FileOutputCommitter: Saved output of task 'attempt_local_0002_r_000000_0' to hdfs://localhost:9000/home/administrator/hadoop/kmeans/output
  380. 13/01/26 08:58:58 INFO mapred.LocalJobRunner: reduce > reduce
  381. 13/01/26 08:58:58 INFO mapred.Task: Task 'attempt_local_0002_r_000000_0' done.
  382. 13/01/26 08:58:59 INFO mapred.JobClient:  map 100% reduce 100%
  383. 13/01/26 08:58:59 INFO mapred.JobClient: Job complete: job_local_0002
  384. 13/01/26 08:58:59 INFO mapred.JobClient: Counters: 22
  385. 13/01/26 08:58:59 INFO mapred.JobClient:   File Output Format Counters
  386. 13/01/26 08:58:59 INFO mapred.JobClient:     Bytes Written=148
  387. 13/01/26 08:58:59 INFO mapred.JobClient:   FileSystemCounters
  388. 13/01/26 08:58:59 INFO mapred.JobClient:     FILE_BYTES_READ=4442
  389. 13/01/26 08:58:59 INFO mapred.JobClient:     HDFS_BYTES_READ=1262
  390. 13/01/26 08:58:59 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=246235
  391. 13/01/26 08:58:59 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=676
  392. 13/01/26 08:58:59 INFO mapred.JobClient:   File Input Format Counters
  393. 13/01/26 08:58:59 INFO mapred.JobClient:     Bytes Read=82
  394. 13/01/26 08:58:59 INFO mapred.JobClient:   Map-Reduce Framework
  395. 13/01/26 08:58:59 INFO mapred.JobClient:     Map output materialized bytes=325
  396. 13/01/26 08:58:59 INFO mapred.JobClient:     Map input records=2
  397. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce shuffle bytes=0
  398. 13/01/26 08:58:59 INFO mapred.JobClient:     Spilled Records=24
  399. 13/01/26 08:58:59 INFO mapred.JobClient:     Map output bytes=289
  400. 13/01/26 08:58:59 INFO mapred.JobClient:     Total committed heap usage (bytes)=667418624
  401. 13/01/26 08:58:59 INFO mapred.JobClient:     CPU time spent (ms)=0
  402. 13/01/26 08:58:59 INFO mapred.JobClient:     SPLIT_RAW_BYTES=262
  403. 13/01/26 08:58:59 INFO mapred.JobClient:     Combine input records=0
  404. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce input records=12
  405. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce input groups=2
  406. 13/01/26 08:58:59 INFO mapred.JobClient:     Combine output records=0
  407. 13/01/26 08:58:59 INFO mapred.JobClient:     Physical memory (bytes) snapshot=0
  408. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce output records=2
  409. 13/01/26 08:58:59 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=0
  410. 13/01/26 08:58:59 INFO mapred.JobClient:     Map output records=12
  411. 13/01/26 08:58:59 INFO mapred.JobClient: Running job: job_local_0002
  412. 13/01/26 08:58:59 INFO mapred.JobClient: Job complete: job_local_0002
  413. 13/01/26 08:58:59 INFO mapred.JobClient: Counters: 22
  414. 13/01/26 08:58:59 INFO mapred.JobClient:   File Output Format Counters
  415. 13/01/26 08:58:59 INFO mapred.JobClient:     Bytes Written=148
  416. 13/01/26 08:58:59 INFO mapred.JobClient:   FileSystemCounters
  417. 13/01/26 08:58:59 INFO mapred.JobClient:     FILE_BYTES_READ=4442
  418. 13/01/26 08:58:59 INFO mapred.JobClient:     HDFS_BYTES_READ=1262
  419. 13/01/26 08:58:59 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=246235
  420. 13/01/26 08:58:59 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=676
  421. 13/01/26 08:58:59 INFO mapred.JobClient:   File Input Format Counters
  422. 13/01/26 08:58:59 INFO mapred.JobClient:     Bytes Read=82
  423. 13/01/26 08:58:59 INFO mapred.JobClient:   Map-Reduce Framework
  424. 13/01/26 08:58:59 INFO mapred.JobClient:     Map output materialized bytes=325
  425. 13/01/26 08:58:59 INFO mapred.JobClient:     Map input records=2
  426. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce shuffle bytes=0
  427. 13/01/26 08:58:59 INFO mapred.JobClient:     Spilled Records=24
  428. 13/01/26 08:58:59 INFO mapred.JobClient:     Map output bytes=289
  429. 13/01/26 08:58:59 INFO mapred.JobClient:     Total committed heap usage (bytes)=667418624
  430. 13/01/26 08:58:59 INFO mapred.JobClient:     CPU time spent (ms)=0
  431. 13/01/26 08:58:59 INFO mapred.JobClient:     SPLIT_RAW_BYTES=262
  432. 13/01/26 08:58:59 INFO mapred.JobClient:     Combine input records=0
  433. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce input records=12
  434. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce input groups=2
  435. 13/01/26 08:58:59 INFO mapred.JobClient:     Combine output records=0
  436. 13/01/26 08:58:59 INFO mapred.JobClient:     Physical memory (bytes) snapshot=0
  437. 13/01/26 08:58:59 INFO mapred.JobClient:     Reduce output records=2
  438. 13/01/26 08:58:59 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=0
  439. 13/01/26 08:58:59 INFO mapred.JobClient:     Map output records=12
  440. 上一次MapReduce结果:第一行:(20.6,32.0)  (10,30) (34,40) (10,30) (34,40) (15,20) (20.6,32.0)
  441. 第二行:(3.4285715,3.857143)    (1,1) (9,9) (2,3) (4,4) (5,6) (2,3) (1,1) (3.4285715,3.857143)
  442. 0坐标距离:0.0
  443. 1坐标距离:0.0
  444. 新中心点:(20.6,32.0) (3.4285715,3.857143)
  445. Iterator: 2

from: http://blog.csdn.net/lskyne/article/details/8543885

http://blog.csdn.net/lskyne/article/details/8543923

hadoop下的Kmeans算法实现相关推荐

  1. hadoop下实现kmeans算法——一个mapreduce的实现方法

    写mapreduce程序实现kmeans算法,我们的思路可能是这样的 1. 用一个全局变量存放上一次迭代后的质心 2. map里,计算每个质心与样本之间的距离,得到与样本距离最短的质心,以这个质心作为 ...

  2. matlab disteclud,机器学习实战ByMatlab(3)K-means算法

    K-means算法属于无监督学习聚类算法,其计算步骤还是挺简单的,思想也挺容易理解,而且还可以在思想中体会到EM算法的思想. K-means 算法的优缺点: 1.优点:容易实现 2.缺点:可能收敛到局 ...

  3. matlab 职坐标,机器学习入门之机器学习实战ByMatlab(三)K-means算法

    本文主要向大家介绍了机器学习入门之机器学习实战ByMatlab(三)K-means算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助.K-means算法属于无监督学习聚类算法,其计算步 ...

  4. 深度学习核心技术精讲100篇(五十一)-Spark平台下基于LDA的k-means算法实现

    本文主要在Spark平台下实现一个机器学习应用,该应用主要涉及LDA主题模型以及K-means聚类.通过本文你可以了解到: 文本挖掘的基本流程 LDA主题模型算法 K-means算法 Spark平台下 ...

  5. Hadoop 实现kmeans 算法

    关于kmeans说在前面:kmeans算法有一个硬性的规定就是簇的个数要提前设定.大家可能会质疑这个限制是否影响聚类效果,但是这种担心是多余的.在该算法诞生的这么多年里,该算法已被证明能够广泛的用于解 ...

  6. 用Hadoop1.0.3实现KMeans算法

    从理论上来讲用MapReduce技术实现KMeans算法是很Natural的想法:在Mapper中逐个计算样本点离哪个中心最近,然后Emit(样本点所属的簇编号,样本点):在Reducer中属于同一个 ...

  7. KMeans算法的Mapreduce实现

    Hive数据分析... 4 一.数据处理.... 4 1.1处理不符合规范的数据.... 4 1.2访问时间分段.... 5 二.基本统计信息.... 6 三.数据属性基础分析.... 6 3.1用户 ...

  8. KMeans算法,采用肘部法则获取类簇中心个数K的值。

    K-Means是一种非常常见的聚类算法,在处理聚类任务中经常使用,K-Means算法是一种原型聚类算法. 该算法重要的一步就是确定K的值的划分,通常我们采用肘部法则选取K值,再依据轮廓系数,及各个数据 ...

  9. 一文详尽系列之K-means算法

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 K-means 是我们最常用的基于距离的聚类算法,其认为两个目标的距离越近,相似度越大 ...

最新文章

  1. 2021年大数据Spark(二十一):Spark Core案例-SogouQ日志分析
  2. 算法导论读书笔记-第十九章-斐波那契堆
  3. find命令详解(原创)
  4. NodeJS API Process全局对象
  5. CNI:容器网络接口详解
  6. Linux ffmpeg的安装编译过程
  7. 前端学习(2963):element-ui介绍
  8. 【spring boot基础知识】java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
  9. 监听是否到达页面滑动的可视区域最底部
  10. Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
  11. shell编程——判断条件
  12. TOMCAT SSL 配置
  13. extern ,extern C 与 __cplusplus
  14. echarts 折线图y轴自定义 使用icon
  15. android 判断手机计步_Android_基于G-Sensor的计步算法
  16. windows 实现 linux soft link,Linux中的软链接(Soft Link)和硬链接(Hard Link)的区别...
  17. r语言html爬虫,用R语言三行代码写爬虫
  18. 用scratch2.0编写乒乓球游戏
  19. k8s标签选择器使用详解
  20. k m kb mb计算机组成,为什么对计算机存储单位(K,M,G,T)换算,总是糊里又糊涂?

热门文章

  1. 【联邦学习】联盟学习到底是什么?他们画了部漫画……
  2. 【Python】写文件个性化设置模块Python_Xlwt练习
  3. Fabric 链码Chaincode 的安装、初始化、调用、升级
  4. 中科院罗平演讲全文:自动撰写金融文档如何实现,用 AI 解
  5. java校园足球管理系统_基于jsp的校园足球管理平台-JavaEE实现校园足球管理平台 - java项目源码...
  6. 小胖机器人能刷碗吗_小胖机器人好不好?透过真相看本质
  7. Spring Cloud Alibaba - 25 Gateway-路由断言工厂Route Predicate Factories谓词工厂示例及源码解析
  8. Java8 - 一文搞定Fork/Join 框架
  9. Centos显示-bash-4.1$问题的修复及原因探究
  10. java进入编程界面_java – 编程到界面是什么意思?