小编the*_*rer的帖子

C++中的函数覆盖在没有"虚拟"的情况下工作

我有一个包含一些函数的类(没有虚函数),还有两个类公开继承该类.在这两个子类中,我重写了基类的相同功能.

在main(位于同一文件)中创建所有三个类的对象之后,我使用baseclass对象调用原始函数,并使用derivedclass对象调用覆盖的函数.

我期待所有3个函数调用从基类运行原始函数(因为我没有在代码中的任何地方使用'virtual'),但我实际上让该函数的每个版本都按照它所在的类运行定义(3个不同版本).

我有类Base和Derived如下:

struct Base
{
   void foo();
};

struct Derived : Base
{
   void foo();
};
Run Code Online (Sandbox Code Playgroud)

在主要:

int main()
{
   Derived d;
   d.foo();
}
Run Code Online (Sandbox Code Playgroud)

我认为如果不使用'virtual',d.foo()应该运行Base :: foo().

c++ virtual overriding

1
推荐指数
1
解决办法
3606
查看次数

XML 字符串的 Java SAX 解析

我有一种情况,我获得了 XML 的字符串表示形式,并且想使用 SAX 解析器来解析它。

我知道有一种方法可以使用文档构建器来获取 DOM 文档并使用 DOM 解析器解析它,但我想使用 SAX 解析它。

我不想将其保存到文件中并使用 SAX 解析器读取它,除非这是唯一的选择。

在这种情况下我该怎么办?

java dom saxparser xml-parsing

1
推荐指数
1
解决办法
4210
查看次数

MRv2/YARN功能

我试图将我的头脑包含在新API的实际目的上,并通过互联网阅读,我找到了与我正在处理的相同问题的不同答案.

我想知道答案的问题是:

1)哪个MRv2/YARN守护程序是负责启动应用程序容器和监视应用程序资源使用的守护程序.

2)MRv2/YARN旨在解决哪两个问题?

我将尝试通过指定搜索中的资源和实际数据,使这个线程对其他读者具有教育性和建设性,所以我希望看起来我提供的信息太多,而我可以提出问题并发布帖子短.

对于第一个问题,阅读文档,我可以找到3个主要资源:

从Hadoop文档:

ApplicationMaster < - > NodeManager启动容器.使用NMClientAsync对象与NodeManagers通信,通过NMClientAsync.CallbackHandler处理容器事件

ApplicationMaster与YARN集群通信,并处理应用程序执行.它以异步方式执行操作.在应用程序启动期间,ApplicationMaster的主要任务是:

a)与ResourceManager通信,为将来的容器协商和分配资源,以及

b)在容器分配之后,通信YARN NodeManagers(NM)以在它们上启动应用程序容器.

来自Hortonworks文档

ApplicationMaster实际上是一个特定于框架的库的实例,负责协商来自ResourceManager的资源,并与NodeManager一起执行和监视容器及其资源消耗.它负责从ResourceManager协商适当的资源容器,跟踪其状态并监视进度.

来自Cloudera文档:

MRv2守护进程 -

ResourceManager - 每个群集一个 - 启动ApplicationMasters,在从属节点上分配资源

ApplicationMaster - 每个作业一个 - 请求资源,管理单个Map和Reduce任务

NodeManager - 每个从节点一个 - 管理各个从节点上的资源

JobHistory - 每个群集一个 - 归档作业的指标和元数据

回到问题(哪些守护进程负责启动应用程序容器和监视应用程序资源使用)我问自己:

NodeManager吗?它是ApplicationMaster吗?

根据我的理解,ApplicationMaster是让NodeManager实际完成工作的人,因此就像是在询问谁负责从地面抬起一个盒子,是那些实际解除控制心灵的人身体,让他们做提升......

我想这是一个棘手的问题,但必须有一个答案.

对于第二个问题,在线阅读,我可以从许多资源中找到不同的答案,从而产生混淆,但我的主要来源是:

来自Cloudera文档:

MapReduce v2("MRv2") - 建立在YARN之上("另一个资源NegoGator")

- 使用ResourceManager/NodeManager架构

- 提高集群的可扩展性

- 节点资源可用于任何类型的任务

- 提高群集利用率

- 支持非/ MR工作

回到问题(MRv2/YARN旨在解决哪两个问题?),我知道MRv2做了一些改变,比如防止JobTracker上的资源压力(在MRv1中,集群中的最大节点数可能在4000左右,并且在MRv2它是这个数字的2倍多,而且我也知道它提供了运行MapReduce之外的框架的能力,比如MPI.

来自文档:

Application Master提供了传统ResourceManager的大部分功能,因此整个系统可以进行更大规模的扩展.在测试中,我们已经成功地模拟了由现代硬件组成的10,000个节点集群而没有重大问题.

和:

将所有特定于应用程序框架的代码移动到ApplicationMaster中会对系统进行概括,以便我们现在可以支持多个框架,例如MapReduce,MPI和Graph Processing.

但我也认为它处理了NameNode是单点故障的事实,而在新版本中,通过高可用性模式存在Standby NameNode(我可能会混淆旧API和新API的功能,具有以下功能: MRv1与MRv2相关,这可能是我的问题的原因):

在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF).每个群集都有一个NameNode,如果该机器或进程变得不可用,整个群集将无法使用,直到NameNode重新启动或在单独的计算机上启动.

那么,如果你必须选择3中的2个,哪个是2个作为MRv2/YARN旨在解决的两个问题?

- …

hadoop mrv2

0
推荐指数
1
解决办法
1762
查看次数

标签 统计

c++ ×1

dom ×1

hadoop ×1

java ×1

mrv2 ×1

overriding ×1

saxparser ×1

virtual ×1

xml-parsing ×1