我有两台linux机器,两台配置不同
计算机1 :16 GB RAM,4个虚拟核心和40 GB HDD(主机和从机)
机器2 :8 GB RAM,2个虚拟内核和40 GB HDD(从机)
我在这两台机器之间设置了一个hadoop集群 我正在使用机器1作为主人和奴隶 机器2作为奴隶。
我想运行我的spark应用程序并尽可能多地利用Virtual Cores和内存,但我无法弄清楚是什么设置。
我的火花代码看起来像:
conf = SparkConf().setAppName("Simple Application")
sc = SparkContext('spark://master:7077')
hc = HiveContext(sc)
sqlContext = SQLContext(sc)
spark = SparkSession.builder.appName("SimpleApplication").master("yarn-cluster").getOrCreate()
到目前为止,我尝试了以下内容:
当我仅在机器1上处理我的2 GB文件时(在本地模式下作为单节点群集),它使用机器的所有4个CPU并在大约8分钟内完成。
当我按照上面的群集配置处理我的2 GB文件时,需要稍长于8分钟,但我预计会花费更少的时间。
我需要设置多少个执行程序,核心,内存来最大化群集的使用?
我已经参考了下面的文章,但因为我的机器配置不同,不确定哪种参数最适合。
Apache Spark: The number of cores vs. the number of executors
非常感谢任何帮助。
答案 0 :(得分:0)
当我使用上面的群集配置处理我的2 GB文件时,它需要稍长于8分钟,但我预计会花费更少的时间。
不清楚文件的存储位置。
我看到你正在使用Spark Standalone模式,所以我假设它没有在HDFS上拆分成大约16个块(给定块大小为128MB)。
在这种情况下,整个文件将至少处理一次,加上在网络中对数据进行混洗的开销。
如果您使用YARN作为Spark主服务器,将HDFS作为文件系统,并使用可拆分文件格式,那么计算将转到数据",您可以期望更快的运行时间。
就最佳设置而言,核心与内存之间以及执行者数量之间存在权衡,但对于特定工作负载而言,没有神奇的数字,并且您始终受到最小节点的限制在集群中,在计算大小时应记住Spark驱动程序的内存和操作系统上的其他进程