问题标签 [hadoop2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sorting - 深入了解hadoop中Map reduce作业中map阶段的内部工作?
我正在读Hadoop: The definitive guide 3rd edtition
汤姆·怀特的书。它是了解 内部结构的绝佳资源Hadoop
,尤其是Map-Reduce
我感兴趣的内部结构。
从书中,(第205页):
随机和排序
MapReduce 保证每个 reducer 的输入都是按键排序的。系统执行排序并将 map 输出作为输入传输到 reducer 的过程称为 shuffle。
我由此推断,key在发送到reducer之前是先排序的,说明job的map阶段的输出是排序的。请注意:我不叫它映射器,因为映射阶段包括映射器(由程序员编写)和 MR 框架的内置排序机制。
地图侧
每个映射任务都有一个循环内存缓冲区,它会将输出写入其中。缓冲区默认为 100 MB,可以通过更改 io.sort.mb 属性来调整大小。当缓冲区的内容达到某个阈值大小(io.sort.spill.percent,默认为 0.80 或 80%)时,后台线程将开始将内容溢出到磁盘。在溢出发生时,映射输出将继续写入缓冲区,但如果在此期间缓冲区填满,映射将阻塞,直到溢出完成。
在写入磁盘之前,线程首先将数据划分为reducers对应的分区他们最终将被发送到。在每个分区内,后台线程按键执行内存排序,如果有组合器函数,则在排序的输出上运行。运行 combiner 函数可以得到更紧凑的 map 输出,因此写入本地磁盘和传输到 reducer 的数据更少。
我对上一段的理解是,在mapper产生键值对的过程中,键值对是被分区和排序的。一个假设的例子:
考虑将 mapper-1 用于字数统计程序:
(注意with-in每个分区的数据都是key排序的,但是partition-1的数据和partition-2的数据不一定要按顺序排列)
继续阅读本章:
每次内存缓冲区达到溢出阈值时,都会创建一个新的溢出文件,因此在映射任务写入其最后一个输出记录后,可能会有多个溢出文件。在任务完成之前,溢出文件被合并成一个单独的分区和排序的输出文件。配置属性 io.sort.factor 控制一次合并的最大流数;默认值为 10。
我的理解是(请知道上面段落中的粗体短语,这欺骗了我):在一个映射任务中,几个文件可能会溢出到磁盘,但它们会合并到一个仍然包含分区并已排序的文件中。考虑与上面相同的示例:
在单个地图任务完成之前,它的中间数据可能是:
mapper-1 内容
map-task 完成后,mapper 的输出将是一个文件(注意现在添加了上面的三个溢出文件,但假设作业 conf 中没有指定组合器,则没有应用组合器):
所以这里partition-1可能对应reducer-1。即上面partition-1段对应的数据被发送到reducer-1,partition-2段对应的数据被发送到reducer-2。
如果到目前为止,我的理解是正确的,
hadoop - 文件是否被划分为块以存储在 HDFS 中?
我了解 HDFS 中的块系统是底层文件系统之上的逻辑分区。但是当我发出cat
命令时如何检索文件。
假设我有一个 1 GB 的文件。我的默认HDFS
块大小是 64 MB。
我发出以下命令:
上面的命令将文件my1GBfile.db
从我的本地机器复制到输入/数据目录HDFS:
我有 16 个要复制和复制的块( 1 GB / 64 MB ~ 16 )。
如果我有 8 datanodes
,则单个数据节点可能没有所有块来重新构建文件。
当我发出以下命令时
现在会发生什么?
文件是如何重组的?虽然块只是逻辑分区,但 1 GB 的文件是如何物理存储的。它存储在 HDFS 上。每个数据节点是否获取文件的某些物理部分。因此,通过将输入的 1GB 文件分成 64 MB 的块,我们可能会在记录级别(比如在行之间)打破一些东西。这是如何处理的?
我签入了我的数据节点,我确实看到了一个blk_1073741825
,当在编辑器中打开它时,它实际上显示了文件的内容。
那么,生成的文件块是否不合逻辑但真实partition
的数据发生了?
请帮助澄清这一点
hadoop - 如何将 AWS 访问密钥 ID 和秘密访问密钥指定为 amazon s3n URL 的一部分
我正在将输入和输出文件夹作为参数传递给来自网页的 mapreduce 字数统计程序。
出现以下错误:
HTTP 状态 500 - 请求处理失败;嵌套异常是 java.lang.IllegalArgumentException:AWS 访问密钥 ID 和秘密访问密钥必须分别指定为 s3n URL 的用户名或密码,或者通过设置 fs.s3n.awsAccessKeyId 或 fs.s3n.awsSecretAccessKey 属性(分别)。
hadoop - Hadoop 1 和 Hadoop 2 之间的区别
据我所知,我只知道 Hadoop 1 和 2 之间的一个区别。
它的主动和被动辅助名称节点。
有人可以列出 Hadoop 1 和 2 之间的区别吗?
apache - Hadoop Record Reader 仅读取第一行然后输入流似乎已关闭
我正在尝试实现一个 hadoop 作业,它计算对象(单击)在数据集中出现的频率。因此我写了一个自定义文件输入格式。记录阅读器似乎只读取给定文件的第一行并关闭输入流。
这是代码:
Pojo 类:
这是 FileInputFormat 类:
映射器类:
分区器类:
Hadoop 作业,它是通过 servlet 容器中的 Restful Web 服务调用触发的,但这不应该是问题:
接下来是数据集(示例):
当我运行程序时,syso 显示如下:
由此我得出结论,记录阅读器只阅读第一行。为什么会发生这种情况以及如何解决?
hadoop - Hadoop中的分布式缓存
什么是 Hadoop 中的分布式 Cahce?
这个怎么运作?
hadoop - 如何在 hadoop2(yarn) 中使用 JobClient
(已解决)我想联系hadoop集群并获取一些工作/任务信息。
在 hadoop1 中,我可以使用 JobClient(本地 pesudo 分布式模式,使用 Eclipse):
今天搭建了一个伪分布式hadoop2 YARN集群,但是上面的代码不行。我使用资源管理器的端口(8032)。
此行给出异常:线程“main”中的异常 java.io.IOException:无法初始化集群。请检查您的配置以获取 mapreduce.framework.name 和相应的服务器地址。
我搜索此异常,但所有解决方案均无效。我使用 eclipse,并且添加了所有 hadoop jar,包括 hadoop-mapreduce-client-xxx。此外,我可以在我的集群上成功运行示例程序。关于如何在 hadoop2 纱线上使用 JobClient 有什么建议吗?
更新:我可以通过使用与 rm 服务器相同的 hadoop lib 进行编译来解决此问题。在 Eclipse 中它仍然给出这个异常但是在我编译和部署我的项目之后它工作正常。(不知道为什么在 hadoop1 中它在 eclipse 中工作)不需要更改 api,JobClient 在 hadoop2 中仍然运行良好
java - 在 hadoop 2.4.0 中找不到 org.apache.hadoop.conf 的库
我一直在研究 hadoop-2.4.0,为了运行基于 java 的 hadoop 示例,我已将所需的库放在 CLASSPATH
我已将所有需要的 HADOOP 库从 HADOOP_HOME 添加到 CLASSPATH 中。
但是,当我尝试运行示例 javac -cp $CLASSPATH HelloWorld.java
它提醒我一个错误
我不知道在哪里可以找到 org.apache.hadoop.conf 的库。
hadoop - Datanode 不允许连接到 Hadoop 2.3.0 集群中的 Namenode
我正在尝试建立一个 Apache Hadoop 2.3.0 集群,我有一个主节点和三个从节点,从节点列在 $HADOOP_HOME/etc/hadoop/slaves 文件中,我可以从从节点远程登录到主节点端口 9000 上的节点,但是当我在任何从属设备上启动数据节点时,我得到以下异常。
2014-08-03 08:04:27,952 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode:块池块池 BP-1086620743-xx.xy.23.162-1407064313305(Datanode Uuid null)服务初始化失败server1.mydomain.com/xx.xy.23.162:9000 org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException):Datanode拒绝与namenode通信,因为无法解析主机名。
以下是我的 core-site.xml 的内容。
同样在我的 hdfs-site.xml 中,我没有为 dfs.hosts 或 dfs.hosts.exclude 属性设置任何值。
谢谢。
hadoop - 了解 Hadoop 快照功能
我尝试了解 Hadoop 快照的机制(http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html)。不幸的是,官方网站 apache 上的信息量非常有限,所以在这里发布消息。
我在我的 Hadoop 集群上尝试了这个功能。在获取快照之前,我尝试使用hdfs dfsadmin -report
实用程序:
我制作了 durectory 的快照/tmp
并获取子目录:
令我惊讶的第一件事是快照的大小和拍摄此快照的时间。时间立刻,大小是一样的。让我感到惊讶的第二件事是 hdfs 实用程序的报告:
在此之后,我从 /tmp 目录中删除了一个子目录并运行恢复...该目录已恢复...但我不明白如何。有人可以描述更多细节吗?谢谢!