本文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文字的更多相关文章

  1. MapReduce 规划 系列十 采用HashPartitioner调整Reducer计算负荷

    example4它演示了如何指定Reducer号码,本节演示如何使用HashPartitioner将Mapper根据该输出key分组后Reducer为了应对. 合理的分组策略会尽一切Reducer不能 ...

  2. 大数据系列(2)——Hadoop集群坏境CentOS安装

    前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...

  3. Hadoop Streaming框架学习2

    Hadoop Streaming框架学习(二) 1.常用Streaming命令介绍 使用下面的命令运行Streaming MapReduce程序: 1: $HADOOP_HOME/bin/hadoop ...

  4. Hadoop Streaming框架学习(一)

    Hadoop Streaming框架学习(一) Hadoop Streaming框架学习(一) 2013-08-19 12:32 by ATP_, 473 阅读, 3 评论, 收藏, 编辑 1.Had ...

  5. Hadoop Streaming框架学习(二)

    1.常用Streaming命令介绍 使用下面的命令运行Streaming MapReduce程序: 1: $HADOOP_HOME/bin/hadoop/hadoop streaming args 其 ...

  6. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  7. hadoop streaming 多路输出 [转载]

    转载 http://www.cnblogs.com/shapherd/archive/2012/12/21/2827860.html hadoop 支持reduce多路输出的功能,一个reduce可以 ...

  8. Hadoop Streaming框架使用(一)

      Streaming简介 link:http://www.cnblogs.com/luchen927/archive/2012/01/16/2323448.html Streaming框架允许任何程 ...

  9. Hadoop Streaming例子(python)

    以前总是用java写一些MapReduce程序现举一个例子使用Python通过Hadoop Streaming来实现Mapreduce. 任务描述: HDFS上有两个目录/a和/b,里面数据均有3列, ...

随机推荐

  1. robot framework 使用四:分层设计和截图以及注意事项

    再说一下眼下的主要环境信息和版本号: 操作系统:win7 64位 python版本号:2.7.6 RIDE版本号:1.2.3 selenium2library:1.5.0 selenium:2.40. ...

  2. 从PCI上读取数据 线程和定时器效率

    从PCI上读取数据 线程和定时器效率 线程: mythread=AfxBeginThread(StartContinuous,(LPVOID)1,THREAD_PRIORITY_NORMAL,0,CR ...

  3. uva103(最长递增序列,dag上的最长路)

    题目的意思是给定k个盒子,每个盒子的维度有n dimension 问最多有多少个盒子能够依次嵌套 但是这个嵌套的规则有点特殊,两个盒子,D = (d1,d2,...dn) ,E = (e1,e2... ...

  4. 转载:ecshop自定义销量

    转自:http://www.phpally.com/ecshop%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%80%E9%87%8F/ 本补丁以假乱真,对网站销售有一定帮助,计算 ...

  5. GUI & Event例子

    Student No.: _______________ Name: ________________________________________1TK2934 Object-Oriented P ...

  6. PHP图像处理:3D图纸、缩放、回转、剪下、水印(三)

    来源:http://www.ido321.com/887.html 5.PHP对图像的旋转 1: <div> 2: <h4>旋转之前</h4> 3: <img ...

  7. Oracle Hints详细解释

    特别介绍给大家Oracle Hints之前,让我们知道下Oracle Hints什么,然后好Oracle Hints,我们希望实际.基于成本的优化器是很聪明,在大多数情况下,将选择正确的优化,减少DB ...

  8. CentOS下tmux安装与使用

    tmux介绍: tmux它是BSDScreen替代品,相对于Screen,它更加先进:支持屏幕切分,并且具备丰富的命令行參数,使其能够灵活.动态的进行各种布局和操作.它能够做到一条命令就启动起来(强大 ...

  9. iOS 获取联系人,并调用系统地址簿UI

    1.加入 AddressBook库 推断授权状态 -(bool)checkAddressBookAuthorizationStatus { //取得授权状态 ABAuthorizationStatus ...

  10. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...