hadoop_streaming开发要点_提交作业jobconf常用配置

MapReduceeverything 发表了文章 • 0 个评论 • 1426 次浏览 • 2017-06-05 15:18 • 来自相关话题

Hadoop streaming是和hadoop一起发布的实用程序。它允许用户创建和执行使用任何程序或者脚本(例如: python,ruby,shell,php)编写的map或者reduce的mapreduce jobs。

# 脚本程序run.sh
[code]$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FI 查看全部


Hadoop streaming是和hadoop一起发布的实用程序。它允许用户创建和执行使用任何程序或者脚本(例如: python,ruby,shell,php)编写的map或者reduce的mapreduce jobs。


# 脚本程序run.sh
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py" \
-reducer "python reduce.py" \
-jobconf "mapred.reduce.tasks=2" \ # reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。
-file ./map.py \
-file ./reduce.py
input: 指定作业的输入文件的HDFS路径,支持使用*通配符,支持指定多个文件或目录,可多次使用

output: 指定作业的输出文件的HDFS路径,路径必须存在,执行作业用户必须有创建该目录的权限,只能使用一次

mapper: 用户自己写的mapper程序

reducer: 用户自己写的reduce程序

file: 允许用户设置task的文件和文件档案,类似的配置还有-cacheFile, -cacheArchive分别用于向计算节点分发HDFS文件和HDFS压缩文件
分发的文件有如下:
  • map和reduce的执行文件
  • map和reduce要用到的数据文件、配置文件


jobconf: 提交作业的一些配置属性
  • mapred.map.tasks:map task数目
  • mapred.reduce.tasks:reduce task数目
  • stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
  • num.key.fields.for.partition指定对key分出来的前几部分做partition而不是整个key

?
#?jobconf常用配置
?
mapred.job.name 作业名
mapred.job.priority 作业优先级
mapred.job.map.capacity 最多同时运行map任务数
mapred.job.reduce.capacity 最多同时运行reduce任务数
mapred.task.timeout 任务没有响应(输入输出)的最大时间
mapred.compress.map.output map的输出是否压缩
mapred.map.output.compression.codec map的输出压缩方式
mapred.output.compress reduce的输出是否压缩
mapred.output.compression.codec reduce的输出压缩方式
stream.map.output.field.separator map输出分隔符

python学习笔记——for循环

python基础25ma.cn 发表了文章 • 0 个评论 • 894 次浏览 • 2017-06-05 12:03 • 来自相关话题

大家对while循环已经有点熟悉了吧?今天我们来讲另一种循环语句:


for ... in ...
?
同while一样,for循环可以用来重复做一件事情。在某些场景下,它比while更好用。
比如之前的一道习题:输出1到100。
我们用while来做,需要有一 查看全部
大家对while循环已经有点熟悉了吧?今天我们来讲另一种循环语句:


for ... in ...
?
同while一样,for循环可以用来重复做一件事情。在某些场景下,它比while更好用。
比如之前的一道习题:输出1到100。
我们用while来做,需要有一个值来记录已经做了多少次,还需要在while后面判断是不是到了100。
如果用for循环,则可以这么写:


for i in range(1, 101):
print i

解释一下,range(1, 101)表示从1开始,到101为止(不包括101),取其中所有的整数。
for i in range(1, 101)就是说,把这些数,依次赋值给变量i。
相当于一个一个循环过去,第一次i = 1,第二次i = 2,……,直到i = 100。
当i = 101时跳出循环。
所以,当你需要一个循环10次的循环,你就只需要写:


for i in range(1, 11)


或者


for i in range(0, 10)

区别在于前者i是从1到10,后者i是从0到9。当然,你也可以不用i这个变量名。
比如一个循环n次的循环:


for count in range(0, n)
for循环的本质是对一个序列中的元素进行递归。什么是序列,以后再说。先记住这个最简单的形式:


for i in range(a, b)


从a循环至b-1


现在,你可以用for循环来打印0-9的随机数。、

for1.png


for2.png

?

python学习笔记—逻辑判断

python基础25ma.cn 发表了文章 • 0 个评论 • 879 次浏览 • 2017-06-05 11:36 • 来自相关话题

之前粗略地提到bool类型的变量,又说到if和while的判断条件。有些同学反馈说没怎么理解,为什么一会儿是bingo=False,一会又是bingo==False,一会儿是while在条件为True的时候执行,一会儿又是while在bingo==False的时候执行。别急,你听 查看全部
之前粗略地提到bool类型的变量,又说到if和while的判断条件。有些同学反馈说没怎么理解,为什么一会儿是bingo=False,一会又是bingo==False,一会儿是while在条件为True的时候执行,一会儿又是while在bingo==False的时候执行。别急,你听我说。
?
首先,要理解,一个逻辑表达式,其实最终是代表了一个bool类型的结果,比如:

