我正在使用2016年3月9日发布的最新Spark 1.6.1。
我启动了一个包含10个节点的新集群,每个节点具有256GB RAM和32个核心。我确保SPARK_WORKER_DIR在每个节点上都是空的。我从HDFS加载两个.csv表(每个200GB)并将它们连接到一列。尽管使用.cache
我发现28GB的数据正被写入每个节点上的块管理器目录(总共280GB)。有没有办法关闭块管理器?我只想加入内存中的两个表。
如果还有什么可以发现我在这里做错了,那也很高兴知道。感谢。
这些参数在10个节点中的每个节点上设置:
export SPARK_PRINT_LAUNCH_COMMAND=1
export SPARK_MASTER_IP="NODE1"
export SPARK_MASTER_PORT="17077"
export SPARK_WORKER_PORT="17087"
export SPARK_WORKER_INSTANCES=1
export MASTER="spark://$SPARK_MASTER_IP:$SPARK_MASTER_PORT"
export SPARK_HOME="/home/mattd/spark-1.6.1-bin-hadoop2.6"
tmpdir=~/tmp
export SPARK_LOG_DIR=$tmpdir/spark/logs
export SPARK_WORKER_DIR=$tmpdir/spark/work
export SPARK_LOCAL_DIRS=$tmpdir/spark/work
$SPARK_HOME/sbin/start-master.sh # just on NODE1
$SPARK_HOME/sbin/start-slave.sh $MASTER # on NODE1 to NODE10
然后在NODE1(它也是HDFS名称节点,如果它有所不同)我运行:
$SPARK_HOME/bin/spark-shell --master spark://NODE1:17077
--packages com.databricks:spark-csv_2.10:1.3.0
--executor-memory 220G --driver-memory 20G
import org.apache.spark.sql.SQLContext
import org.joda.time._
val sqlContext = SQLContext.getOrCreate(sc)
val X = sqlContext.read.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("hdfs://NODE1/datasets/X.csv")
val Y = sqlContext.read.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("hdfs://NODE1/datasets/Y.csv")
X.show Y.show
+----------+-----------+ +----------+-----------+
| KEY| X2| | KEY| Y2|
+----------+-----------+ +----------+-----------+
|7632858426| 1476754316| |2055977176|-5965358667|
|8176486913|-7805583191| | 358321276| 8309936938|
|3235589527|-9261053875| |4311730481|-1352785819|
|6017229071| -756595861| |2084690536|-1218203804|
|1039519144| 8161598094| |3183436600| 6996336786|
... snip ... snip
X.count
10000000000
Y.count
10000000000
val ans = X.join(Y, "KEY").orderBy("KEY")
ans.cache()
ans.show
ans.count
当ans.cache()
正在运行时,我注意到每个节点上的数据写入磁盘:
$ pwd
/home/mattd/tmp/spark/work/spark-27273513-649b-4232-83eb-112eec922158/
executor-2154b748-3550-488a-b76c-6935d7c41699/
$ du -sh blockmgr-13655d08-b6b1-4b85-b6b4-92ab29d939a0/
29G blockmgr-13655d08-b6b1-4b85-b6b4-92ab29d939a0/
$ ls blockmgr-13655d08-b6b1-4b85-b6b4-92ab29d939a0/
00 04 08 0c 10 14 18 1c 20 24 28 2c 30 34 38 3c
01 05 09 0d 11 15 19 1d 21 25 29 2d 31 35 39 3d
02 06 0a 0e 12 16 1a 1e 22 26 2a 2e 32 36 3a 3e
03 07 0b 0f 13 17 1b 1f 23 27 2b 2f 33 37 3b 3f