使用Cloudera VM时,如何访问HDFS中的信息?我知道没有通往HDFS的直接路径,但我也看不到如何动态访问它。
通过Hive CLI创建Hive表后,我尝试从HDFS中的文件加载一些数据:
load data inpath '/test/student.txt' into table student;
但是然后我得到这个错误:
FAILED: SemanticException Line 1:17 Invalid path ''/test/student.txt'': No files matching path hdfs://quickstart.cloudera:8020/test/student.txt
我还试图将不在HDFS中的数据加载到Hive表中,如下所示:
load data inpath '/home/cloudera/Desktop/student.txt' into table student;
但是,这只是产生此错误:
FAILED: SemanticException Line 1:17 Invalid path ''/home/cloudera/Desktop/student.txt'': No files matching path hdfs://quickstart.cloudera:8020/home/cloudera/Desktop/student.txt
我再次看到它尝试使用
hdfs://quickstart.cloudera:8020
的根访问数据,但我不确定这是什么,但它似乎不是HDFS的根目录。我不确定自己在做什么错,但是我确定该文件位于HDFS中,所以我不知道为什么会出现此错误或如何修复它。
最佳答案
好吧,您当然不需要使用Hive即可。 hdfs dfs
命令是您与HDFS交互的方式。
它是HDFS的根源。 quickstart.cloudera
是VM的主机名。端口8020是HDFS端口。
您的异常(exception)来自使用LOCAL
关键字的不同。
你在做什么
LOAD DATA INPATH <hdfs location>
VS你似乎想要的
LOAD DATA LOCAL INPATH <local file location>
或者,如果文件位于HDFS中,则不清楚如何将文件放入其中,但HDFS肯定没有/ home文件夹或桌面,因此第二个错误至少是有道理的。
无论如何,假定
hdfs dfs -put /test/students.text /test/
文件夹已经存在,hdfs:///test
是上传文件的一种方法。否则,hdfs dfs -put /test/students.text /test
将您的文件重命名为HDFS上的/test
注意:您可以在HDFS目录上创建EXTERNAL TABLE,而无需使用LOAD DATA命令。