目录是否由hadoop缓存符号链接处理?

nnsrf1az  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(303)

我试图弄清楚hadoop缓存创建的符号链接是否支持目录。
它在分布式模式下工作良好
它在本地模式下失败
javadoc/文档非常稀疏,对此只字不提

短版本

我想 DistributedCache.addCacheFile(URI.create("file:/tmp/myfile#foo/bar"), conf) 使 /tmp/myfile 在当前工作目录下的名称下可用 foo/bar .
集群上一切正常,但在本地模式下失败。基本上, LocalDistributedCacheManager.setup 尝试使用创建符号链接 ln -s /tmp/myfile $cwd/foo/bar 但是 foo 从未被创建过。

详细要求

我想将一个或多个avro sortedkeyvaluefile添加到hadoop分布式缓存中。 SortedKeyValueFile 与hadoop类似 MapFile s。它们实际上是由两个文件组成的目录:一个索引文件和一个数据文件。这两个文件必须有一个特定的名称( index 以及 data )并且必须在同一目录中。
如果我想在分布式缓存中至少放置两个“文件”,我就不能将文件展平到根目录中。我必须保留/定义文件层次结构。
设置:hadoop2.6.0/cdh5.4/crunch。因为我使用的是crunch,所以我不得不使用弃用的 DistributedCache api自 Job.addCachefile() 没有暴露。

待回答的问题

这是本地模式的错误还是我滥用了分布式缓存?
人们如何推动这样的事情 MapFile 或者 SortedKeyValueFile 进入hadoop缓存?

yvt65v4c

yvt65v4c1#

这是本地模式的错误还是我滥用了分布式缓存?
在本地模式下不支持distributedcache。它将只在伪分布式模式或集群模式下运行。
人们如何将mapfile或sortedkeyvaluefile之类的东西推送到hadoop缓存中?
你必须把所有的东西都放到文件中,放到hdfs中,然后在mapside中从文件中读取并放到hashmap中。
如何从分布式缓存中读取:

@Override
        protected void setup(Context context) throws IOException,InterruptedException
        {
            Path[] filelist=DistributedCache.getLocalCacheFiles(context.getConfiguration());
            for(Path findlist:filelist)
            {
                if(findlist.getName().toString().trim().equals("mapmainfile.dat"))
                {

                    fetchvalue(findlist,context);
                }
            }

        }
        public void fetchvalue(Path realfile,Context context) throws NumberFormatException, IOException
        {
            BufferedReader buff=new BufferedReader(new FileReader(realfile.toString()));
           //read the file and put it in hashMap
        }

将文件添加到分布式缓存:

DistributedCache.addCacheFile(new URI("/user/hduser/test/mapmainfile.dat"),conf);

相关问题