大数据Hadoop Streaming编程实战之C++、Php、Python

Streaming框架允许任何程序语言实现的程序在HadoopMapReduce中使用,方便已有程序向Hadoop平台移植。因此可以说对于hadoop的扩展性意义重大。接下来我们分别使用C++、Php、Python语言实现HadoopWordCount。

  实战一:C++语言实现Wordcount

  代码实现:

  1)C++语言实现WordCount中的Mapper,文件命名为mapper.cpp,以下是详细代码

  #include

  #include

  #include

  usingnamespacestd;

  intmain{

  stringkey;

  stringvalue="1";

  while(cin>>key){

  cout<}

  return0;

  }

  2)C++语言实现WordCount中的Reducer,文件命名为reducer.cpp,以下是详细代码

  #include

  #include

  #include

  #include

  usingnamespacestd;

  intmain{

  stringkey;

  stringvalue;

  mapword2count;

  map::iteratorit;

  while(cin>>key){

  cin>>value;

  it=word2count.find(key);

  if(it!=word2count.end){

  (it->second)++;

  }

  else{

  word2count.insert(make_pair(key,1));

  }

  }

  for(it=word2count.begin;it!=word2count.end;++it){

  cout}

  return0;

  }

  测试运行C++实现Wordcount的具体步骤

  1)在线安装C++

  在Linux环境下,如果没有安装C++,需要我们在线安装C++

  yum-yinstallgcc-c++

  2)对c++文件编译,生成可执行文件

  我们通过以下命令将C++程序编译成可执行文件,然后才能够运行

  g++-omappermapper.cpp

  g++-oreducerreducer.cpp

  3)本地测试

  集群运行C++版本的WordCount之前,首先要在Linux本地测试运行,调试成功,确保程序在集群中正常运行,测试运行命令如下:

  catdjt.txt|./mapper|sort|./reducer

  4)集群运行

  切换到hadoop安装目录下,提交C++版本的WordCount作业,进行单词统计。

  hadoopjar/usr/java/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

  -Dmapred.reduce.tasks=2

  -mapper"./mapper"

  -reducer"./reducer"

  -filemapper

  -filereducer

  -input/dajiangtai/djt.txt

  -output/dajiangtai/out

  如果最终出现想要的结果,说明C++语言成功实现Wordcount

  实战二:Php语言实现Wordcount

  代码实现:

  1)Php语言实现WordCount中的Mapper,文件命名为wc_mapper.php,以下是详细代码

  #!/usr/bin/php

  error_reporting(E_ALL^E_NOTICE);

  $word2count=array;

  while(($line=fgets(STDIN))!==false){

  $line=trim($line);

  $words=preg_split(‘/\W/‘,$line,0,PREG_SPLIT_NO_EMPTY);

  foreach($wordsas$word){

  echo$word,chr(9),"1",PHP_EOL;

  }

  }

  ?>

  2)Php语言实现WordCount中的Reducer,文件命名为wc_reducer.php,以下是详细代码

  #!/usr/bin/php

  error_reporting(E_ALL^E_NOTICE);

  $word2count=array;

  while(($line=fgets(STDIN))!==false){

  $line=trim($line);

  list($word,$count)=explode(chr(9),$line);

  $count=intval($count);

  $word2count[$word]+=$count;

  }

  foreach($word2countas$word=>$count){

  echo$word,chr(9),$count,PHP_EOL;

  }

  ?>

  测试运行Php实现Wordcount的具体步骤

  1)在线安装Php

  在Linux环境下,如果没有安装Php,需要我们在线安装Php环境

  yum-yinstallphp

  2)本地测试

  集群运行Php版本的WordCount之前,首先要在Linux本地测试运行,调试成功,确保程序在集群中正常运行,测试运行命令如下:

  catdjt.txt|phpwc_mapper.php|sort|phpwc_reducer.php

  3)集群运行

  切换到hadoop安装目录下,提交Php版本的WordCount作业,进行单词统计。

  hadoopjar/usr/java/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

  -Dmapred.reduce.tasks=2

  -mapper"phpwc_mapper.php"

  -reducer"phpwc_reducer.php"

  -filewc_mapper.php

  -filewc_reducer.php

  -input/dajiangtai/djt.txt

  -output/dajiangtai/out

  如果最终出现想要的结果,说明Php语言成功实现Wordcount

  实战三:Python语言实现Wordcount

  代码实现:

  1)Python语言实现WordCount中的Mapper,文件命名为Mapper.py,以下是详细代码

  #!/usr/java/hadoop/envpython

  importsys

  word2count={}

  forlineinsys.stdin:

  line=line.strip

  words=filter(lambdaword:word,line.split)

  forwordinwords:

  print‘%s\t%s‘%(word,1)

  2)Python语言实现WordCount中的Reducer,文件命名为Reducer.py,以下是详细代码

  #!/usr/java/hadoop/envpython

  fromoperatorimportitemgetter

  importsys

  word2count={}

  forlineinsys.stdin:

  line=line.strip

  word,count=line.split

  try:

  count=int(count)

  word2count[word]=word2count.get(word,0)+count

  exceptValueError:

  pass

  sorted_word2count=sorted(word2count.items,key=itemgetter(0))

  forword,countinsorted_word2count:

  print‘%s\t%s‘%(word,count)

  测试运行Python实现Wordcount的具体步骤

  1)在线安装Python

  在Linux环境下,如果没有安装Python,需要我们在线安装Python环境

  yum-yinstallpython27

  2)本地测试

  集群运行Python版本的WordCount之前,首先要在Linux本地测试运行,调试成功,确保程序在集群中正常运行,测试运行命令如下:

  catdjt.txt|pythonMapper.py|sort|pythonReducer.py

  3)集群运行

  切换到hadoop安装目录下,提交Python版本的WordCount作业,进行单词统计。

  hadoopjar/usr/java/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

  -Dmapred.reduce.tasks=2

  -mapper"pythonMapper.py"

  -reducer"pythonReducer.py"

  -fileMapper.py

  -fileReducer.py

  -input/dajiangtai/djt.txt

  -output/dajiangtai/out

  如果最终出现想要的结果,说明Python语言成功实现Wordcount

