描述一下hadoop中,有哪些地方使用了缓存机制

描述一下hadoop中,有哪些地方使用了缓存机制,第1张

缓存jar包到执行任务的节迟闭点的classpath中,

缓存普通文件到并旦模task运行节点的classpath中

环形缓存区,map阶段后会往本地溢写文件,他们之绝缓间会有一个环形缓存区,可以提高效率

*** 作步骤:

1.将数据的分发到每个节点上:

DistributedCache.addCacheFile(new

URI("hdfs://cloud01:9000/user/hadoop/mrinput/ST.txt"),

conf)

注意,此 *** 作一定要在创建Job,将conf传递给Job之前进行,否则数据文件的路径不会被Mapper中取到。

2.在每者链数个Mapper中获取文件URI,再进行相关 *** 作:

URI[]

uris=DistributedCache.getCacheFiles(context.getConfiguration())

比如读取该文件:

FileSystem

fs

=

FileSystem.get(URI.create("hdfs://cloud01:9000"),

context.getConfiguration())

FSDataInputStream

in

=

null

in

=

fs.open(new

Path(uris[0].getPath()))

BufferedReader

br=new

BufferedReader(new

InputStreamReader(in))

hadoop中的DistributedCache

2

WordCount.javaHadoop的分布式缓存机制使得一个job的所有map或reduce可以访问同一份文件。在任务提首首交后,hadoop将由-files和-archive选项指定的文件复制到HDFS上(JobTracker的文件系统)。在任务运行前,TaskTracker从JobTracker文件系统复制文件到本地磁盘作为缓存,这样任务就可以访问这些文件。对于job来说,它并不关心文件是从哪儿唤逗来的。在使用DistributedCache时,对于本地化文件的访问,通常使用Symbolic

Link来访问,这样更方便。通过

URI

hdfs://namenode/test/input/file1#myfile

指定的文件在当前工作目录中被符号链接为myfile。这样job里面可直接通过myfile来访问文件,而不用关心该文件在本地的具体路径。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12229589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存