我安装了3个hadoop和spark节点。我想将rdbms中的数据放入Dataframe,并将这些数据写入hdfs上的parquet中。”“dfs.replication”值为1。当我尝试使用以下命令时,我看到所有hdfs块都位于我执行sparkshell的节点上。
scala> xfact.write.parquet("hdfs://sparknode01.localdomain:9000/xfact")
这是预期的行为还是所有的块都应该分布在集群中?谢谢
soat7uwm1#
因为您正在将数据写入hdfs,所以这并不取决于spark,而是hdfs。来自hadoop:权威指南hadoop的默认策略是将第一个副本放置在与客户机相同的节点上(对于在集群外运行的客户机,节点是随机选择的,尽管系统尝试不选择太满或太忙的节点)。所以是的,这是我们的意图。
bgibtngc2#
正如@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')
columns = xfact.columns test = sqlContext.createDataFrame(xfact.rdd.map(lambda a: a),columns) test.write.mode('overwrite').parquet('hdfs://sparknode01.localdomain:9000/xfact')
2条答案
按热度按时间soat7uwm1#
因为您正在将数据写入hdfs,所以这并不取决于spark,而是hdfs。来自hadoop:权威指南
hadoop的默认策略是将第一个副本放置在与客户机相同的节点上(对于在集群外运行的客户机,节点是随机选择的,尽管系统尝试不选择太满或太忙的节点)。
所以是的,这是我们的意图。
bgibtngc2#
正如@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')