背景
之前的工作中使用Hive一直都是用的内表,对于外表一直都没有正经研究过,最近偶尔使用了一次,就整出了不小的麻烦,而且发现是跟HDFS权限有关,然而就发现关于HDFS的权限问题理解的还是太少了,所以把问题整理一下。一,Hive外表加载HDFS文件错误
场景是这样的:首先在Hive中新建一张外表DROP TABLE IF EXISTS quickstart;
CREATE EXTERNAL TABLE quickstart (a INT, b STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|';
然后试图用load语句把数据加载到这张表:
LOAD DATA LOCAL INPATH '/root/quickstart.txt' OVERWRITE INTO TABLE quickstart;
此时当然是会报错的啦,因为这里的local指的是 hive server所在机器的lcoal,访问方式应该类似于/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/quickstart.txt这种格式才对。
因为感觉写法比较麻烦,于是决定还是上传到HDFS上好了:
hadoop fs -put /root/quickstart.txt /tmp/quickstart.txt
然后再执行load命令:
LOAD DATA INPATH '/tmp/quickstart.txt' OVERWRITE INTO TABLE quickstart;
上面这条语句给出的错误是: