上传文件(分发)的三种方式:

1.本地:

-file 的模式,上传一些小的文件。

例如:

-file ./test

INPUT_FILE_PATH_1="/The_Man_of_Property.txt"
OUTPUT_PATH="/output_file_broadcast" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH # Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py mapper_func white_list" \
-reducer "python red.py reduer_func" \
-jobconf "mapred.reduce.tasks=3" \
-file ./map.py \
-file ./red.py \
-file ./white_list

run.sh

2.-cacheFile  ,向计算节点分发hdfs文件。(文件需要先上传到HDFS中)

例如:

-cacheFile "hdfs://master:9000/white_list#ABC" \

3.-cacheArchive,向计算节点分发hdfs文件。(文件需要先上传到HDFS中)

例如:

-cacheArchive "hdfs://master:9000/w.tar.gz#WH.gz" \ 
这种情况是streaming结构会自动给你解压文件,不用你去考虑。只需要改相应的文件路径就好了。
def get_file_handler(f):
file_in = open(f, 'r')
return file_in def get_cachefile_handlers(f):
f_handlers_list = []
if os.path.isdir(f):
for fd in os.listdir(f):
f_handlers_list.append(get_file_handler(f + '/' + fd))
return f_handlers_list def read_local_file_func(f):
word_set = set()
for cachefile in get_cachefile_handlers(f):
for line in cachefile:
word = line.strip()
word_set.add(word)
return word_set def mapper_func(white_list_fd):
word_set = read_local_file_func(white_list_fd) for line in sys.stdin:
ss = line.strip().split(' ')
for s in ss:
word = s.strip()
#if word != "" and (word in word_set):
if word != "":
print "%s\t%s" % (s, 1) if __name__ == "__main__":
module = sys.modules[__name__]
func = getattr(module, sys.argv[1])
args = None
if len(sys.argv) > 1:
args = sys.argv[2:]
func(*args)

map.py


#!/usr/bin/python

import sys

def reduer_func():
current_word = None
count_pool = []
sum = 0 for line in sys.stdin:
word, val = line.strip().split('\t') if current_word == None:
current_word = word if current_word != word:
for count in count_pool:
sum += count
print "%s\t%s" % (current_word, sum)
current_word = word
count_pool = []
sum = 0 count_pool.append(int(val)) for count in count_pool:
sum += count
print "%s\t%s" % (current_word, str(sum)) if __name__ == "__main__":
module = sys.modules[__name__]
func = getattr(module, sys.argv[1])
args = None
if len(sys.argv) > 1:
args = sys.argv[2:]
func(*args) red.py HADOOP_CMD="/usr/local/src/hadoop-2.6.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.1/share/hadoop/tools/lib/hadoop-streaming-2.6.1.jar" INPUT_FILE_PATH_1="/The_Man_of_Property.txt"
OUTPUT_PATH="/output_cachearchive_broadcast" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH # Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py mapper_func WH.gz" \
-reducer "python red.py reduer_func" \
-jobconf "mapred.reduce.tasks=10" \
-jobconf "mapred.job.name=cachefile_demo" \
-jobconf "mapred.compress.map.output=true" \
-jobconf "mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" \
-jobconf "mapred.output.compress=true" \
-jobconf "mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" \
-cacheArchive "hdfs://master:9000/w.tar.gz#WH.gz" \
-file "./map.py" \
-file "./red.

red.py

HADOOP_CMD="/usr/local/src/hadoop-2.6.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.1/share/hadoop/tools/lib/hadoop-streaming-2.6.1.jar"
#!/user/bin/env python
#上面这个是让系统自己寻找python可执行文件 #输入文件,多个文件可以使用,分隔,前提文件需要先上传到hdfs上。
INPUT_FILE_PATH_1="/1.txt,/2.txt" #hdfs上的输出文件目录的位置
OUTPUT_PATH="/table1" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH # Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py " \
-reducer "python red.py " \
-file ./map.py \
-file ./red.py \
-jobconf mapred.reduce.tasks=2 \ #设置reduce的数量 #下面两行:是开启map阶段产生的数据是否压缩,第二行是压缩的格式
-jobconf "mapred.compress.map.output=true" \ ###1
-jobconf "mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" \ ###1 #下面两行是:最终输出的是否开启压缩,及其压缩的格式
-jobconf "mapred.output.compress=true" \        ###2
-jobconf "mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" \ ###2
  
