我正在尝试使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
3条答案
按热度按时间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等交互。
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
必须是完全解析的路径,没有~。很长一段时间,我而这似乎并不正确。改为绝对路径解决了这个问题。
8aqjt8rx3#
简而言之:不是,“/tmp/sample”的语法默认指向本地文件系统。不使用的原因是什么
rdd.saveAsTextFile("hdfs://localhost:9000/tmp/sample")
?但是,您可以将路径存储在一个变量中,并在必要时将其广播给worker。