MapReduce 规划 系列的12 使用Hadoop Streaming技术集成newLISP文字
本文example6环境与前Hadoop 1.x异,于Hadoop 2.x环境测试。
功能与前面相同的日志处理程序。
第一newLISP文字,游玩mapper任务。于stdin读取文本数据,将did由于key, value至1,结果是随后被输出到stdout
第二个newLISP脚本。起到reducer的作用,在stdin中读取<key, values>, key是dic。 values是全部的value,简单对value求和后。写到stdout中
最后应该能够在HDFS下看到结果。
用脚本编程的优点是方便測试,如今先开发newLISP脚本读入文件。并仿照map逻辑处理,然后交给兴许的newLISP脚本仿照reduce处理。
以下是map.lsp代码:
#!/usr/bin/newlisp (while (read-line)
(set 'value (parse (current-line) ","))
(println (string (value 2) "\t1"))
) (exit)
測试一下:
cat logs/sign_2014-05-10.0.csv | ./map.lsp
结果还不错:
537025b84700aab27472b87f 1
537023124700aab27472b82a 1
537031a24700aab27472b982 1
537023c84700aab27472b841 1
537014e74700aab27472b48b 1
53702cac4700aab27472b928 1
537049cd4700aab27472ba91 1
5370dd0b4700aab27472bde4 1
将一行记录依照,拆开。放在一个list中,然后取第三个元素。也就是设备ID。之后加入\t为列分隔符号,然后再加入1.
这样就转成了did\t1\n的形式的<key,value>给reduce。注意newLISP的代码println函数会自己主动在字符串后面加入\n.
以下来实现reduce.lsp代码:
(new Tree 'my-table) (while (read-line)
(set 'line-value (parse (current-line) "\t"))
(set 'key (line-value 0))
(set 'value (int (line-value 1)))
(set 'v (my-table key))
(if v
(my-table key (+ v value))
(my-table key value)
)
) (dolist (item (my-table)) (println (item 0) "\t" (item 1))) (exit)
首先创建了一个my-table,用来保存<key,value>
然后将map.lsp输出的数据每行依照\t拆分。获取key和value
存入my-table中,用key查询,有则value加1,无key则加入进去。
最后遍历整个my-table,输出did\tsum\n这种数据。
以下的命令能够将map和reduce脚本连起来測试:
cat logs/sign_2014-05-10.0.csv | ./map.lsp | sort | ./reduce.lsp
在hadoop集群部署的时候首先要确保newlisp二进制程序都部署在全部节点的/usr/bin/文件夹下,而且有运行权限。因为newlisp程序本身很小。所以部署及其轻松。直接scp就可以。
然后运行hadoop命令:
hadoop jar hadoop-streaming-1.0.0.jar -files map.lsp reduce.lsp -input /user/chenshu/share/logs -output /user/chenshu/share/output/lisp -mapper map.lsp -reducer reduce.lsp
版权声明:本文博主原创文章,博客,未经同意不得转载。
MapReduce 规划 系列的12 使用Hadoop Streaming技术集成newLISP文字的更多相关文章
- MapReduce 规划 系列十 采用HashPartitioner调整Reducer计算负荷
example4它演示了如何指定Reducer号码,本节演示如何使用HashPartitioner将Mapper根据该输出key分组后Reducer为了应对. 合理的分组策略会尽一切Reducer不能 ...
- 大数据系列(2)——Hadoop集群坏境CentOS安装
前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...
- Hadoop Streaming框架学习2
Hadoop Streaming框架学习(二) 1.常用Streaming命令介绍 使用下面的命令运行Streaming MapReduce程序: 1: $HADOOP_HOME/bin/hadoop ...
- Hadoop Streaming框架学习(一)
Hadoop Streaming框架学习(一) Hadoop Streaming框架学习(一) 2013-08-19 12:32 by ATP_, 473 阅读, 3 评论, 收藏, 编辑 1.Had ...
- Hadoop Streaming框架学习(二)
1.常用Streaming命令介绍 使用下面的命令运行Streaming MapReduce程序: 1: $HADOOP_HOME/bin/hadoop/hadoop streaming args 其 ...
- 大数据系列(3)——Hadoop集群完全分布式坏境搭建
前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...
- hadoop streaming 多路输出 [转载]
转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...
- Hadoop Streaming框架使用(一)
Streaming简介 link:http://www.cnblogs.com/luchen927/archive/2012/01/16/2323448.html Streaming框架允许任何程 ...
- Hadoop Streaming例子(python)
以前总是用java写一些MapReduce程序现举一个例子使用Python通过Hadoop Streaming来实现Mapreduce. 任务描述: HDFS上有两个目录/a和/b,里面数据均有3列, ...
随机推荐
- hdu5384(trie树)
hdu5384 给定n个字符串Ai 给定m个字符串Bi 问所有的Bi在每个Ai中出现了多少次 很显然,对Bi建Trie图,然后每次用Ai去匹配的时候,不断查找当前匹配串的最长后缀,这样就能找到答案了 ...
- 重写ResultSet实现分页功能(最好的分页技术)(转)
1.首先定义一个接口Pageable 继承ResultSet这个类 并在接口中定义一些自己的方法,具体方法如下: package com.page; import java.sql.ResultSet ...
- NYOJ 45 棋盘覆盖 模拟+高精度
题意就不说了,中文题... 小白上讲了棋盘覆盖,于是我就挖了这题来做. 棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下. 公式就是f(k) = f(k - 1) * 4 + 1,再化解下 ...
- Windows Phone开发(9):关于页面状态
原文:Windows Phone开发(9):关于页面状态 按照一般做法,刚学会如何导航,还是不够的,因为要知道,手机里面的每个页面,就如同Web页面一样,是无状态的. 啥是无状态?如果我们玩过Web开 ...
- Windows下一个JSP环境配置
一.首先安装JDK 门户: http://write.blog.csdn.net/postedit/39999433 二.安装Myeclipse 事实上也能够安装eclipse然后再安装Myeclip ...
- 你怎么知道你的网站K
最近有朋友问我关于网站K问题,你怎么知道被提及哪些网站K方面.总结了六个方法后,,至于有没有其他办法.欢迎和我交流讨论. 检测方法是网站的搜索引擎惩罚: 首先要明白的是.搜索引擎不惩罚easy侦查 ...
- 【Java基础】异常的简单分类与处理
Java中所有的异常都继承自Throwable类,Throwable类的已知子类有Error和Exception. Error是指系统出现的错误,这种错误出现的时候,我们的程序无能为力,所以不需要进行 ...
- 利用Pattern和Mather来禁止特殊字符的输入
String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}[]‘::”“’.,.?]&q ...
- ViewRootImpl和WindowManagerService笔记
1.每个窗体的ViewRootImpl都有一个mWindowAttributes窗体属性,该属性在WindowManagerGlobal.updateViewLayout()->ViewRoot ...
- WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法
原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...