#下面是压缩文件上传的位置 “#”后面是别名,在配置文件中可以使用,slave节点#在运行过程中也是使用别名来建目录的。  
-cacheArchive "hdfs://master:9000/w.tar.gz#WH.gz" \ ###第三种传文件的方式。 #下面第一行是表示以什么分隔,默认是制表符“\t”
#第二行是以分隔后的前两个作为key,剩下为value
#第三行是在key中以,分隔,
#第四行是在第三行分隔后,用第一列分桶
-jobconf stream.map.output.field.separator=',' /
-jobconf stream.num.map.output.key.fields=2\ -jobconf map.output.key.field.separator=',' /
-jobconf num.key.fields.for.partition=1 \
#下面是在你自己设置partition时写入的东西。
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner

run.sh

-jobconf mapred.text.key.partitioner.options=-k2,3 \  相当于-jobconf num.key.fields.for.partition=1\
的扩展,意思是在key中,选择2,3列作为partition
在没有设partion的时候,默认等于
先分桶,之后再在桶中按照key排序,

补充:!!!

可以通过压缩文件的方式,控制map的数量,一个压缩文件对应一个map

还可以不影响路径,即可以让目录结构保持不变.


-----------------------------------------
def get_file_handler(f):
file_in = open(f, 'r')
return file_in def get_cachefile_handlers(f):
f_handlers_list = []
if os.path.isdir(f):
for fd in os.listdir(f):
f_handlers_list.append(get_file_handler(f + '/' + fd))
return f_handlers_list def read_local_file_func(f):
word_set = set()
for cachefile in get_cachefile_handlers(f):
for line in cachefile:
word = line.strip()
word_set.add(word)
return word_set def mapper_func(white_list_fd):
word_set = read_local_file_func(white_list_fd) for line in sys.stdin:
ss = line.strip().split(' ')
for s in ss:
word = s.strip()
#if word != "" and (word in word_set):
if word != "":
print "%s\t%s" % (s, 1) if __name__ == "__main__":
module = sys.modules[__name__]
func = getattr(module, sys.argv[1])
args = None
if len(sys.argv) > 1:
args = sys.argv[2:]
f
#!/usr/bin/python

import sys

def reduer_func():
current_word = None
count_pool = []
sum = 0 for line in sys.stdin:
word, val = line.strip().split('\t') if current_word == None:
current_word = word if current_word != word:
for count in count_pool:
sum += count
print "%s\t%s" % (current_word, sum)
current_word = word
count_pool = []
sum = 0 count_pool.append(int(val)) for count in count_pool:
sum += count
print "%s\t%s" % (current_word, str(sum)) if __name__ == "__main__":
module = sys.modules[__name__]
func = getattr(module, sys.argv[1])
args = None
if len(sys.argv) > 1:
args = sys.argv[2:]
f
HADOOP_CMD="/usr/local/src/hadoop-2.6.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.1/share/hadoop/tools/lib/hadoop-streaming-2.6.1.jar" INPUT_FILE_PATH_1="/The_Man_of_Property.txt"
OUTPUT_PATH="/output_cachearchive_broadcast" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH # Step 1.
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1 \
-output $OUTPUT_PATH \
-mapper "python map.py mapper_func WH.gz" \
-reducer "python red.py reduer_func" \
-jobconf "mapred.reduce.tasks=10" \
-jobconf "mapred.job.name=cachefile_demo" \
-jobconf "mapred.compress.map.output=true" \
-jobconf "mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" \
-jobconf "mapred.output.compress=true" \
-jobconf "mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" \
-cacheArchive "hdfs://master:9000/w.tar.gz#WH.gz" \
-file "./map.py" \
-file "./red.