原文地址:http://blog.51cto.com/13201210/2093784

时间: 2024-11-05 19:43:08

大数据Hadoop Streaming编程实战之C++、Php、Python的相关文章

基于Hadoop2.0、YARN技术的大数据高阶应用实战(Hadoop2.0\YARN\Ma

Hadoop的前景 随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发人员并不多,直接导致了这几年hadoop技术的薪水远高于JavaEE及 Android程序员. Hadoop入门薪资已经达到了8K以上,工作1年可达到1.2W以上,具有2-3年工作经验的hadoop人才年薪可以达到30万—50万. 一般需要大数据处理的公司基本上都是大公司,所以学

成都大数据Hadoop与Spark技术培训班

成都大数据Hadoop与Spark技术培训班 中国信息化培训中心特推出了大数据技术架构及应用实战课程培训班,通过专业的大数据Hadoop与Spark技术架构体系与业界真实案例来全面提升大数据工程师.开发设计人员的工作水平,旨在培养专业的大数据Hadoop与Spark技术架构专家,更好地服务于各个行业的大数据项目开发和落地实施. 2015年近期公开课安排:(全国巡回开班) 08月21日——08月23日大连 09月23日——09月25日北京 10月16日——10月18日成都 11月27日——11月2

在云计算资源池上自动部署业务应用的大数据平台组件开发实战

在云计算提供的分布式资源池构建能够自动部署业务应用的平台组件,该平台组件能够非常简易的被众多的并发终端使用,从而轻而易举的提供业务支持: 尤其是值得注意的是,如果有需要的话,我们的不同业务组件和业务本身可以发生数据和资源的共享,这对于资源和数据的复用,尤其是对于效率的提升是至关重要的.         课程介绍   基于“在资源池上自动部署业务应用的平台组件”的要求,课程包含Spark的架构设计.Spark编程模型.Spark内核框架源码剖析.Spark的广播变量与累加器.Shark的原理和使用

学大数据需要什么编程基础?大数据学习步骤是什么?

学大数据需要什么编程基础?大数据学习步骤是什么? 大数据是什么? 有很多朋友问过我,大数据到底是什么?一句话来- 学大数据需要什么编程基础?大数据学习步骤是什么?大数据是什么? 有很多朋友问过我,大数据到底是什么?一句话来概括 针对非软件行业的朋友 根据你平时在超市,加油站,饭店等地方的一些消费行为,通过大数据这个技术,我们可以知道你现在的年龄范围,是否婚配,是否有孩子,孩子大致是几岁,是否有固定住宅,车大致是什么价位的等信息. 针对软件行业的朋友 平时我们写的程序都是在一台机器上运行,处理能力

Hadoop Streaming 编程

1.概述 Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如: 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer) $HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar \ -input myInputDirs \ -outpu

