最近在学习Spark读取HDFS上面的数据,执行代码:
textFile = sc.textFile("hdfs://localhost:9000/usr/local/hadoop/word.txt")
遇到标题上的错误:
Input path does not exist: hdfs://localhost:9000/usr/hadoop/word.txt
作者第一次学习Spark,对本地(local)读取和HDFS读取并不是太懂,折腾了半天,找了很多解答,也还是没有解决这个问题。还好舍友厉害,一通操作,给我解决了这个问题,可惜作者太菜,舍友一番讲解,我还是似懂非懂。就按照我的理解,简单记录一下解决思路和具体做法,理解不到位的地方,还请各位读者体谅。
首先,本地读取和HDFS读取完全不是一回事,本地读取如果遇到这种问题,可以直接手动创建文件夹以及相应文件来解决。但是,对于大数据问题,一个数据集可能上百G,这时就很难从本地读取,便需要从HDFS上读取。这里HDFS可以看成远程数据库,你可以在代码里面读取。一开始我想的是直接手动创建该文件夹,然后直接将文件复制粘贴过去,但是尝试失败。这是因为HDFS不在本地,无法进行这样的操作。于是需要使用Hadoop来进行操作,具体操作方法如下:
首先,我们在HDFS下没有 /usr/hadoop 这个文件夹,于是需要在HDFS下先创建该文件夹:
./bin/hdfs dfs -mkdir -p /usr/hadoop
然后可以用如下语句查看是否创建成功:
./bin/hdfs dfs -ls /
如果有下面这一行,则说明创建成功:
而后找到你的word.txt所在的地方,打开终端,输入如下语句将word.txt放到 /usr/local/hadoop 中去:
./bin/hdfs dfs -put word.txt /usr/hadoop
然后再执行代码,便可成功。