MapReduce工作笔记——Job上传普通文件和大文件

2020-09-10 10:34:54 浏览数 (1)

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解压后的目录。

0 人点赞