1 < 3
这个就像当于是一个True的值

2 == 3
这个就是False


把它们作为判断条件放到if或者while的后面,就是根据他们的值来决定要不要执行。


同样的栗子再来几颗:

a = 1
print a>3 #False ?
print a==2-1 #True ?
b = 3
print a+b==2+2 #True


比较容易搞混的,是bool变量的值和一个逻辑表达式的值,比如:

a = False
print a #False
print a==False #True


虽然a本身的值是False,但是a==False这个表达式的值是True。(说人话!)“a”是错的,但“a是错的”这句话是对的。
?
回到上面那几个概念:

bingo=False
把bingo设为一个值为False的变量

bingo==False
判断bingo的值是不是False,如果是,那么这句话就是True


while在判断条件条件为True时执行循环,所以当bingo==False时,条件为True,循环是要执行的。


晕了没?谁刚学谁都晕。不晕的属于骨骼惊奇百年一遇的编程奇才,还不赶紧转行做程序员!


逻辑这东西是初学编程的一大坑,我们后面还要在这个坑里挣扎很久。
?
留个习题:a = True
b = not a #不记得not请回复6想想下面这些逻辑运算的结果,然后用print看看你想的对不对:bnot ba == ba != ba and ba or b1<2 and b==True

python学习笔记——变量(二)

python基础25ma.cn 发表了文章 • 0 个评论 • 893 次浏览 • 2017-06-02 10:33 • 来自相关话题

变量这东西,我们已经用过。有了变量,就可以存储和计算数据。今天来讲点变量的细节。


#==== 变量命名规则 ====#
变量名不是你想起就能起的:


第一个字符必须是字母或者下划线“_”

剩下的部分可以是字母、下划线“_” 查看全部
变量这东西,我们已经用过。有了变量,就可以存储和计算数据。今天来讲点变量的细节。


#==== 变量命名规则 ====#
变量名不是你想起就能起的:


第一个字符必须是字母或者下划线“_”

剩下的部分可以是字母、下划线“_”或数字(0-9)

变量名称是对大小写敏感的,myname和myName不是同一个变量。
几个有效的栗子:
i
__my_name
name_23
a1b2_c3


几个坏掉的栗子(想一下为什么不对):
2things
this is spaced out
my-name
?
#==== 变量的运算 ====#


我们前面有用到变量来存储数据: num = 10
answer = input()


也有用到变量来比较大小: answer < num


除此之外,变量还可以进行数学运算: a = 5 b = a + 3 c = a + b


python中运算的顺序是,先把“=”右边的结果算出了,再赋值给左边的变量。下面这个例子: a = 5 a = a + 3 print a
你会看到,输出了8,因为先计算出了右边的值为8,再把8赋给左边的a。
通过这种方法,可以实现累加求和的效果。它还有个简化的写法:
a += 3这个和a = a + 3是一样的。
?
于是,利用变量、循环、累加,可以写一个程序,来完成传说中高斯大牛在小时候做过的题:1+2+3+...+100=?从1加到100等于多少?


提示:你可以用一个变量记录现在加到几了,再用一个变量记录加出来的结果,通过while来判断是不是加到100了。

python学习笔记——random(生成随机数)

python基础25ma.cn 发表了文章 • 0 个评论 • 736 次浏览 • 2017-06-01 10:04 • 来自相关话题

之前我们用了很多次的print和input方法,它们的作用是实现控制台的输入和输出。除此之外,python还提供了很多模块,用来实现各种常见的功能,比如时间处理、科学计算、网络请求、随机数等等等等。今天我就来说说,如何用py 查看全部
之前我们用了很多次的print和input方法,它们的作用是实现控制台的输入和输出。除此之外,python还提供了很多模块,用来实现各种常见的功能,比如时间处理、科学计算、网络请求、随机数等等等等。今天我就来说说,如何用python自带的随机数模块,给我们的小游戏增加不确定性。
?
?
引入模块的方法:


from 模块名 import 方法名


看不懂没关系,这东西以后我们会反复用到。今天你只要记住,你想要产生一个随机的整数,就在程序的最开头写上:


from random import randint


之后你就可以用randint来产生随机数了。


还记得input后面的()吗,我们使用randint的时候后面也要有()。而且,还要在括号中提供两个数字,先后分别是产生随机整数范围的下限和上限。例如:


randint(5, 10)


这样将会产生一个5到10之间(包括5和10)的随机整数。


放到我们的小游戏里,用
answer = randint(1, 100)
替代
answer = 10


程序在运行时候,会产生一个1到100的随机整数,存在answer里,我们也不知道是多少,真的全靠猜了。
?
微信图片_20170601100229.jpg


