Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让每个映射器类在hadoop中读取同一个文件_Hadoop_Mapper - Fatal编程技术网

如何让每个映射器类在hadoop中读取同一个文件

如何让每个映射器类在hadoop中读取同一个文件,hadoop,mapper,Hadoop,Mapper,在我的hadoop工作中,除了输入数据文件外,我希望每个映射器类(map方法)读取一个公共文件,并将其放入hdfs中。该文件将被读入每个映射器,并在每个映射器中保存内容。那么如何做到这一点呢?根据您的需要,有不同的方法: 在每个映射器中直接读取文件。只有当公共文件非常小时才建议这样做 用于在每个映射器中一次读取多个文件,然后执行所谓的映射侧连接。这两个文件将以相同的方式进行拆分和分区 在作业设置期间将文件添加到。该文件将存储在所有映射程序都可以访问的每个节点上 根据您的需要,有不同的方法:

在我的hadoop工作中,除了输入数据文件外,我希望每个映射器类(map方法)读取一个公共文件,并将其放入hdfs中。该文件将被读入每个映射器,并在每个映射器中保存内容。那么如何做到这一点呢?

根据您的需要,有不同的方法:

  • 在每个映射器中直接读取文件。只有当公共文件非常小时才建议这样做
  • 用于在每个映射器中一次读取多个文件,然后执行所谓的映射侧连接。这两个文件将以相同的方式进行拆分和分区
  • 在作业设置期间将文件添加到。该文件将存储在所有映射程序都可以访问的每个节点上

根据您的需要,有不同的方法:

  • 在每个映射器中直接读取文件。只有当公共文件非常小时才建议这样做
  • 用于在每个映射器中一次读取多个文件,然后执行所谓的映射侧连接。这两个文件将以相同的方式进行拆分和分区
  • 在作业设置期间将文件添加到。该文件将存储在所有映射程序都可以访问的每个节点上

你好,@harpun:非常感谢你的回答!但我仍然有一些困惑的事情要说:1。我看到,分布式缓存告诉hdfs将副本文件发送到所有节点。这是否意味着每个节点都将获得一份副本?通过这样做,选项(1)和选项(3)@user205214有什么区别?是的,使用
DistributedCache
所有节点都将获得存储在此缓存中的文件的副本。此外,您需要指定在作业设置时(即在实际运行作业之前)要存储在缓存中的文件。在方法(1)中,您可以在工作的任何阶段从HDFS访问任何文件。请注意,对于普通文件,(1)比(3)慢。您好,@harpun:非常感谢。另一个问题是,您知道DistributedCache.getLocalCacheFiles和DistributedCache.getCacheFiles之间的区别吗。我正在编程实现它,使用:cacheFiles=DistributedCache.getLocalCacheFiles(job);URI=DistributedCache.getCacheFiles(作业);但是,cacheFiles必须为null,但URI可以指向hdfs中的my特定文件。
DistributedCache
行为在本地模式和分布式模式下是不对称的。您需要在分布式模式下使用DistributedCache.getCacheFiles()。在代码中,您可以进行检查:
if(getLocalCacheFiles())
返回
null
,然后改用
getCacheFiles()
。请将有关
DistributedCache
使用的问题作为新问题与您的代码一起发布,因为它们超出了您最初问题的范围。试着搜索谷歌,首先,他们有很多相关的问题。你好,@harpun:我非常感谢你的回答!但我仍然有一些困惑的事情要说:1。我看到,分布式缓存告诉hdfs将副本文件发送到所有节点。这是否意味着每个节点都将获得一份副本?通过这样做,选项(1)和选项(3)@user205214有什么区别?是的,使用
DistributedCache
所有节点都将获得存储在此缓存中的文件的副本。此外,您需要指定在作业设置时(即在实际运行作业之前)要存储在缓存中的文件。在方法(1)中,您可以在工作的任何阶段从HDFS访问任何文件。请注意,对于普通文件,(1)比(3)慢。您好,@harpun:非常感谢。另一个问题是,您知道DistributedCache.getLocalCacheFiles和DistributedCache.getCacheFiles之间的区别吗。我正在编程实现它,使用:cacheFiles=DistributedCache.getLocalCacheFiles(job);URI=DistributedCache.getCacheFiles(作业);但是,cacheFiles必须为null,但URI可以指向hdfs中的my特定文件。
DistributedCache
行为在本地模式和分布式模式下是不对称的。您需要在分布式模式下使用DistributedCache.getCacheFiles()。在代码中,您可以进行检查:
if(getLocalCacheFiles())
返回
null
,然后改用
getCacheFiles()
。请将有关
DistributedCache
使用的问题作为新问题与您的代码一起发布,因为它们超出了您最初问题的范围。尝试搜索谷歌,首先,他们有很多相关的问题。