0. 前言
我们在配置MR Streaming任务的时候,通常会上传mapper、reducer以及其他会用到的一些文件,在MapReduce工作笔记——Hadoop shell 常用文件操作命令中提到过使用put
数据上传HDFS。在执行MR Job 的时候,Hadoop会将其配置的文件数据打包成jar,两种上传的目标是不一样的,前者是数据,后者是配置,本文章将主要介绍普通脚本文件的上传以及大文件的上传。
1. 上传普通文件
上传本地文件可以使用-file
运用示例:
Code.1.1 file 上传示例
代码语言:javascript复制hadoop streaming
-mapper "./mapper.py"
-reducer "./reducer.py"
-file "$MY_PATH/reducer.py"
-file "$MY_PATH/mapper.py"
-file "test.txt"
使用-file
上传后的目录存在相对路径之下,在配置-mapper
以及-reducer
时候,直接使用相对路径以及文件名即可。
2. 上传大文件
上文中提到过这些上传的文件会打包到job 的jar 包中,但是如果遇到有jar包大小时,文件大小总和超过设置的大小会报错,这时候就需要使用-cacheFile
大文件上传, 使用 -cacheArchive
上传压缩文件
2.1 cacheFile上传至Hdfs
Code.2.1 cacheFile示例
代码语言:javascript复制-cacheFile /home/cache-test/testfile.txt#test
#如果有多个文件,选项可以写成:
-cacheFile /home/cache-test/testfile1.txt#test1
-cacheFile /home/cache-test/testfile2.txt#test2
这里的任务的当前工作目录下有一个“test”符号链接,它指向testfile.txt文件在本地的拷贝。
2.2 cacheArchive上传压缩文件
cacheArchive
支持zip、tar、tgz、tar.gz和jar等压缩文件解压上传。
Code.2.2 cacheArchive示例
代码语言:javascript复制-cacheArchive /home/cache-test/testfile2.tar.gz#test
在上面的例子里,url中#后的部分是建立在任务当前工作目录下的符号链接的名字,此处为test,test指向data解压后的目录。