王家林的云计算分布式大数据Hadoop企业级开发动手实践

一:课程简介: Hadoop是云计算分布式大数据的事实标准软件框架,Hadoop中的架构实现是整个云计算产业技术的基础,作为与Google三大核心技术DFS.MapReduce.BigTable相对的HDFS.MapReduce.和HBase也是整个Hadoop生态系统的核心的技术,本课程致力于帮您掌握这三大技术的同时掌握云计算的数据仓库挖掘技术Hive,助您在云计算技术时代自由翱翔. 二:课程特色 1,      深入浅出中动手实作: 2,      掌握Hadoop三大核心:HDFS.Map

大数据Hadoop最佳实践(V3)

一:课程简介: Hadoop是当下云计算大数据的王者. Hadoop不仅是一个大数据的计算框架,同时也是大数据的存储平台. 使用Hadoop,用户可以在不了解分布式底层细节的情况下开发出分布式程序,从而可以使用众多廉价的计算设备的集群的威力来高速的运算和存储,而且Hadoop的运算和存储是可靠的.高效的.可伸缩的,能够使用普通的社区服务器出来PB级别的数据,是分布式大数据处理的存储的理想选择 使用Hadoop可以主要完成: 1,构建离线处理平台,完成海量离线数据的存储分析,相对于传统的关系型数据

王家林的云计算分布式大数据Hadoop征服之旅:HDFS&amp;MapReduce&amp;HBase&amp;Hive&amp;集群管理

一:课程简介: 作为云计算实现规范和实施标准的Hadoop恰逢其时的应运而生,使用Hadoop用户可以在不了解分布式底层细节的情况下开发出分布式程序,从而可以使用众多廉价的计算设备的集群的威力来高速的运算和存储,而且Hadoop的运算和存储是可靠的.高效,的.可伸缩的,能够使用普通的社区服务器出来PB级别的数据,是分布式大数据处理的存储的理想选择. 本课程会助你深入浅出的掌握Hadoop开发(包括HDFS.MapReduce.HBase.Hive等),并且在此基础上掌握Hadoop集群的配置.维

汪大神Java多线程编程实战

课程目录:├─1│  ├─Java并发编程.png│  ├─源码+ppt.rar│  ├─高并发编程第一阶段01讲.课程大纲及主要内容介绍.wmv│  ├─高并发编程第一阶段02讲.简单介绍什么是线程.wmv│  ├─高并发编程第一阶段03讲.创建并启动线程.mp4│  ├─高并发编程第一阶段04讲.线程生命周期以及start方法源码剖析.mp4│  ├─高并发编程第一阶段05讲.采用多线程方式模拟银行排队叫号.mp4│  ├─高并发编程第一阶段06讲.用Runnable接口将线程的逻辑执行单元