如何配置pyspark在默认情况下写入hdfs?

ifmq2ha2  于 2021-06-01  发布在  Hadoop
关注(0)|答案(3)|浏览(621)

我正在尝试使spark在默认情况下写入hdfs。当前,当我在rdd上调用saveastextfile时,它会写入本地文件系统。具体来说,如果我这样做:

rdd = sc.parallelize( [1,2,3,4,5] )
rdd.saveAsTextFile("/tmp/sample")

它将写入本地文件系统中名为/tmp/sample的文件。但是,如果我这么做了

rdd = sc.parallelize( [1,2,3,4,5] )
rdd.saveAsTextFile("hdfs://localhost:9000/tmp/sample")

然后它保存到本地hdfs示例的适当位置。
有没有办法配置或初始化spark

rdd.saveAsTextFile("/tmp/sample")

默认情况下是否保存到hdfs?
回答下面的评论,当我跑的时候

hdfs getconf -confKey fs.defaultFS

我懂了

17/11/28 09:47:18 WARN util.NativeCodeLoader: Unable to load native-hadoop   library for your platform... using builtin-java classes where applicable
hdfs://localhost:9000
8hhllhi2

8hhllhi21#

有不同的方式运行Spark。在我的例子中,我使用了两种不同的方法,一种是spark独立安装,另一种是在cloudera集群中spark-on-yarn。
默认情况下,当我在spark standalone中写入时,它会写入本地文件系统,但当我在spark on yarn(它是2.x)中这样做时,hdfs是默认的写入位置。
我知道我没有回答你关于如何配置spark在hdfs中默认写入的问题,你已经找到了答案,但是我告诉你一种在默认写入位置是hdfs的地方部署spark的方法。
我还相信在cloudera集群中部署spark的好处,因为除了spark ui和history server所提供的功能之外,还可以获得cloudera manager这样的附加功能来监视您的资源,包括日志聚合、hue以帮助与hdfs、hive等交互。

liwlm1x9

liwlm1x92#

终于弄明白了:
我必须创建一个名为spark\u conf\u dir的环境变量
我在那里创建了一个名为spark-env.sh的文件
那个文件有这样一行 export HADOOP_CONF_DIR="/opt/hadoop-2.9.0/etc/hadoop/" (或实际安装Veer hadoop的位置。)这里有记录:https://spark.apache.org/docs/latest/configuration.html
“抓住你了”原来是这样的 HADOOP_CONF_DIR 必须是完全解析的路径,没有~。很长一段时间,我

export HADOOP_CONF_DIR="~/opt/hadoop-2.9.0/etc/hadoop"

而这似乎并不正确。改为绝对路径解决了这个问题。

8aqjt8rx

8aqjt8rx3#

简而言之:不是,“/tmp/sample”的语法默认指向本地文件系统。不使用的原因是什么 rdd.saveAsTextFile("hdfs://localhost:9000/tmp/sample") ?
但是,您可以将路径存储在一个变量中,并在必要时将其广播给worker。

相关问题