草庐IT

Task4Answ

全部标签

hadoop - 并行运行多个 map task

我正在使用hadoop2.0。当我使用job.setNumMapTasks更改maptask的数量时,数量符合预期(输出文件夹中的序列文件数量和容器数量),但它们不会并行运行,但一次只有2个。例如,当我将map任务的数量设置为5时,它会先执行其中的2个,然后再执行2个,然后再执行1个。我有一个8核系统,想充分利用它。一些在线搜索(包括StackOverflow)似乎提出了一些建议,我尝试了以下方法:调整了mapred-site.xml中的参数“mapred.tasktracker.map.tasks.maximum”来设置并行运行的任务数。我将其设置为8。减少了参数“mapred.ma

hadoop - Spark : Minimize task/partition size skew with textFile's minPartitions option?

我正在通过sc.textFile("/data/*/*/*")之类的方式将数万个文件读入rdd>一个问题是这些文件中的大多数都是微小的,而其他的则巨大。这会导致任务不平衡,从而导致各种众所周知的问题。我能否通过sc.textFile("/data/*/*/*",minPartitions=n_files*5)读取数据来拆分最大的分区,其中n_files是输入文件的个数吗?如约定elsewhere在stackoverflow上,minPartitions被传递到hadooprabithole,并在org.apache.hadoop.mapred.TextInputFormat.getSp

performance - "time spent by map task"在 Hadoop 上包括什么?

Hadoop作业成功后,会显示各种计数器的摘要,请参见下面的示例。我的问题是Totaltimespentbyallmaptasks计数器中包含什么,特别是在映射器作业不是节点本地的情况下,是否包含数据复制时间?17/01/2509:06:12INFOmapreduce.Job:Counters:49FileSystemCountersFILE:Numberofbytesread=2941FILE:Numberofbyteswritten=241959FILE:Numberofreadoperations=0FILE:Numberoflargereadoperations=0FILE:N

java - 我可以通过 hadoop 中的代码明确地提前完成 map task 吗?

在某些情况下,我不需要遍历maptask中的每条输入记录。例如,我只发出最多200条满足每个映射器中特定条件的记录,然后它就可以退出。我可以在hadoop中执行此操作吗?api文档中还没有找到相关的方法。 最佳答案 您可能可以通过覆盖Mapper中的run方法来实现此目的.run方法目前看起来像:publicvoidrun(Contextcontext)throwsIOException,InterruptedException{setup(context);try{while(context.nextKeyValue()){map

Spring Scheduled Task 在集群环境中运行

我正在编写一个具有每60秒执行一次的cron作业的应用程序。该应用程序配置为在需要时扩展到多个实例。我只想每60秒在1个实例上执行任务(在任何节点上)。开箱即用我找不到解决方案,我很惊讶以前没有被问过多次。我正在使用Spring4.1.6。 最佳答案 有一个ShedLock正是为这个目的服务的项目。您只需注释执行时应锁定的任务@Scheduled(...)@SchedulerLock(name="scheduledTaskName")publicvoidscheduledTask(){//dosomething}配置Spring和L

Spring Scheduled Task 在集群环境中运行

我正在编写一个具有每60秒执行一次的cron作业的应用程序。该应用程序配置为在需要时扩展到多个实例。我只想每60秒在1个实例上执行任务(在任何节点上)。开箱即用我找不到解决方案,我很惊讶以前没有被问过多次。我正在使用Spring4.1.6。 最佳答案 有一个ShedLock正是为这个目的服务的项目。您只需注释执行时应锁定的任务@Scheduled(...)@SchedulerLock(name="scheduledTaskName")publicvoidscheduledTask(){//dosomething}配置Spring和L

java - Hadoop : set a variable like hashSet only once so that it can be utilized multiple times in each map task

您好,我有一个HashSet,它需要在hadoop中的每个映射任务中使用。我不想多次初始化它。我听说可以通过在配置函数中设置变量来实现。欢迎提出任何建议。 最佳答案 看来你还没有真正了解Hadoop的执行策略。如果你是分布式模式,你不能在多个map任务中共享一个集合(HashSet)。这是因为任务是在它们自己的JVM中执行的,并且它不是确定性的,即使不使用jvm重用,你的集合在jvm被重置后仍然存在。您可以做的是在计算开始时为每个任务设置一个HashSet。因此您可以覆盖setup(Contextctx)方法。这将在调用映射方法之前

hadoop - Shuffle write 大和 spark task 变得超慢时的优化

有一个SparkSQL将连接4个大表(前3个表5000万,最后一个表2亿)并进行一些分组操作,消耗60天的数据。并且此SQL将需要2小时才能运行,在此期间,我检查到ShuffleWrite正在急剧增加,可能会超过200GB。相比之下,当我将消耗日期范围从60天减少到45天时,运行只需要6.3分钟。我查看了DAG图,对于45天的数据,它在最后一次sortMergeJoin之后输出了10亿条数据。谁能告诉我我可以从哪个方向优化这个场景?谢谢!附言可能的相关信息:Spark.version=2.1.0spark.executor.instances=20spark.executor.memo

multithreading - 每个 Hadoop map task 使用多少个核心?

我在最多8个任务和16个内核的YARN集群上运行Hadoop任务。当我运行该作业时,我看到一个节点上正在运行8个任务,但所有16个核心都已被使用。maptask是多线程的吗?maptask使用超过1个核心?我可以知道哪些内核使用了每个映射任务吗?谢谢,阿萨夫 最佳答案 您可以配置每个map的核心数量,以及可用核心的最大数量-请参阅here.这个问题听起来有点困惑,所以,一些可能相关的更多细节:一个任务可能不仅仅是运行一个map,而且,如果您正在运行hadoop,您可能正在将内核与系统中的其他东西一起使用(即,也许其他一些进程正在使用

Hadoop - 是否有 reduce task 节点分配的位置意识检查

到目前为止我读过的所有书籍和博客都没有提供太多关于reducetask分配的信息。看起来可用槽的reduce任务分配是随机。这没有意义,因为在不考虑数据(map)局部性的情况下跨网络洗牌数据违反了hadoop设计原则。来自同一个文件的block很有可能(不是绝对的可能性)被放置在同一个机架或附近的机架中。因此,这些拆分/block的maptask也将在这些机架中(大多数时候)。如果这是一种可能的情况,为什么不尝试将reduce任务分配给与map任务相同的机架中的插槽?这不会提高1000多个节点集群的性能吗?特别是当输入是序列或映射文件时。谁能确认reducer随机放置是正确的(正版书是