Spark在hdfs

时间:2016-11-04 07:33:10

标签: scala hadoop apache-spark hdfs parquet

我安装了3个节点hadoop和spark。我想从rdbms中获取数据到数据框中,并将这些数据写入HDFS中的镶木地板。 “dfs.replication”值为1。

当我尝试使用以下命令时,我看到所有HDFS块都位于我执行spark-shell的节点上。

scala> xfact.write.parquet("hdfs://sparknode01.localdomain:9000/xfact")

这是预期的行为还是应该在群集中分配所有块?

由于

2 个答案:

答案 0 :(得分:3)

由于您将数据写入HDFS,因此不依赖于spark,而是依赖于HDFS。来自Hadoop : Definitive Guide

  

Hadoop的默认策略是将第一个副本放在与客户端相同的节点上(for   在集群外运行的客户端,虽然是系统,但随机选择一个节点   尽量不要选择太满或太忙的节点。

是的,这是预期的行为。

答案 1 :(得分:0)

就像@nik说的那样,我用多个客户做我的工作,它为我完成了:

这是python片段:

columns = xfact.columns test = sqlContext.createDataFrame(xfact.rdd.map(lambda a: a),columns) test.write.mode('overwrite').parquet('hdfs://sparknode01.localdomain:9000/xfact')