hadoop streaming anaconda python 计算平均值

原始Liunx 的python版本不带numpy ,安装了anaconda 之后,使用hadoop streaming 时无法调用anaconda python  ,

后来发现是参数没设置好。。。

进入正题:

环境:

4台服务器:master slave1  slave2  slave3。

全部安装anaconda2与anaconda3, 主环境py2 。anaconda2与anaconda3共存见:Ubuntu16.04 Liunx下同时安装Anaconda2与Anaconda3

安装目录:/home/orient/anaconda2

Hadoop 版本2.4.0

数据准备:

inputFile.txt 一共100个数字   全部数据 下载:

0.970413
0.901817
0.828698
0.197744
0.466887
0.962147
0.187294
0.388509
0.243889
0.115732
0.616292
0.713436
0.761446
0.944123
0.200903

编写mrMeanMapper.py

 1 #!/usr/bin/env python
 2 import sys
 3 from numpy import mat, mean, power
 4
 5 def read_input(file):
 6     for line in file:
 7         yield line.rstrip()
 8
 9 input = read_input(sys.stdin)#creates a list of input lines
10 input = [float(line) for line in input] #overwrite with floats
11 numInputs = len(input)
12 input = mat(input)
13 sqInput = power(input,2)
14
15 #output size, mean, mean(square values)
16 print "%d\t%f\t%f" % (numInputs, mean(input), mean(sqInput)) #calc mean of columns
17 print >> sys.stderr, "report: still alive" 

编写mrMeanReducer.py

 1 #!/usr/bin/env python
 2 import sys
 3 from numpy import mat, mean, power
 4
 5 def read_input(file):
 6     for line in file:
 7         yield line.rstrip()
 8
 9 input = read_input(sys.stdin)#creates a list of input lines
10
11 #split input lines into separate items and store in list of lists
12 mapperOut = [line.split(‘\t‘) for line in input]
13
14 #accumulate total number of samples, overall sum and overall sum sq
15 cumVal=0.0
16 cumSumSq=0.0
17 cumN=0.0
18 for instance in mapperOut:
19     nj = float(instance[0])
20     cumN += nj
21     cumVal += nj*float(instance[1])
22     cumSumSq += nj*float(instance[2])
23
24 #calculate means
25 mean = cumVal/cumN
26 meanSq = cumSumSq/cumN
27
28 #output size, mean, mean(square values)
29 print "%d\t%f\t%f" % (cumN, mean, meanSq)
30 print >> sys.stderr, "report: still alive"

本地测试mrMeanMapper.py   ,mrMeanReducer.py

cat inputFile.txt |python mrMeanMapper.py |python mrMeanReducer.py 

我把 inputFile.txt,mrMeanMapper.py   ,mrMeanReducer.py都放在了同一目录下 ~/zhangle/Ch15/hh/hh

所有的操作也都是这此目录下!!!

将inputFile.txt上传到hdfs

zhangle/mrmean-i 是HDFS上的目录
hadoop fs -put inputFile.txt zhangle/mrmean-i

运行Hadoop streaming

1 hadoop jar /usr/programs/hadoop-2.4.0/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar  2 -input zhangle/mrmean-i 3 -output zhangle/output12222 4 -file mrMeanMapper.py 5 -file mrMeanReducer.py 6 -mapper "/home/orient/anaconda2/bin/python mrMeanMapper.py" 7 -reducer "/home/orient/anaconda2/bin/python mrMeanReducer.py"

参数解释:

第一行:/usr/programs/hadoop-2.4.0/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar   是我Hadoop streaming 所在的目录

第二行:  zhangle/mrmean-i  是刚才将inputFile.txt 上传的目录

第三行:zhangle/mrmean-out12222 是结果输出目录,也是在HDFS上

第四行: mrMeanMapper.py是当前目录下的mapper程序

第五行: mrMeanRdeducer.py是当前目录下的reducer程序

第六行:  /home/orient/anaconda2/bin/python  是anaconda2目录下的python ,如果去掉,会直接调用自带的python,自带python没有安装numpy等python包。!!

第七行: 同第六行。

查看运行结果:

 hadoop fs -cat zhangle/output12222/part-00000

问题解决

1. 出现“Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1”的错误

解决方法:

在hadoop上实施MapReduce之前,一定要在本地运行一下你的python程序,看

  • 首先进入包含map和reduce两个py脚本文件和数据文件inputFile.txt的文件夹中。然后输入一下命令,看是否执行通过:
  • cat inputFile.txt |python mrMeanMapper.py |python mrMeanReducer.py