?
?
好了,觉得还有点意思么?我们终于一步步把这个弱智小游戏给做出来了,有没有一丁点的成就感呢?


如果你对其中的某些细节还不是很理解,恭喜你,你已经开始入门了。相信你会带着一颗追求真相的心,在编程这条路上不断走下去。


我们的课程,也才刚刚开始。

python学习笔记——while循环

python基础25ma.cn 发表了文章 • 0 个评论 • 638 次浏览 • 2017-06-01 10:01 • 来自相关话题

先介绍一个新东西:注释。
python里,以“#”开头的文字都不会被认为是可执行的代码。
print "25ma.cn"

print "25ma.cn" #输出一行字
是同样的效果。但后者可以帮助开发者更好地理解代码。

在接下来的课程中,我会 查看全部
先介绍一个新东西:注释。
python里,以“#”开头的文字都不会被认为是可执行的代码。
print "25ma.cn"

print "25ma.cn" #输出一行字
是同样的效果。但后者可以帮助开发者更好地理解代码。

在接下来的课程中,我会经常用注释来解释代码。
用if改进完我们的小游戏后,功能已经基本实现了。很多同学做完后纷纷表示,每次只能猜一次,完了之后又得重新run,感觉好麻烦。能不能有办法让玩家一直猜,直到猜中为止?答案很显然,如果这种小问题都解决不了,那python可就弱爆了。


最简单的解决方法就是while。


同if一样,while也是一种控制流语句,另外它也被称作循环语句。继续来看渣画质手绘流程图:
?
微信图片_20170601095738.jpg


程序执行到while处,“当”条件为True时,就去执行while内部的代码,“当”条件为False时,就跳过。

语法为:

while 条件:
循环执行的语句


同if一样,注意冒号,注意缩进。


今天的栗子:


a = 1 #先a设为1
while a != 0: #a不等于0就一直做
print "please input"
a = input()
print "over"

想想怎么用while改进小游戏?有多种写法,大家自己思考下,我不多做说明了。下图给出一种方法。
?
?
微信图片_20170601095755.jpg


?
注意,这里出现了两层缩进,要保持每层缩进的空格数相同。
到此为止,小游戏已经基本成型了。不过好像还差一点:每次自己都知道答案,这玩起来有神马意思。
明天来讲,怎么让你不知道电脑的答案。

类似这种的vim配置文件

Vim25ma.cn 回复了问题 • 2 人关注 • 1 个回复 • 692 次浏览 • 2017-06-01 09:35 • 来自相关话题

python学习笔记—if

python基础25ma.cn 发表了文章 • 0 个评论 • 625 次浏览 • 2017-05-31 10:47 • 来自相关话题

我们已经能让判断我们输入的值了,但这程序还是有点呆,不过怎样都要把话说三遍。因为到目前为止,我们的程序都是按照顺序从上到下一行接一行地执行。有同学发来问题了:怎么能让它根据我们输入的结果来选择执行呢? 查看全部
我们已经能让判断我们输入的值了,但这程序还是有点呆,不过怎样都要把话说三遍。因为到目前为止,我们的程序都是按照顺序从上到下一行接一行地执行。有同学发来问题了:怎么能让它根据我们输入的结果来选择执行呢?答案就是 – if
来看一张图(纯手绘,渣画质)


解释一下,程序顺序往下执行遇到if语句的时候,会去判断它所带条件的真假。

“如果”为True,就会去执行接下来的内容。“如果”为False,就跳过。


语法为:

if 条件:
选择执行的语句

特别说明:条件后面的冒号不能少,同样必须是英文字符。
特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格。python用这种方法替代了其他很多编程语言中的{}。你也可以选择1/2/3...个空格或者按一下tab键,但必须整个文件中都统一起来。千万不可以tab和空格混用,不然就会出现各种莫名其妙的错误。所以建议都直接用4个空格。


上栗子:

0531.png



thisIsLove = input()
if thisIsLove:
print "再转身就该勇敢留下来"


试试看?输入True,就会得到回答。输入False,什么也没有。(如果你那里输出中文有问题,请自行改成英文)
?
所以,我们的游戏可以这样改写:


num = 10
print 'Guess what I think?'
answer = input()
if answer<num:
print 'too small!'

if answer>num:
print 'too big!'
if answer==num:
print 'BINGO!'



if在编程语言中被称为“控制流语句”,用来控制程序的执行顺序。还有其他的控制流语句,后面我们会用到。
?
?
?
重新发一下代码

thisIsLove = input()
if thisIsLove:
print "25ma.cn是大数据免费的学习交流平台"

========

num = 10
print 'Guess what I think?'
answer = input()
if answer<num:
print 'too small!'
if answer>num:
print 'too big!'
if answer==num:
print 'BINGO!'

