hadoop streaming -archives 解压jar、zip、tar.gz的验证

一、archives做用描述:html

    Hadoop中DistributedCache方法之一(其余参考文章后面的参考文章) ,做用是 将指定文件分发到各个Task的工做目录下,并对名称后缀为“.jar”、“.zip”,“.tar.gz”、“.tgz”的文件自动解压,默认状况下,解压后的内容存放到工做目录下名称为解压前文件名的目录中,好比压缩包为dict.zip,则解压后内容存放到目录dict.zip中。为此,你能够给文件起个别名/软连接,好比dict.zip#dict,这样,压缩包会被解压到目录dict中。java

二、测试jar文件(基本直接摘抄参考文档的)apache

$ ls test_jar/
file  file1    file2 
file = this is file1(实验的时候这里搞错了,应该是用file1,对结果无影响,不作修改了)
file2 = this is file2
$ jar cvf cache.jar -C test_jar/ .
$ hdfs dfs -put cache.jar /user/work/cachefile
#touch 一个input.txt文件,而后put到 /user/work/cachefile
$ hdfs dfs -cat /user/work/cachefile/input.txt
cache/file   (cache是解压后的目录名,用#重定义的别名,参加下面的)
cache/file2

HADOOP_HOME=/home/hadoop/hadoop-2.3.0-cdh5.1.3
$HADOOP_HOME/bin/hadoop fs -rmr /cacheout/

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.3.0-cdh5.1.3.jar \
 -archives  /user/work/cachefile/cache.jar#cache \
 -Dmapred.map.tasks=1 \
 -Dmapred.reduce.tasks=1 \
 -Dmapred.job.name="Experiment" \
 -input "cachefile/input2.txt"  \
 -output "/cacheout/" \
 -mapper "xargs cat" \
 -reducer "cat"
 
hadoop fs -cat /cacheout/*
this is file 2
this is file1

三、测试zip & tar.gzapp

    分别打包zip , tar.gz的压缩包,put到hdfs继续测试。
oop

-archives  /user/work/cachefile/cache.tar.gz#cache \    只修改后缀名,会报文件找不到的错误

    查错:确认是否能解压,将mapper 改为:测试

-mapper "ls cache" \

发现:jar文件 :结果有4个文件,分别是META-INF、file、file一、file2this

          zip & tar.gz:只有一个,是test_jar的目录名spa

而后查看3种包的压缩文件,显然是解压成功了,找不到文件的缘由是目录问题,这个就要详细研究下3中打包方式了,再也不赘述。:code

                    


总结:-archives是一个很实用的参数,可是使用中尤为要注意目录问题。htm



参考:

http://blog.javachen.com/2015/02/12/hadoop-streaming.html

http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/HadoopStreaming.html#Working_with_Large_Files_and_Archives

http://dongxicheng.org/mapreduce-nextgen/hadoop-distributedcache-details/

相关文章
相关标签/搜索