博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用python开发hadoop streaming程序及hadoop python网页抓取例子
阅读量:7235 次
发布时间:2019-06-29

本文共 2251 字,大约阅读时间需要 7 分钟。

Hadoop streaming是Hadoop的一个工具,它帮助用户创建和运行一类特殊的map/reduce作业,这些特殊的map/reduce作业是由一些可执行文件或脚本文件充当mapper或者reducer。通过streaming工具,程序员可以使用c++, python, perl, ruby等语言来开发map/reduce任务。

如何用python开发hadoop程序,hadoop源代码中提供了一个统计词频的例子WordCount.py,不过这个例子程序是将Python代码通过Jython运行时转换为jar包。然后通过streaming的方式运行这个jar包,稍显麻烦。

德国的开发者Michael G. Noll提供了:通过STDIN标准输入和STDOUT标准输在Map和Reduce代码之间传输数据。Python的sys.stdin方法读取输入数据,并通过sys.stdout打印输出数据,而数据的交互处理过程交由Hadoop Streaming来处理。

一个用python写的典型的hadoop streaming例子程序如下,该程序就是抓取网页的标题:

     mapper.py

#!/usr/bin/env python
 
import
sys, urllib, re
 
title_re
=
re.
compile
(
"<title>(.*?)</title>"
, re.MULTILINE | re.DOTALL | re.IGNORECASE)
 
for
line
in
sys.stdin:
    
url
=
line.strip()
    
match
=
title_re.search(urllib.urlopen(url).read())
    
if
match:
        
print
"mapper"
, url,
"\t"
, match.group(
1
).strip()

reducer.py

#!/usr/bin/env python
 
from
operator
import
itemgetter
 
import
sys
 
for
line
in
sys.stdin:
    
line
=
line.strip()
    
print
"reducer "
+
line

可以先运行以下命令来验证这个程序是否正确:

[admin@search011 url]$ cat url
http:
/
/
www.
163.com
http:
/
/
www.sina.com
http:
/
/
www.baidu.com
[admin@search011 url]$ cat url | .
/
mapper.py | .
/
reducer.py
reducer mapper http:
/
/
www.
163.com      
网易
reducer mapper http:
/
/
www.sina.com      新浪首页
reducer mapper http:
/
/
www.baidu.com     百度一下,你就知道

用hadoop streaming的方式提交job:

#!/bin/sh
 
hadoop fs
-
rmr
/
test
/
output
 
hadoop jar ~
/
hadoop
/
contrib
/
streaming
/
hadoop
-
0.20
.
2
-
streaming.jar \
           
-
mapper mapper.py \
           
-
file
mapper.py \
           
-
reducer reducer.py \
           
-
file
reducer.py \
           
-
input
/
test
/
input
\
           
-
output
/
test
/
output \
           
-
jobconf mapred.
reduce
.tasks
=
3
\
           
-
jobconf mapred.job.name
=
"my crawl job"
            
hadoop fs
-
ls
/
test
/
output
/
hadoop fs
-
cat
/
test
/
output
/
*

直接用python语言开发hadoop程序有时候显得不够灵活,比如mapper.py和reducer.py程序必须放在两个文件中。 于是国外有人用python对hadoop API进行了封转。著名的音乐站点Last.fm发布了基于Python的(小飞象)项目,Dumbo能够帮助Python开发者更方便的编写Hadoop应用,并且Dumbo为MapReduce应用提供了灵活易用的Python API。Last.fm的开发者,同时也是Dumbo项目发起人Klaas Bosteels 认为,“对于定制Hadoop应用,使用Python语言代替Java会让工作变得更有效率”。

另外一个相似的项目,则为Jython开发者使用Hadoop框架提供了便利。Happy框架封装了Hadoop的复杂调用过程,让Map-Reduce开发变得更为容易。Happy中的Map-Reduce作业过程在子类happy.HappyJob中定义,当用户创建类实例后,设置作业任务的输入输出参数,然后调用run()方法即可启动分治规约处理,此时,Happy框架将序列化用户的作业实例,并将任务及相应依赖库拷贝到Hadoop集群执行。目前,Happy框架已被数据集成站点freebase.com采纳,用于进行站点的数据挖掘与分析工作。

(参考:)

转载地址:http://bilfm.baihongyu.com/

你可能感兴趣的文章
如何下载、安装eclipse
查看>>
流计算框架 Flink 与 Storm 的性能对比
查看>>
JavaScript数据类型AND深拷贝和浅拷贝的不归路
查看>>
iOS逆向之旅(进阶篇) — HOOK(FishHook)
查看>>
Gradle 3.0.0设置Apk文件输出命名
查看>>
mac 使用php storm的基本配置
查看>>
装饰者模式
查看>>
集成计算引擎在大型企业绩效考核系统的应用方案
查看>>
150. Evaluate Reverse Polish Notation
查看>>
SpringBoot 实战 (十一) | 整合数据缓存 Cache
查看>>
css实现三栏布局的几种方法及优缺点
查看>>
proxychains是怎么工作的
查看>>
React16性能改善的原理一
查看>>
网页水印SDK的实现
查看>>
js的观察者模式
查看>>
函数柯里化
查看>>
手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法...
查看>>
Flex 布局教程
查看>>
固定宽度布局开发WebApp如何实现多终端下自适应?
查看>>
伟大的Scrum团队的特征
查看>>