我在用Hadoop2.2.我看到我的工作顺利完成.我可以浏览文件系统来查找输出.但是,当我浏览时http://NNode:8088/cluster/apps,我无法看到任何已完成的应用程序(我运行了3个wordcount作业,但这里没有看到它).
是否需要考虑任何配置?

这里是 yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>NNode</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
-->
Run Code Online (Sandbox Code Playgroud)
这是mapred-site.xml:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
Run Code Online (Sandbox Code Playgroud)
我也有运行作业历史服务器:
jps
4422 NameNode
5452 Jps
4695 SecondaryNameNode
4924 ResourceManager
72802 Jps
5369 JobHistoryServer
Run Code Online (Sandbox Code Playgroud) 我正在读Hadoop: The definitive guide 3rd edtition汤姆怀特.它是理解内部的优秀资源Hadoop,尤其是Map-Reduce我感兴趣的内部.
从书中,(页205):
随机和排序
MapReduce保证每个reducer的输入按键排序.系统执行排序的过程 - 将映射输出作为输入传递给Reducer - 称为shuffle.
我从中推断出,在将键发送到reducer之前,它们被排序,表明作业的map阶段的输出被排序.请注意:我不称之为mapper,因为map阶段包括mapper(由程序员编写)和MR框架的内置排序机制.
地图方面
每个map任务都有一个循环内存缓冲区,用于将输出写入.默认情况下,缓冲区为100 MB,可以通过更改io.sort.mb属性来调整大小.当缓冲区的内容达到某个阈值大小(io.sort.spill.per,默认为0.80或80%)时,后台线程将开始将内容溢出到磁盘.在溢出发生时,地图输出将继续写入缓冲区,但如果缓冲区在此期间填满,则地图将阻塞,直到溢出完成.
在写入磁盘之前,线程首先将数据划分为与最终将被发送到的reducer相对应的分区.在每个分区中,后台线程按键执行内存中排序,如果有组合器函数,则在排序输出上运行.运行组合器功能可以实现更紧凑的映射输出,因此可以将更少的数据写入本地磁盘并传输到reducer.
我对上一段的理解是,当映射器生成键值对时,键值对被分区和排序.一个假设的例子:
考虑使用mapper-1进行字数统计:
>mapper-1 contents
partition-1
xxxx: 2
yyyy: 3
partition-2
aaaa: 15
zzzz: 11
Run Code Online (Sandbox Code Playgroud)
(请注意每个分区数据按键排序,但分区-1的数据和分区2的数据不必按顺序排序)
继续阅读本章:
每次内存缓冲区达到溢出阈值时,都会创建一个新的溢出文件,因此在映射任务写入其最后一个输出记录后,可能会有多个溢出文件.在任务完成之前,溢出文件将合并到单个分区和排序的输出文件中.配置属性io.sort.factor一次控制要合并的最大流数; 默认值为10.
我的理解是(请知道上面的段落中的粗体短语,欺骗了我):在map-task中,有几个文件可能会溢出到磁盘,但它们会合并到一个仍然包含分区并进行排序的文件中.考虑与上面相同的例子:
在单个map-task完成之前,其中间数据可以是:
mapper-1内容
spill 1: spill 2: spill 2:
partition-1 partition-1 partition-1
hhhh:5
xxxx: 2 xxxx: 3 mmmm: 2
yyyy: 3 yyyy: 7 yyyy: 9
partition-2 partition-2 partition-2
aaaa: 15 bbbb: 15 …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行Hadoop balancer命令,如下所示:
hadoop balancer -threshold 1
但是我收到几条WARN消息
无法将大小= 134217728的blk_1073742036_1212从192.168.30.4:50010移动到192.168.30.2:50010到192.168.30.4:50010:块移动失败:无法从/192.168.10.3:53115接收块1073742036,因为超出了线程配额.
并且最后......
没有块被移动了5次迭代.退出...平衡需要4.092883333333333分钟
我设置ulimit值如下:
核心文件大小(块,-c)0
数据seg大小(kbytes,-d)无限制
调度优先级(-e)0
文件大小(块,-f)无限制
挂起信号(-i)2065455
最大锁定内存(kbytes, - l)无限
最大内存大小(千字节,-m)无限制
打开文件(-n)64000
管道大小(512字节,-p)8
POSIX消息队列(字节,-q)819200
实时优先级(-r)0
堆栈size(kbytes,-s)10240
cpu time(seconds,-t)无限制
最大用户进程数(-u)65535
虚拟内存(kbytes,-v)无限制
文件锁(-x)无限制
但我仍然得到同样的错误.
有人可以给我一些建议.感谢您的帮助.
我已经安装了hadoop 2.6.0,我正在玩它.我正在尝试伪分布式设置,我正按照http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html#Execution上的说明 我被卡住了在第5步,即当我运行命令时
bin/hdfs dfs -put etc/hadoop input
Run Code Online (Sandbox Code Playgroud)
我得到以下错误.
15/02/02 00:35:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
put: `input': No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?我该如何解决?
我试图在Java中使用Spark Streaming应用程序.我的Spark应用程序使用textFileStream()以每1 分钟的间隔从Hadoop目录读取连续的feed .我需要对传入的DStream执行Spark聚合(分组依据)操作.聚合后,我汇总接合DStream<Key, Value1>带RDD<Key, Value2>
与RDD<Key, Value2>由读取静态数据集创建()文本文件从Hadoop的目录.
启用检查点时会出现问题.使用空检查点目录,它运行正常.运行2-3批后,我用ctrl+ 关闭它c并再次运行.在第二次运行时,它会立即抛出火花异常:"SPARK-5063"
Exception in thread "main" org.apache.spark.SparkException: RDD transformations and actions can only be invoked by the driver, not inside of other transformations; for example, rdd1.map(x => rdd2.values.count() * x) is invalid because the values transformation and count action cannot be performed inside of the rdd1.map transformation. For more information, see SPARK-5063
Run Code Online (Sandbox Code Playgroud)
以下是火花应用代码块:
private void compute(JavaSparkContext sc, …Run Code Online (Sandbox Code Playgroud) 我正在使用单节点hadoop作业进行一些数据准备.我工作中的映射器/合并器输出许多键(超过5M或6M),显然作业进展缓慢甚至失败.映射阶段最多可运行120个映射器,并且只有一个reducer(这些是自动确定的,我没有为它们设置任何值).我想优化工作,以便更有效地进行洗牌/分拣阶段.我增加到mapreduce.task.io.sort.mb300米,但工作失败,因为它的值大于映射器堆.然后我设置mapred.child.java.opts为-Xmx1024m,但它再次失败,因为它无法初始化输出收集器.这些方案的最佳实践是什么?
我是Hadoop的新手,我有一个文件通过命令行导入hadoop(我通过SSH访问机器)
如何在hadoop中导入文件?我怎样才能检查(命令)?
我正在学习hadoop,发现减速器的数量非常令人困惑:
1)减速器的数量与分区的数量相同。
2)减速器的数量为0.95或1.75乘以(节点数)*(每个节点的最大容器数)。
3)减速器的数量由mapred.reduce.tasks设置。
4)减速器的数量最接近:块大小的倍数*任务时间在5到15分钟之间*创建尽可能少的文件。
我很困惑,我们是显式设置减速器的数量还是由mapreduce程序本身完成?
减速器的数量如何计算?请告诉我如何计算减速器的数量。
在几种情况下,我一直遇到以下错误:
2017-03-23 11:55:10,794 INFO [AsyncDispatcher event handler] org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl: Diagnostics report from attempt_1490079327128_0048_r_000003_0: Container killed by the ApplicationMaster.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Run Code Online (Sandbox Code Playgroud)
我注意到它发生了很多种,但是当我更改“排序分配内存”时,它没有帮助。
我曾尝试更改其他内存属性,但该解决方案使我难以理解。是否对Mapreduce的工作原理以及不同组件之间的相互作用有很好的解释?我应该改变什么?我在哪里找到导致此错误的Java错误?