hadoop配置2.6.1 centos7的更多相关文章

  1. Centos7中hadoop配置

    Centos7中hadoop配置 1.下载centos7安装教程: http://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html (注意 ...

  2. hadoop配置优化

    yarn-site.xml <property> <name>yarn.nodemanager.resource.memory-mb</name> <valu ...

  3. hadoop配置错误

    经过上一周的郁闷期(拖延症引发的郁闷),今天终于开始步入正轨了.今天主要是解决hadoop配置的错误以及网络时断时续的问题. 首先说明一下之前按照这篇文章的方法配置完全没有问题,但是等我配置好了发现h ...

  4. Hadoop 配置好hive,第一次在conf能进入,第二次就不行了,怎么办?

    问题描述: 在 Hadoop 配置好 hive 数据仓库,在conf目录下通过hive命令进入hive数据仓库,非常顺利.  但关闭终端,第二次按这种方式却显示,无次命令. 怎么办? 解决办法: 在h ...

  5. Hadoop配置第2节-JDK的安装

    Hadoop配置-JDK的安装 总体目标:完成zookeeper+Hadoop+Hbase 整合平台搭建   进度:1:集群网络属性配置2:集群免密码登陆配置3:JDK的安装4:Zookeeper的安 ...

  6. Hadoop配置要点必看

    hadoop 配置要点 软件 版本 java 1.8.0_151 hadoop 2.6.1 part1 $HADOOP_HOME/etc/hadoop 目录下配置参数. slaves 配置从节点 ya ...

  7. hadoop生态搭建(3节点)-04.hadoop配置

    如果之前没有安装jdk和zookeeper,安装了的请直接跳过 # https://www.oracle.com/technetwork/java/javase/downloads/java-arch ...

  8. nutch+hadoop 配置使用

    nutch+hadoop 配置使用 配置nutch+hadoop 1,下载nutch.如果不需要特别开发hadoop,则不需要下载hadoop.因为nutch里面带了hadoop core包以及相关配 ...

  9. Docker Hadoop 配置常见错误及解决办法

    Docker Hadoop 配置常见错误及解决办法 问题1:wordcount运行卡住,hadoop 任务运行到running job就卡住了 INFO mapreduce.Job: Running ...

随机推荐

  1. react中的数据请求

    在react中,没有提供专门的请求数据的模块,所以我们可以采用第三方请求数据的模块进行数据请求,常见的有axios和fetch-jsonp,下面来总结这两种方式的用法. axios 查看文档 http ...

  2. JSON: 介绍、应用

    ylbtech-JSON:  介绍.应用 JSONP(JSON with Padding)是 JSON 的一种“使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域读取数据. 为什么我们从不同的 ...

  3. NodeJs递归删除非空文件夹

    此篇博文由于第一次使用fs.unlink()删除文件夹时报“Error: EPERM: operation not permitted, unlink”错误而写,这是因为fs.unlink()只能删除 ...

  4. 手动向Maven本地仓库添加ORACLE jdbc驱动

    一,当在maven工程中我们需要连接数据库的时候,只需要配置它的依赖就行,但是Maven不提供Oracle JDBC driver,由于Oracle授权问题它并没有提供,需要自己手动添加. 二,获取连 ...

  5. (转)Linux tcpdump命令详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  6. layui之初始化加分页重复请求问题解决

    layui框架中的page困扰我很久,一个页面初始化后并且分页,导致初始化渲染请求一次,分页再请求了一次,一个接口就重复请求了2次,通过不停的分析和测试,最终解决了这个问题. 基于JQ的ajax二次封 ...

  7. 学习Python 新去处:Python 官方中文文档

    Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...

  8. 认识JDBC

    内容: 1.JDBC介绍 2.JDBC入门 3.JDBC工具类实际使用 4.预处理对象 5.JDBC连接池 1.JDBC介绍 (1)基本概念介绍 什么是JDBC: JDBC(Java DataBase ...

  9. couchdb安装

    fabric涉及到了couchdb做为数据库,所以单独安装一个进行测试,当然也可以使用docker来安装. 项目地址:http://couchdb.apache.org/ 这里采用windows来安装 ...

  10. (一)apache atlas源代码编译与打包

    特别注意: atlas已经提供了0.8版本可以安装了,只有在国外的服务器上安装编译才比较顺利,可以按照官方文档去安装. 国内很多网址有被墙的问题,目前还没有完全解决,可能安装不成功 安装文档地址:ht ...