我正在学习Apache Spark和HDFS。尽管我对一件事感到困惑,但我在很大程度上都了解了这两者。我的问题是:HDFS中的数据节点是否与Spark集群中的执行程序节点相同?换句话说,HDFS中的节点是对它们所包含的数据进行操作,还是将HDFS中的数据节点中的数据发送到对数据进行操作的Spark集群中的执行者节点?如果您想让我澄清任何事情,请告诉我!任何帮助将非常感激!
谢谢
泰勒
答案 0 :(得分:2)
我总是首先从独立角度考虑这些概念,然后再从群集角度考虑。
考虑到一台计算机(您还将在本地模式下运行Spark),DataNode
和NameNode
只是支持HDFS抽象设计的软件 NameNode
存储文件树,文件元数据等,而DataNode
存储实际数据块。 driver
和executors
是Spark中的概念,在本地模式下,Spark应用程序由driver
进程和一组executor
process ,它在您的个人计算机上以线程的身份运行。
答案 1 :(得分:2)
仅当DataNode也正在运行NodeManager时。 HDFS仅处理数据。 YARN处理计算。 YARN的ResourceManager将计算资源分配给NodeManager,由于显而易见的原因,NodeManager与DataNode位于同一位置。
YARN和Spark尝试将执行程序移动到具有Spark正在处理的数据的DataNodes / NodeManager(数据局部性),但这是一种优化,而不是硬性要求。特别是由于大多数现代数据中心都具有10GB以太网背板,因此将数据移动到备用节点的成本比以前通过网络移动数据的成本要低。
答案 2 :(得分:0)
如果您的Spark集群在主yarn
上运行,那么可以,您的Spark执行程序将在Hadoop集群中存储数据的相同节点上运行。
实际上,将计算移至数据而不是数据移至计算是提高分布式计算性能的关键方法,因为将序列化任务移至节点要比移走GB数据便宜得多完成任务。