问题:正如您所看到的,在输出中,input.txt已从文件更改为目录。这怎么可能?在某些情况下,hive中的create table是否表现不同?
我有以下简单的shell脚本来运行hive / hadoop脚本
#!/bin/bash
set -xv
hadoop fs -rmr /user/myloginname/input.txt
hadoop fs -put input.txt /user/myloginname/input.txt
hadoop fs -ls /user/myloginname/
hive -S -f hive_script.hql
hadoop fs -ls /user/myloginname/
hive脚本本身只创建一个外部表
create table if not exists myitems (
item_id string)
LINES TERMINATED BY '\n'
STORED AS TEXTFILE LOCATION '/user/myloginname/input.txt';
select "Number of items in myitems table is ",count(*) from myitems;
input.txt文件本身很简单
cat input.txt
44910429
44657920
36129962
shell脚本的输出如下
hadoop fs -rmr /user/myloginname/input.txt
+ hadoop fs -rmr /user/myloginname/input.txt
Deleted maprfs:/user/myloginname/input.txt
hadoop fs -put input.txt /user/myloginname/input.txt
+ hadoop fs -put input.txt /user/myloginname/input.txt
hadoop fs -ls /user/myloginname/
+ hadoop fs -ls /user/myloginname/
Found 1 items
-rwxr-xr-x 3 myloginname myloginname 550 2015-08-29 00:06 /user/myloginname/input.txt
hive -S -f hive_script.hql
+ hive -S -f hive_script.hql
This is *bfd-main*.
Number of items in myitems table is 0
hadoop fs -ls /user/myloginname/
+ hadoop fs -ls /user/myloginname/
Found 1 items
drwxr-xr-x - myloginname myloginname 0 2015-08-29 00:06 /user/myloginname/input.txt
问题:正如您所看到的,在输出中,input.txt已从文件更改为目录。这怎么可能?在某些情况下,create table的表现是否有所不同?
答案 0 :(得分:1)
每当您创建托管表时,配置单元将尝试以两种方式设置表路径:
a)如果在创建表时在位置指定路径,则该路径将被视为源目录,并且hive将获取该目录下的所有文件以构建表
b)它将采用默认的/user/hive/warehouse
目录,并假设您的表名是员工,然后创建/ user / hive / warehouse / employee目录,然后使用“在路径中加载数据'加载数据”# 39;并且该文件名将位于/ user / hive / warehouse / emp /目录下。
因此,在您的情况下,您告诉配置单元,构建表的所有源文件都在目录/user/myloginname/input.txt
下可用。但是当它开始创建表时,它发现该路径不是目录而是文件。因此它会覆盖并创建一个目录。由于hive创建的目录下没有源文件,因此计数返回0.
将您的位置设为LOCATION /user/myloginname
。