一、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
(二)根据上述尝试得出结论
- 以
--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 。
|