- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 hadoop 方面没有实际经验 -- 我只学了一些理论。我面临的任务是使用集群处理一个巨大的 CSV 文件(比内存大得多),我想出了以下过程。
假设 csv 文件包含 3 亿行,我将 1-1 亿行称为第 1 部分,将 101-2 亿行称为第 2 部分,将 201-3 亿行称为第 3 部分。 (这只是一个例子,因为在实践中数据必须被分割成更多的部分以便在内存中处理)
我想按以下方式将数据分发到节点上。
节点号数据获取
节点 1 只有第 1 部分
节点 2 只有第 2 部分
节点 3 只有第 3 部分
节点 4 第 1 部分和第 2 部分
节点 5 第 2 部分和第 3 部分
节点 6 第 1 部分和第 3 部分
您会看到一些节点只获取数据的一部分,而一些节点获取 2 部分数据。根据这一点,两个函数之一应用于每个节点。我了解到这可以通过 reducer 中的 if-else 语句来完成。即我的 reducer 应该是这样的
如果(节点 1,2,3)运行函数 f1(data_block)
如果(节点 4,5,6)运行函数 f2(data_blockA,data_blockB)
问题是我学过的大部分hadoop例子都不允许每个节点选择要读取哪一部分数据。数据以一种相当黑盒的方式分发到节点。有什么办法可以解决这个问题吗?附言我正在考虑依赖 Hadoop 流,因为我的主要语言是 Python,而不是 Java,所以这可能是另一个限制。
最佳答案
HDFS架构中有 block 的概念。 HDFS 使用的典型 block 大小为 64 MB。当我们将一个大文件放入 HDFS 时,它被分成 64 MB 的 block (基于 block 的默认配置),假设你有一个 1GB 的文件并且你想将该文件放入 HDFS,那么将有 1GB/64MB = 16拆分/ block ,这些 block 将分布在数据节点上。
数据拆分基于文件偏移发生。文件拆分的目标是数据的并行处理和故障转移。
根据您的集群配置,这些 block / block 将驻留在不同的 DataNode 上。每个 block 都会分配一个 block ID,NameNode 会为每个文件保留 block 的信息。
假设你有一个 128MB 的文件,你想把这个文件写到 HDFS 上。
客户端机器首先将文件拆分成 block 说 block A, block B然后客户端机器与名称节点交互并询问写入的位置 block (Block A Block B).NameNode给出可用的datanode列表给client写入数据。
然后客户端从这些列表中选择第一个数据节点并将第一个 block 写入数据节点,一旦写入过程和复制完成,数据节点将 block 复制到另一个数据节点第一个数据节点给出关于它收到的 block 的确认。然后客户端写入这数据节点的另一个 block 。 NameNode 保留有关文件及其关联 block 的信息。
当客户端发出读取数据的请求时,它会再次向 NameNode 发出请求以获取特定文件的数据位置,然后 NameNode 将有关数据的 block 信息提供给客户端。
因此您无需担心 HDFS 上的数据替换问题。
您问题的答案:
没有其他方法可以控制 hadoop 上的数据替换策略,但是如果您根据 HDFS block 大小划分文件(假设 block 大小为 64MB,您的数据大小为 63MB),那么一个文件将占用一个 block ,并且它将继续一个特定的数据节点,但数据节点将再次被 NameNode 选择。稍后您可以检查文件所在的数据节点。
但是将小文件放在 hadoop 上并不是处理 hadoop 的有效方法,因为 hadoop 旨在处理非常大的数据集,而小文件可能是 NameNode 的开销。请参阅此链接以获取 small file problem on Hadoop
以下链接有助于了解更多有关 hadoop 的信息。
http://docs.spring.io/spring-hadoop/docs/2.0.4.RELEASE/reference/html/store.html
关于python - Mapreduce:数据到节点的复杂分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397433/
我正在处理一个处理大量数据的项目,所以我最近发现了 MapReduce,在我进一步深入研究之前,我想确保我的期望是正确的。 与数据的交互将通过 Web 界面进行,因此响应时间在这里至关重要,我认为 1
我正在阅读有关 Hadoop 以及它的容错性的文章。我阅读了 HDFS 并阅读了如何处理主节点和从节点的故障。但是,我找不到任何提及 mapreduce 如何执行容错的文档。特别是,当包含 Job T
我正在尝试在我的 Ubuntu 桌面上使用最新的 Hadoop 版本 2.6.0、Java SDK 1.70 来模拟 Hadoop 环境。我用必要的环境参数配置了 hadoop,它的所有进程都已启动并
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我只是想针对我们正在做的一些数据分析工作来评估 HBase。 HBase 将包含我们的事件数据。键为 eventId + 时间。我们想要对日期范围内的几种事件类型 (4-5) 进行分析。事件类型总数约
是否有一种快速算法可以在 MapReduce 框架上运行以从巨大的整数集中查找中位数? 最佳答案 我会这样做。这是顺序快速选择的一种并行版本。 (某些映射/归约工具可能不会让您轻松完成任务...) 从
我正在尝试对大型分布式数据集执行一些数值计算。该算法非常适合 MapReduce 模型,具有以下附加属性:与输入数据相比,映射步骤的输出尺寸较小。数据可以被视为只读,并且静态分布在节点上(故障转移时的
假设我在 RavenDb 中有给定的文档结构 public class Car { public string Manufacturer {get;set;} public int B
我刚刚开始使用 mongo 和 map/reduce,在使用 pymongo 时我遇到了以下错误,而在直接使用 mongo 命令行时我没有得到(我意识到有一个类似的问题这个,但我的似乎更基本)。 我直
*基本上我正在尝试按过去一小时内的得分对对象进行排序。 我正在尝试为我的数据库中的对象生成每小时投票总和。投票嵌入到每个对象中。对象架构如下所示: { _id: ObjectId sc
我们怎样才能使我们的 MapReduce 查询更快? 我们使用五节点 Riak 数据库集群构建了一个应用程序。 我们的数据模型由三个部分组成:比赛、联赛和球队。 比赛包含联赛和球队的链接: 型号 va
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
有没有什么方法可以在运行时获取应用程序 ID - 例如 - 带有 yarn 的 wordcount 示例命令? 我希望使用 yarn 从另一个进程启 Action 业命令,并通过 YARN REST
如何在Hadoop Map-reduce程序中使用机器学习算法?我想使用分类算法、决策树、聚类算法。除了 Mahout 之外,请提出一些想法。 最佳答案 您可以编写自己的MapReduce程序,并在m
虽然 MapReduce 可能不是实现图像处理中使用的算法的最佳方式,但出于好奇,如果我作为初学者尝试使用它们,这将是最简单的实现方式。 最佳答案 Hadoop 非常适合处理大量 IO。因此,例如,您
我只是想验证我对这些参数及其关系的理解,如果我错了请通知我。 mapreduce.reduce.shuffle.input.buffer.percent 告诉分配给 reducer 的整个洗牌阶段的内
HBase 需要 mapreduce/yarn,还是只需要 hdfs? 对于 HBase 的基本用法,例如创建表、插入数据、扫描/获取数据,我看不出有任何理由使用 mapreduce/yarn。 请帮
我问了一些关于提高 Hive 查询性能的问题。一些答案与映射器和化简器的数量有关。我尝试了多个映射器和化简器,但在执行过程中没有发现任何差异。不知道为什么,可能是我没有以正确的方式去做,或者我错过了别
我是 mapreduce 和 hadoop 的新手。我阅读了 mapreduce 的示例和设计模式... 好的,我们可以进入正题了。我们正在开发一种软件,可以监控系统并定期捕获它们的 CPU 使用
我正在使用 Microsoft MapReduce SDK 启动仅 Mapper 作业。 调用 hadoop.MapReduceJob.ExecuteJob 立即抛出“响应状态代码不表示成功:404(
我是一名优秀的程序员,十分优秀!