python学习笔记—bool

python基础25ma.cn 发表了文章 • 0 个评论 • 612 次浏览 • 2017-05-31 10:42 • 来自相关话题

昨天说到了python中的几个基本类型,字符串、整数、浮点数都还算好理解,关于剩下的那个bool(布尔值)我要稍微多说几句。


逻辑判断在编程中是非常重要的。大量的复杂程序在根本上都是建立在“真”与“假”的基本逻辑 查看全部
昨天说到了python中的几个基本类型,字符串、整数、浮点数都还算好理解,关于剩下的那个bool(布尔值)我要稍微多说几句。


逻辑判断在编程中是非常重要的。大量的复杂程序在根本上都是建立在“真”与“假”的基本逻辑之上。而bool所表示的就是这种最单纯最本质的True / Flase,真与假,是与非。
?
来看下面的例子: ?


a = 1 < 3
print a
b = 1
c = 3
print b > c


通过用“>”“<”来比较两个数值,我们就得到了一个bool值。这个bool值的真假取决于比较的结果。


“>”“<”在编程语言中被成为逻辑运算符,常用的逻辑运算符包括:


>:大于
<:小于
>=:大于等于
<=:小于等于
==:等于。比较两个值是否相等。之所以用两个等号,是为了和变量赋值区分开来。
!=:不等与
not:逻辑“非”。如果x为True,则not x为False
and:逻辑“与”。如果x为True,且y为True,则x and y为True
or:逻辑“或”。如果x、y中至少有一个为True,则x or y为True


关于bool值和逻辑运算其实远不止这些,但现在我们暂时不去考虑那么多,以免被绕得找不到北。最基本的大于、小于、等于已经够我们先用一用的了。
?
试试把bool加到我们的小游戏里:


num = 10
print 'Guess what I think?'
answer = input()


result = answer<num
print 'too small?'
print result


result = answer>num
print 'too big?'
print result


result = answer==num
print 'equal?'
print result


代码比之前稍微多了一点,解释一下。
第一段代码:先创建一个值为10的变量num,输出一句提示,然后再输入一个值给变量answer。
第二段代码:计算answer<num的结果,记录在result里,输出提示,再输出结果。
第三段、第四段都与第二段类似,只是比较的内容不一样。


看看结果是不是跟你预期的一致?虽然看上去还是有点傻,但是离目标又进了一步。


现在数数你手上的工具:输入、输出,用来记录数值的变量,还有可以比较数值大小的逻辑运算。用它们在你的python里折腾一番吧。

python学习笔记—变量

python基础25ma.cn 发表了文章 • 0 个评论 • 552 次浏览 • 2017-05-26 09:32 • 来自相关话题

变量,望文生义,就是变化的量。python里创建一个变量的方法很简单,给它起个名字,然后给它一个值。举起几个栗子:


name = '25ma.cn'
myVar = 123
price = 5.99
visible = True


“=”的作用是把右边的值赋予给左边的变量。
?

这里说一下 查看全部
变量,望文生义,就是变化的量。python里创建一个变量的方法很简单,给它起个名字,然后给它一个值。举起几个栗子:


name = '25ma.cn'
myVar = 123
price = 5.99
visible = True


“=”的作用是把右边的值赋予给左边的变量。
?

这里说一下另外一个概念,叫做“数据类型”,上面4颗栗子分别代表了python中较常见的四种基本类型:




字符串 - 表示一串字符,需要用''或""引起来

整数

浮点数 - 就是小数

bool(布尔) - 这个比较特殊,是用来表示逻辑“是”“非”的一种类型,它只有两个值,True和False。(注意这里没有引号,有了引号就变成字符串了)


再次用到我们熟悉的print。这次,我们升级了,要用print输出一个“变量”:


name = ‘25ma.cn’
print name

bl.png



看到结果了吗?没有输出“name”,也没有报错,而是输出了'25ma.cn'。现在是不是能想明白一些,为什么之前print一段文字没加引号就会报错,而print一个数字就没有问题呢?


它叫变量,那就是能变的。所以在一次“赋值”操作之后,还可以继续给它赋予新的值,而且可以是不同类型的值。


a = 123
print a
a = 'hi'
print a


“=”的右边还可以更复杂一点,比如是一个计算出的值:


value = 3 * 4
print value
value = 2 < 5
print value


甚至,也可以是input():


name = input()
print name
?
于是,我们又可以进化一下我们的小游戏了。把上次写的内容稍微改一下,加上变量:?

print "Who do you think I am?"
you = input()
print "Oh, yes! I am a"
print you

看来程序已经知道我们的输入了。接下来,就要让它学会对不同的答案做出判断。这个我们留到下次再说。