一、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。
|