Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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集群中具有相同文件名的20个节点_Hadoop - Fatal编程技术网

hadoop集群中具有相同文件名的20个节点

hadoop集群中具有相同文件名的20个节点,hadoop,Hadoop,我有一个hadoop集群,有20个节点,其中15个节点有一个同名文件(在本地文件系统上)。在Map Reduce程序中读取所有这15个文件的最佳方法是什么 一种方法是在这15个节点中的每个节点上手动运行“hadoop fs-put..”命令,将文件复制到HDFS,但每个节点在HDFS上的名称不同,然后在map reduce程序中从HDFS读取文件,但不知道是否有更好的替代方法可以避免这种手动传输 谢谢 退一步:给定的映射程序如何知道要使用哪些本地文件系统路径名(给定20个路径名中的5个不同于其他

我有一个hadoop集群,有20个节点,其中15个节点有一个同名文件(在本地文件系统上)。在Map Reduce程序中读取所有这15个文件的最佳方法是什么

一种方法是在这15个节点中的每个节点上手动运行“hadoop fs-put..”命令,将文件复制到HDFS,但每个节点在HDFS上的名称不同,然后在map reduce程序中从HDFS读取文件,但不知道是否有更好的替代方法可以避免这种手动传输


谢谢

退一步:给定的映射程序如何知道要使用哪些本地文件系统路径名(给定20个路径名中的5个不同于其他路径名)?他们会尝试错误吗

通常,您会尝试避免不同映射器之间在本地环境/本地文件系统设置方面存在差异。如果您需要查找特定的文件,那么是的,可以包括一个预处理步骤,将文件从各个映射器计算机上载到hdfs目录,可能包括新路径中的本地主机名。也许你可以提一下这种非标准设置的动力

根据OP澄清进行更新

在映射器中添加

(a) checks if the file exists (on LocalFileSystem using normal java.io.File )
(b) if present then use java.io.FileInputStream, read it in. 
 (c) Then use **HDFS** commands to create new hdfs file and write the data to it

in = fs.open(new Path(uri));
因此,您将从本地FS读取数据,并向HDFS写入数据。当您写入HDFS时,可能会将本地计算机主机名添加到文件名中,以便区分这15台计算机

另一次更新OP继续增加新的要求。要处理同一台计算机上的多个映射器的情况,请在该计算机上创建未点式IP地址的hadoop计数器:每个映射器检查是否已设置,如果未设置,(a)设置,然后(b)执行工作

至于新的大文件需求/并行性,这是一个新的需求,在这里无法满足。请考虑接受这个答案作为回答原来的问题。你可以单独讨论你摆的新姿势

第三次更新如何处理将大型本地文件上载到HDFS:我不知道任何简单的方法。HDF可以并行加载/处理/存储大型文件的原因是它们被分成块。本地文件系统不能拆分本地文件


也就是说,您可以手动拆分文件,并通过单独的线程并行上传文件块。每个线程都需要将哪个偏移量“注册”到正在加载的文件中。然而,这里有一些突出的问题。(A) 我想知道这是否真的会降低速度,因为磁盘搜索将不再是连续的。(B) 您计划如何将数据块保存到hdfs中,然后将其重建为单个文件?

忘了提到本地文件仅存在于20个节点中的15个节点上。其余5个节点没有任何文件可从其本地文件系统读取,但它们是集群的一部分(作为datanodes)。在这种情况下,您建议如何从Map Reduce代码内部将文件从本地FS移动到HDFS?我们不能假设每台机器上只有一个映射器,如果文件太大,我们希望看到更多映射器并行运行。我认为在案例2或更多的映射程序尝试将数据从本地FS复制到HDFS时会出现问题。我们能避免吗?谢谢你的评论。如果您对大数据文件(GB)有任何建议,请告诉我。Thx以供接受。我还添加了注释来处理大型本地文件的上传。