文档章节

用Hadoop Streaming技术集成newLISP脚本

超人学院
 超人学院
发布于 2014/11/24 14:40
字数 655
阅读 13
收藏 0
点赞 0
评论 0

本文example6环境和之前的Hadoop 1.x不同,是在Hadoop 2.x环境下测试。功能和前面的日志处理程序一样。

第一个newLISP脚本,起到mapper的作用,在stdin中读取文本数据,将did作为key, value1,然后将结果输出到stdout

第二个newLISP脚本,起到reducer的作用,在stdin中读取<key, values>, keydic values是所有的value,简单对value求和后,写到stdout

最后应该可以在HDFS下看到结果。

 

用脚本编程的好处是方便测试,现在先开发newLISP脚本读入文件,并仿照map逻辑处理,然后交给后续的newLISP脚本仿照reduce处理。

下面是map.lsp代码:

[plain] view plaincopyprint?

1.  #!/usr/bin/newlisp  

2.    

3.  (while (read-line)  

4.    (set 'value (parse (current-line) ","))  

5.    (println (string (value 2) "\t1"))  

6.  )  

7.    

8.  (exit)  


测试一下:

[plain] view plaincopyprint?

1.  cat logs/sign_2014-05-10.0.csv | ./map.lsp  


结果还不错:

[plain] view plaincopyprint?

1.  537025b84700aab27472b87f        1  

2.  537023124700aab27472b82a        1  

3.  537031a24700aab27472b982        1  

4.  537023c84700aab27472b841        1  

5.  537014e74700aab27472b48b        1  

6.  53702cac4700aab27472b928        1  

7.  537049cd4700aab27472ba91        1  

8.  5370dd0b4700aab27472bde4        1  


将一行记录按照,拆开,放在一个list中,然后取第三个元素,也就是设备ID,之后添加\t为列分隔符号,然后再添加1.

这样就转成了did\t1\n的形式的<key,value>reduce。注意newLISP的代码println函数会自动在字符串后面添加\n.

 

下面来实现reduce.lsp代码:

[plain] view plaincopyprint?

1.  (new Tree 'my-table)  

2.    

3.  (while (read-line)  

4.    (set 'line-value (parse (current-line) "\t"))  

5.    (set 'key (line-value 0))  

6.    (set 'value (int (line-value 1)))  

7.    (set 'v (my-table key))  

8.    (if v  

9.        (my-table key (+ v value))  

10.     (my-table key value)  

11.       )  

12. )  

13.   

14. (dolist (item (my-table)) (println (item 0) "\t" (item 1)))  

15.   

16. (exit)  


首先创建了一个my-table,用来保存<key,value>

然后将map.lsp输出的数据每行按照\t拆分,获取keyvalue

存入my-table中,用key查询,有则value1,key则添加进去。

最后遍历整个my-table,输出did\tsum\n这样的数据。

 

下面的命令可以将mapreduce脚本连起来测试:

[plain] view plaincopyprint?

1.  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 

 

© 著作权归作者所有

共有 人打赏支持
超人学院
粉丝 106
博文 335
码字总数 388917
作品 0
昌平
CTO(技术副总裁)
newLISP你也行 --- newLISP简介

############################################################################# # Name:newLISP你也行 --- newLISP简介 # Author:黄登(winger) # Gtalk:free.winger@gmail.com # Gtalk-Gr......

天国之翼
2012/05/31
0
0
newLISP你也行 --- 基础知识

############################################################################# # Name:newLISP你也行 --- 基础知识 # Author:黄登(winger) # Project:http://code.google.com/p/newlisp......

天国之翼
2012/05/31
0
0
newLISP 正则表达式简介

newLISP 正则表达式规范 newLISP 的正则表达式接口是从 PCRE 标准函数库中获得的,继承了大部分的功能,但不是完全相同。 在 newLISP 中表示一个正则表达式的时候,请使用大括号包围的方式,...

沙枣
2014/06/11
0
0
使用NewLisp设计Key-Value数据库系统

Lisp是一个很好的语言,最强大的就是其S-表达式,可以说是Lisp能活到今天的唯一一个原因。其次就是函数为基本类型和后来的闭包。当然Lisp也有很大的缺点,即:一般的设计师难以避免Lisp的缺点...

句龙胤
2015/06/23
0
2
newLISP你也行 --- 字符串

############################################################################# # Name: newLISP你也行 --- 流 # Author: 黄登(winger) # Project: http://code.google.com/p/newlisp-yo......

天国之翼
2012/05/31
0
0
在NewLisp中实现匿名函数的递归

匿名函数在很多语言中的表现形式大概如下: (lambda (n) (* (+ n 1) (- n 1))) 只有参数列表和函数体,而没有名字。在大部分情况下没问题,但是一旦需要用到递归的话,就有点麻烦了,因为不知...

句龙胤
2015/06/20
0
1
在Debian64环境下源码安装newLisp v10.6.0

起因:官方网站上没有适合Debian64的二进制安装包,用源码包直接make时会失败,这里给出解决方法。 1,从官网(http://www.newlisp.org)下载源码包后解压: tar xvf Downloads/newlisp-10.6.0...

银月光海
2014/09/19
0
0
newLISP你也行 --- 流

############################################################################# # Name:newLISP你也行 --- 流 # Author:黄登(winger) # Project:http://code.google.com/p/newlisp-you-c......

天国之翼
2012/05/31
0
0
newLISP你也行 --- 列表

############################################################################# # Name:newLISP你也行 --- 列表 # Author:黄登(winger) # Project:http://code.google.com/p/newlisp-you......

天国之翼
2012/05/31
0
0
基于Flume+Kafka+Spark-Streaming的实时流式处理完整流程

基于Flume+Kafka+Spark-Streaming的实时流式处理完整流程 1、环境准备,四台测试服务器 spark集群三台,spark1,spark2,spark3 kafka集群三台,spark1,spark2,spark3 zookeeper集群三台,spa...

闪电
2016/06/28
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(转)SQL语句的执行顺序

(7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (......

Avner
17分钟前
0
0
1.14 救援模式

确保开机启动时连接镜像文件,如果是真机服务器,就需要:U盘或光盘镜像启动进入BIOS 不同主板进入bios按键不同,一般是F12或Esc 光标:移动到Boot(开机启动项) 减号移动:光标选中行,按-...

小丑鱼00
25分钟前
0
0
ES11-全文检索

高级别全文检索通常用于在全文本字段(如电子邮件正文)上运行全文检索。 他们了解如何分析被查询的字段,并在执行之前将每个字段的分析器(或search_analyzer)应用于查询字符串。 1.term查...

贾峰uk
28分钟前
0
0
java 复制对象有哪些方式

java 复制对象有哪些方式 Apache的 Common beanutils库 org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin); Springframework 的BeanUtil 依赖: <dependency> ......

黄威
43分钟前
1
0
jstack的简单使用

公司测试反应, 一个java应用的机器, 即使不做交易, cpu始终是30%多, 于是想到了jstack, 实践步骤记录一下: 1, 找出java应用的进程号 ps -ef|grep 应用名|grep -v grep 2, 找出pid下的cpu占用...

零二一七
50分钟前
1
0
崛起于Springboot2.X之项目war打包部署(18)

将springboot项目打包步骤: 1、启动类 extends SpringBootServletInitializer 2、启动类添加覆盖方法 @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder......

木九天
59分钟前
2
0
导入CSV文件就行数据整理分析

#-*-coding:utf-8-*-import csv,os,re,mathlocalPath=input("请输入所有群文件的根目录:") #所有QQ群文件的物理根目录路径def info(): info_dic=[] dirList=os.listdi...

Kefy
今天
5
0
CoreText进阶(六)-内容大小计算和自动布局

CoreText进阶(六)-内容大小计算和自动布局 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更...

aron1992
今天
1
0
一个Unity高人的博客,涉猎范围很广,深度也很深。

https://blog.csdn.net/ecidevilin/article/list/

爽歪歪ES
今天
0
0
Spring Cloud Config-Git后端

EnvironmentRepository的默认实现使用Git后端,这对于管理升级和物理环境以及审核更改非常方便。要更改存储库的位置,可以在Config Server中设置“spring.cloud.config.server.git.uri”配置...

itcloud
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部