从Cloudera VM中的HDFS将数据加载到Hive表中

时间:2017-12-18 15:08:25

标签: hadoop hive hdfs cloudera-cdh cloudera-quickstart-vm

使用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中,因此我不知道为什么会出现此错误或如何修复它。

1 个答案:

答案 0 :(得分:1)

  

如何访问HDFS中的信息

嗯,你当然不需要使用Hive来做到这一点。 hdfs dfs命令是您与HDFS交互的方式。

  

我不确定那是什么,但它似乎不是HDFS的根目录

它是HDFS的根源。 quickstart.cloudera是VM的主机名。端口8020是HDFS端口。

您的例外情况来自使用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命令。