使用dumbo开发hadoop streaming程序

1. dumbo的官网:https://github.com/klbostee/dumbo/

wiki: https://github.com/klbostee/dumbo/wiki

2. 安装配置

详见wiki:https://github.com/klbostee/dumbo/wiki/Building-and-installing

解压从网站下载下来的源码到dumbo文件夹,执行如下命令就可以了

2 python ez_setup.py dumbo

3. 例子程序

使用dumbo开发程序来统计apache的访问日志中最多的几个ip地址

apache日志格式如下:

1 [admin@search011 dumbotest]$ head -n3 access.log
2 10.0.0.1 - - [02/Nov/2010:10:15:52 +0800] "GET /index/Back/task_updator.php?taskid=22870&sub_taskid=15&runhost=localhost&status=OK HTTP/1.0" 200 3 "-" "Wget/1.10.2 (Red Hat modified)"
3 10.0.0.3 - - [02/Nov/2010:10:15:52 +0800] "GET /index/Back/task_updator.php?taskid=22870&sub_taskid=17&runhost=localhost&status=OK HTTP/1.0" 200 3 "-" "Wget/1.10.2 (Red Hat modified)"
4 10.0.0.1 - - [02/Nov/2010:10:15:53 +0800] "GET /index/Back/task_updator.php?taskid=22870&sub_taskid=9&runhost=localhost&status=OK HTTP/1.0" 200 3 "-" "Wget/1.10.2 (Red Hat modified)"

ipcount.py程序如下:

1 #!/bin/env python
2  
3 def mapper(key, value):
4     yield value.split(" ")[0], 1
5  
6 def reducer(key, values):
7     yield key, sum(values)
8  
9 if __name__ == "__main__":
10     import dumbo
11     dumbo.run(mapper, reducer, combiner=reducer)

运行:

1 cut -d ' ' -f 1 access.log | sort uniq -c | sort -nr | head -n 5

可以看到在本机上执行的结果。

在hadoop上运行:

1 dumbo start ipcount.py -hadoop /home/admin/hadoop -libjar /home/admin/hadoop/contrib/streaming/hadoop-streaming-0.20.2-CDH3B4.jar  -input /admin/input -output /admin/output
1 就可以提交job看到运行结果了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们要设计一个动物园的系统,其中有多种动物,每种动物都有自己的属性和行为。我们可以设计一个Animal类作为基类,然后派生出不同的子类,如Lion、Tiger、Elephant等。同时,我们还可以设计一个Zoo类,将不同的动物组合在一起,形成一个完整的动物园。 下面是一个简单的示例代码: ```python class Animal: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def eat(self): print(f"{self.name} is eating.") def sleep(self): print(f"{self.name} is sleeping.") class Lion(Animal): def roar(self): print(f"{self.name} is roaring.") class Tiger(Animal): def swim(self): print(f"{self.name} is swimming.") class Elephant(Animal): def trumpet(self): print(f"{self.name} is trumpeting.") class Zoo: def __init__(self): self.animals = [] def add_animal(self, animal): self.animals.append(animal) def show_animals(self): for animal in self.animals: print(f"{animal.name} ({animal.age} years old, {animal.gender})") # 创建动物实例 lion = Lion("Simba", 5, "male") tiger = Tiger("Tony", 3, "female") elephant = Elephant("Dumbo", 10, "male") # 调用动物方法 lion.eat() tiger.swim() elephant.sleep() # 创建动物园实例 zoo = Zoo() # 添加动物到动物园 zoo.add_animal(lion) zoo.add_animal(tiger) zoo.add_animal(elephant) # 显示动物园中的动物 zoo.show_animals() ``` 输出结果: ``` Simba is eating. Tony is swimming. Dumbo is sleeping. Simba (5 years old, male) Tony (3 years old, female) Dumbo (10 years old, male) ``` 在上面的示例中,Animal类是基类,Lion、Tiger、Elephant类是派生类,它们继承了Animal类的属性和方法。Zoo类是组合类,它将不同的动物组合在一起,形成一个完整的动物园。我们可以通过调用动物的方法来展示它们的行为,也可以通过动物园的方法来展示它们的属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值