Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
Database 对Hadoop DFS和MapReduce的一些质疑_Database_Algorithm_Hadoop_Mapreduce - Fatal编程技术网

Database 对Hadoop DFS和MapReduce的一些质疑

Database 对Hadoop DFS和MapReduce的一些质疑,database,algorithm,hadoop,mapreduce,Database,Algorithm,Hadoop,Mapreduce,HDFS以64MB/128MB的块存储数据,并以这些块大小跨任务节点复制数据。这些块存储在节点的硬盘中。如果我这句话错了,请纠正我 该块是否完全加载到RAM中,还是需要逐行进行流式传输?或者两者都有可能 假设我有一个1GB的CSV文件,我想在该文件上执行一些计算,这些计算对于该CSV文件中的每一行都不是独立的。我的意思是,计算需要处理10个连续的行。例如:计算第1:10行、第2:11行、第3:12行,依此类推。。我有什么选择?将这1 GB多行数据转换为单行数据,然后将其作为单个矩阵加载(如果在整

HDFS以64MB/128MB的块存储数据,并以这些块大小跨任务节点复制数据。这些块存储在节点的硬盘中。如果我这句话错了,请纠正我

  • 该块是否完全加载到RAM中,还是需要逐行进行流式传输?或者两者都有可能

  • 假设我有一个1GB的CSV文件,我想在该文件上执行一些计算,这些计算对于该CSV文件中的每一行都不是独立的。我的意思是,计算需要处理10个连续的行。例如:计算第1:10行、第2:11行、第3:12行,依此类推。。我有什么选择?将这1 GB多行数据转换为单行数据,然后将其作为单个矩阵加载(如果在整个64MB/128MB块上计算复杂,我想这会使RAM溢出),这是一个好主意吗

  • 1) 数据沿着数据节点进行复制。在大多数配置中,您希望tasknodes也是datanodes。是的,它是物理存储的

    2) Hadoop用户在输入拆分上使用BufferedReader之类的东西,如果使用标准读取器,则逐行“流化”数据。还有其他阅读器,您也可以实现自己的阅读器

    3) 如果要处理一个文件的10行,有几种方法。一种方法是将文件设置为不可拆分。然后保证整个CSV由一个映射器处理。您可以自己分割文件,让许多映射程序工作。我能想到的其他方法要复杂得多,或者在区块边界有问题。我认为加载整个文件不是最好的主意,当你的.csv在将来变得更大时,你的方法就会失败

    如果您的作业是仅地图作业,则可以添加一个reduce阶段,并为这10行计算一个专用键(例如,它们与特殊问题等相关),并获取reducer中的所有相关行。不幸的是,我对你的工作了解不够详细

    如果您是hadoop新手,这可能有助于您进入hadoop。您是正确的(块大小是可配置的,但我只简单介绍一下hadoop体系结构。hadoop有一个主/从体系结构,有两个守护程序组:NameNode/DataNode/SecondaryNameNode(SNN)和JobTracker/TaskTracker。NameNode负责跟踪数据文件如何分解为文件块以及它们驻留在哪些数据节点中。NameNodes通常不兼作数据节点。数据节点将HDFS块读写到本地文件系统(磁盘)并与其他数据节点通信以进行复制。SNN是一个辅助守护进程,它与NameNode通信,用于在单点故障NameNode发生故障时最大限度地减少停机时间和数据丢失。JobTracker主机确定代码的执行计划,TaskTracker从机执行单个ta作业跟踪器分配的sks

    2) NameNode跟踪RAM中的所有datanode名称空间。数据加载到HDFS后,将从磁盘进行流式处理(HDFS针对顺序数据访问进行了优化)。流式处理仅受存储数据的驱动器的最大I/O速率的限制。请参阅这篇Cloudera文章,了解最佳HDFS块大小

    3) 你能再描述一下你的用例吗?您可能必须定义自己的InputSplit,这可能会涉及到很多问题(请参阅:)。如果可以控制数据集,则可以对其进行预处理。或者,如果您可以控制文件大小,您可以将文件以块的形式写出来,例如,如果块大小为64MB,则为62MB。

    回答3):


    如果您不介意丢失少量的10行集,那么一个非常简单而快速的解决方案是围绕a构建一点代码-映射程序第一次请求键/值对时,您的LineReader版本将读取10行,对于所有后续调用,您将逐行读取。这只需要几行额外的代码。

    将一个大文件拆分为大约60MB大小的文件是否可以保证每个数据块包含一个60MB的文件?我自己没有尝试过这种方法,但根据HDFS的工作方式,应该是可行的,值得尝试。