sc.textFile()默认读取本地系统文件还是HDFS系统文件?
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sc.textFile()默认读取本地系统文件还是HDFS系统文件?相关的知识,希望对你有一定的参考价值。
文章目录
- 一、Spark集群拓扑
- 二、做好准备工作
- 三、以--master=local[*]方式启动spark-shell
- 四、以--master=spark://master:7077方式启动spark-shell
- 五、小结
一、Spark集群拓扑
二、做好准备工作
(一)准备本地系统文件
- 在
/home
目录里创建test.txt
(二)准备HDFS系统文件
- 将
test.txt
上传到HDFS系统的/park
目录里
(三)启动HDFS服务
- 执行命令:
start-dfs.sh
三、以–master=local[*]方式启动spark-shell
(一)尝试读取本地系统文件和HDFS系统上的文件
- 以
--master=local[*]
方式启动spark-shell
1、读取本地系统/home/test.txt
文件创建RDD,不加file://
- 执行命令:
val rdd = sc.textFile("/home/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
2、读取本地系统/home/test.txt
文件创建RDD,加上file://
- 执行命令:
val rdd = sc.textFile("file:///home/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
- 执行命令:
:quit
,退出spark-shell
3、读取HDFS系统上的文件/park/test.txt
,不加hdfs://master:9000
- 执行命令:
val rdd = sc.textFile("/park/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
- 报错,因为读取的不是HDFS系统上的文件
/park/test.txt
,而是本地系统文件/park/test.txt
,显然这个文件是不存在的
4、读取HDFS系统上的文件/park/test.txt
,加上hdfs://master:9000
- 执行命令:
val rdd = sc.textFile("hdfs://master:9000/park/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
(二)根据上述尝试得到结论
- 以
--master=local[*]
方式启动spark-shell,sc.textFile()
默认读取本地系统文件,比如sc.textFile("/home/test.txt")
就相当于sc.textFile("file:///home/test.txt")
,要访问HDFS系统上的/park/test.txt
,必须要写成sc.textFile("hdfs://master:9000/park/test.txt")
。
四、以–master=spark://master:7077方式启动spark-shell
(一)尝试读取本地系统文件和HDFS系统上的文件
- 以
--master=spark://master:7077
方式启动spark-shell
1、读取本地系统/home/test.txt
文件创建RDD,不加file://
- 执行命令:
val rdd = sc.textFile("/home/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
- 报错,因为读取的是HDFS系统上的文件
/home/test.txt
,文件不存在
2、读取本地系统/home/test.txt
文件创建RDD,加上file://
- 执行命令:
val rdd = sc.textFile("file:///home/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
- 报错,加上
file://
,依然说文件/home/test.txt
不存在
3、读取HDFS系统上的文件/park/test.txt
,不加hdfs://master:9000
- 执行命令:
val rdd = sc.textFile("/park/test.txt")
- 执行命令:
rdd.collect()
,查看RDD的内容
4、读取HDFS系统上的文件/park/test.txt
,加上hdfs://master:9000
-
执行命令:
val rdd = sc.textFile("hdfs://master:9000/park/test.txt")
-
执行命令:
rdd.collect()
,查看RDD的内容
-
执行命令:
:quit
,退出spark-shell
(二)根据上述尝试得出结论
- 以
--master=spark://master:7077
方式启动spark-shell,sc.textFile()
不能访问本地系统文件,只能读取HDFS系统文件,对于文件/park/test.txt
,必须写成hdfs://master:9000/park/test.txt
才能访问,否则会报错。
五、小结
- 如果以
spark-shell --master spark://master:7077
方式启动spark-shell,只能读取HDFS系统上的文件,不能读取本地系统文件,而以spark-shell --master=local[*]
方式启动spark-shell,既可以读取本地系统文件,加不加file://
都可以,还可以访问HDFS系统上的文件,但是必须加上hdfs://master:9000
。
以上是关于sc.textFile()默认读取本地系统文件还是HDFS系统文件?的主要内容,如果未能解决你的问题,请参考以下文章