2.出现错误:“Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 2”,或者出现jar文件找不到的情况,或者出现输出文件夹已经存在的情况。

  • Mapper.py和Reduce.py的最前面要加上:#!/usr/bin/env python 这条语句
  • 在Hadoop Streaming命令中,请确保按以下的格式来输入
  • 1 hadoop jar /usr/programs/hadoop-2.4.0/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar  2 -input zhangle/mrmean-i 3 -output zhangle/output12222 4 -file mrMeanMapper.py 5 -file mrMeanReducer.py 6 -mapper "/home/orient/anaconda2/bin/python mrMeanMapper.py" 7 -reducer "/home/orient/anaconda2/bin/python mrMeanReducer.py"
  • 要确保jar文件的路径正确,hadoop 2.4版本的该文件是保存在:$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar中,不同的hadoop版本可能略有不同HDFS中的输出文件夹(这里是HDFS下的/user/hadoop/mr-ouput13),一定要是一个新的(之前不存在)的文件夹,因为即使上条Hadoop Streaming命令没有执行成功,仍然会根据你的命令来创建输出文件夹,而后面再输入Hadoop Streaming命令如果使用相同的输出文件夹时,就会出现“输出文件夹已经存在的错误”;参数 –file后面是map和reduce的脚本,路径可以是详细的绝对路径,,也可以是当前路径,当前路径下一定要有mapper,reducer 函数,但是在参数 -mapper 和-reducer之后,需要指定python脚本的环境目录,而且用引号引起来。  

3.出现错误:“Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 127”.

脚本环境的问题  在第六行与第七行 加上python 环境目录即可。

参考:

http://www.cnblogs.com/lzllovesyl/p/5286793.html

http://www.zhaizhouwei.cn/hadoop/190.html

http://blog.csdn.net/wangzhiqing3/article/details/8633208

  

时间: 2024-11-03 22:15:52

hadoop streaming anaconda python 计算平均值的相关文章

Hadoop Streaming例子(python)

以前总是用java写一些MapReduce程序现举一个例子使用Python通过Hadoop Streaming来实现Mapreduce. 任务描述: HDFS上有两个目录/a和/b,里面数据均有3列,第一列都是id,第二列是各自的业务类型(这里假设/a对应a,/b对应b),第三列是一个json串.各举一例: /a的一行:1234567 a {"name":"jiufeng","age":"27","sex"

用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控

写在前面 前文:用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 为了方便,这篇文章里的例子均为伪分布式运行,一般来说只要集群配置得当,在伪分布式下能够运行的程序,在真实集群上也不会有什么问题. 为了更好地模拟集群环境,我们可以在mapred-site.xml中增设reducer和mapper的最大数目(默认为2,实际可用数目大约是CPU核数-1). 假设你为Hadoop安装路径添加的环境变量叫$HADOOP_HOME(如果是$HAD

自制 python hadoop streaming 数据分析工具

https://github.com/zhuyi10/hadoop_data_analysis跟大家交流一下我写的数据分析工具用hadoop streaming执行python写的mapper, reducer目前只实现了一些简单的分析功能希望大家多提意见

Hadoop Streaming

什么是Hadoop Streaming ? ? Hadoop提供的一个编程工具,允许用户使用任何可执行文件或脚本作为mapper和Reducer ? ? 比如shell中的cat作为mapper,wc作为reducer ? ? $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar -input myInputDirs -output myOutputDir -mapper cat -re

Hadoop Streaming 使用及参数设置

1. MapReduce 与 HDFS 简介 什么是 Hadoop ? Google 为自己的业务需要提出了编程模型 MapReduce 和分布式文件系统 Google File System,并发布了相关论文(可在 Google Research 的网站上获得:GFS.MapReduce).Doug Cutting 和 Mike Cafarella 在开发搜索引擎 Nutch 时对这两篇论文进行了自己的实现,即同名的 MapReduce 和 HDFS,合起来就是 Hadoop. MapRedu

hadoop streaming编程小demo(python版)

都到了年根底下了,业务线黄了,成了惨兮兮的茶几.不说了. 换到了新的业务线,搞大数据质量评估.自动化质检和监控平台是用django,MR也是通过python实现的.(后来发现有odc压缩问题,python不知道怎么解决,正在改成java版本) 这里展示一个python编写MR的例子吧. 抄一句话:Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer. 1.首先,先介绍一下背景,我们的数据是存放在hive里的.h

Python科学计算(一)环境简介——Anaconda Python

Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便.自带的包管理器conda也很强大.下载地址为:http://www.continuum.io/downloads(访问不稳定,可能需要FQ.PS:(可以注册个nydus VPNFQ免费使用7天:http://www.nydus.com.cn)或者下载lantern.Anaconda提供了Python2.7和Python3.4两个主要版本,同时如果需要其他版本,还可以通过conda来创建. 安装完成后可以看到,Anacond

用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 前文: 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 使用额外的文件 假如你跑的job除了输入以外还需要一些额外的文件(side data),有两种选择: 大文件 所谓的大文件就是大小大于设置的local.cache.size的文件,默认是10GB.这个时候可以用-fil

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