我们有一个Hadoop集群,数据节点为275个节点(55Tb总内存,12000个VCore)。这个集群与几个项目共享,我们有一个YARN队列分配给我们,资源有限。
为了提高性能,我们正在考虑为我们的项目构建一个单独的Spark集群(在同一网络中的Mesos上)并访问Hadoop集群上的HDFS数据。
正如Spark文档中提到的:https://spark.apache.org/docs/latest/spark-standalone.html#running-alongside-hadoop
我的问题是:
>
这不是违背了Hadoop的哲学:“将计算转移到数据上”吗?
为了获得最佳性能,新的 Spark 群集需要多少节点?
--编辑--
这不是违背了Hadoop的哲学:“将计算转移到数据上”吗?
一般来说是的。特别是如果这些节点位于不同的数据中心。越近越好。现在,我读到它们在同一个网络中:
论同一网络中的Mesos
测量计算机之间的延迟。只有这样,你才能判断它是否好。
为了获得最佳性能,新的 Spark 群集需要多少节点?
对谁最合适?只取决于你的用例。
例如,如果我在表上执行SparkSQL查询,它是否通过从Hadoop集群加载数据在Mesos Spark集群中创建RDD,然后对生成的RDD进行处理?
是的,虽然它不是一个固定的过程“读取所有内容然后处理它”——它不断地读取、处理然后写下“部分结果”,因为正如你可能猜到的那样,它无法在内存中加载1 TB的数据。
这种跨集群数据 IO 不会影响性能吗?由于通常在YARN-Spark设置中,RDD和数据位于相同的节点中。
肯定然而,正如我已经提到的,如果您想要更精确的估计,您应该至少测量这个网络中节点之间的延迟——也许某些节点比其他节点更接近HDFS机器。
没有测量(延迟、性能测试等)和对网络拓扑的仔细分析,这纯粹是猜测。
我已经在Kubernetes上建立了Spark独立集群,并试图连接到Kubernetes上没有的Kerberized Hadoop集群。我已经将core-site.xml和hdfs-site.xml放在Spark集群的容器中,并相应地设置了HADOOP_CONF_DIR。我能够成功地在Spark容器中为访问Hadoop集群的principal生成kerberos凭据缓存。但是当我运行spark-s
工人出现在图片上。为了运行我的代码,我使用了以下命令:
抛出错误 到目前为止,我在Hadoop中只有start-dfs.sh,在Spark中并没有真正配置任何内容。我是否需要使用YARN集群管理器来运行Spark,以便Spark和Hadoop使用相同的集群管理器,从而可以访问HDFS文件? 我尝试按照tutorialspoint https://www.tutorialspoint.com/Hadoop/hadoop_enviornment_setup
应用程序不是那么占用内存,有两个连接和写数据集到目录。同样的代码在spark-shell上运行没有任何失败。 寻找群集调优或任何配置设置,这将减少执行器被杀死。
我成功地kerberized了一个测试Hortonworks集群。Ambari为这些服务创建了keytabs,并且它们都已启动。名称编号有HA。备用名称节点启动得快,活动名称节点需要更长得时间。Namenode UI显示一切都是正确的。可以使用Kerberos登录。名称编号为nn1.zim.com和nn2.zim.com 这个配置会有什么问题呢?以hdfs登录,用kinit-kt加载keytab。
null sbin/start-slave.sh spark://c96___37fb:7077--用于并置从机的端口7078 sbin/start-slave.sh spark://masternodeip:7077--其他两个从机的端口7078 前面引用的所有端口都从nodeMaster重定向到相应的Docker。 因此,webUI向我显示,我的集群有3个连接的节点,不幸的是,当运行时,只有并