hdfs根目录的结构:
可见,/user/hive/warehouse/下存放着具体的hive表的数据仓库存储位置。这个路径跟前面的配置有关:
hive-site.xml中hive.metastore.warehouse.dir为:hdfs://192.168.7.151:9000/user/hive/warehouse
/flume存放的是flume原始数据。
上图上标红的
文件原本是在hdfs://bg01:9000/flume/data/2018-06-06/下的,而现在没有了:
可能是因为之前执行了hive表的load数据导致的:
hive> load data inpath 'hdfs://192.168.7.151:9000/flume/data/2018-06-06/d_.1528246769709' into table tablezm;
成功!
Loading data to table default.tablezm
Table default.tablezm stats: [numFiles=1, totalSize=13507]
OK
现在测试一下:
目前hdfs://bg01:9000/flume/data/2018-06-06/下只有一个文件d_.1528257828250
可见,数据文件d_.1528257828250被从flume目录下转移到了hive目录下。
另一个问题:
原数据文件中数据格式如下:
前三行被空格space分割成了5部分。所以在创建表的时候,创建了5个字段以存储:
可是结果并没有如预想的:
看建表语句:
row format delimited 一行的格式被限定,用来设置创建的表在加载数据的时候支持列分隔符。
fields terminated by '\t' 以制表符\t 作为列分隔符(\t制表符 \n换行符)。
正是此问题所在。数据文件中数据是以空格\s为分隔符的。
为验证,
准备数据:
创建表并load data:
报错,
[bg@BG01 ~]$ hdfs dfs -put /home/bg/t.txt hdfs://192.168.7.151:9000/tmp/
又失败!
hive> create table tablezm4(a string,b string,c string) row format delimited fields terminated by '\001' stored as textfile;
仍然失败!
数据文件中数据以制表符分割则可以成功: