hive学习日志,分桶表尝试。分桶表关于数据导入遇到的坑,开始是因为出现空分区文件。分桶表创建后,分区文件为空,但有数据能查。最好看总结,前面是尝试记录,有点乱

下面是在尝试找出现空分区文件的原因,大概

hdfs dfs -put /opt/module/hive/datas/student.txt /user/hive/warehouse/stu_buck

stu_buck是表名,文件导入

load data inpath '/student.txt' into table stu_buck;
不管用,分区文件有,但是大小为0

查询也能查到,其实查到的是刚才导入的student.txt文件里的,在导入文件到stu_buck目录下以后,表就能查到信息了,然后运行load data那个,只是建立了分区文件,但文件里是空的,原因我还没有搞明白

load data inpath '/user/hive/warehouse/stu/student.txt' into table stu_buck;

运行这个的话,会出现

[08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask

这个报错,我怀疑是权限问题,因为

load data inpath '/user/hive/student.txt' into table stu;

运行这一句时报错信息一样,这个是我搞错了表

忘了说了,虽然会报错,但会出现

000000_0_copy_1

这个文件,这个里面有东西,不是空的,这是在我没有删表,重新load的情况下出现的,

我去,我换了load data inpath '/user/hive/student.txt' into table stu;也报错了上述信息,我看看是不是因为原本的分区文件没删的缘故

不行,还是失败,原因一样,我再尝试一下把这个表目录下的student.txt删了再试试

还是不行,可能是我没删stu_buck表的原因,我发现表里还有数据,我这次把表删了试试。

好了,运行成功,分区文件在hdfs里也有,我再导入一次,看看报错信息一不一样。

果然,报错信息一样,还在hdfs里生成了原本分区文件名字后面带copy_1的一样的文件。

我又删了分区文件,然后重新导入,这次或许能成功,还是失败,但在我删除了分区文件以后,表里数据本来消失了,这次虽然失败,但表里数据又有了。我接着删除了报错之后有的分区文件,表里数据没了

我又一次删了表,导入student.txt到表的目录下,我要删了这个txt文件,然后看看表里数据还在不在。数据不在了,我接着导入,报错,(我分区文件忘删了,我删了分区文件再试一次),好,报错,也是出来了分区文件,但是空的。这次应该是因为文件不存在,我换另一个不再表的目录里的student.txt文件试试,估计还要报错,因为我一开始忘了生成了空的分区文件,果然,报错了,但是数据插进去了,虽然名字比正常的多了copy_1。

接下来我要尝试删完表目录下的所有文件,然后导入别的目录下的txt文件。失败了,一样的报错信息。我准备删表再次尝试,成功导入,有分区文件,且不为空

我准备再尝试一下第一次就这样load data inpath '/user/hive/warehouse/stu/student.txt' into table stu_buck;导入

换了文件导入的dfs目录,

hdfs dfs -put /opt/module/hive/datas/student.txt /user/hive

没导入到到表里,就可以了

报错信息可能是

oad data inpath '/user/hive/student.txt' into table stu_buck; 我运行的是这一句,然后报错[08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask,但是数据有了

统计信息收集任务失败了,应该是这个原因

禁用自动统计信息收集并重新加载数据

禁用自动统计信息收集,然后重新加载数据:

SET hive.stats.autogather=false;
LOAD DATA INPATH '/user/hive/student.txt' INTO TABLE stu_buck;

不弹报错了,表里多了copy_1副本

删了原本分区文件,只留副本,也有数据,又导入一次,出现了和原本一样的分区文件

删完以后正常能导入,这时我开了自动统计信息收集,然后我又导入一次,这次也没报错,奇怪,我确认我开了自动统计信息收集,又导入一次,也没报错。

我到另一个表就报错,估计是缓存,我尝试了关闭以后弄报错那个表,再开,就也不会报错了

我把hive关了重开也不报错,我重开datagrip试试,也不报错

我新开一个表试试,新表第二次导入就会报错了

删表重新导就可以了,报错就会出来了

我在最早的第一个表试了,删掉所有分区文件,然后导入,第二遍还是不报错,只有删表了

我再试试先弄出来有内容的分区文件,然后往里导入txt那个完整的文件

我再删了分区文件,看看还有没有数据,

我还没删分区文件,发现多了一份数据,txt的,删了txt,表里对应的就会少。

删了分区文件,只剩txt的数据

我再导入试试,表里的txt文件,我看看能不能有带数据的分区文件

报错,然后是空的分区文件

导入别的目录下的试试,删了分区文件,导入后依旧会报错,但有分区文件,数据也有,成了数据加起来的量

我删完所有文件再导,报错,有分区文件和数据

删表,重建,重新从别的目录下的txt文件导入,删分区文件,重新导入,报错。我怀疑有个什么task文件统计信息,那个可能有缓存,没有删掉,只删了分区文件,可能会报错关于统计信息的

又一次尝试

这是忘了一种情况,我把txt文件传到了st表目录下,我去一个新的表里尝试导入这个txt

ok,成功导入,没有报错,也生成了有内容的分区文件。

总结

[08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask

报错信息一直都是上面这个

hdfs dfs -put /opt/module/hive/datas/student.txt /user/hive/warehouse/stu_buck

这一句能成功导入到创建的stu_buck目录里,这个目录其实是创建的分桶表,然后

load data inpath '/student.txt' into table stu_buck;

会出现分区文件,但是是空的,表里也有数据,但这个数据其实是dfs导入的student.txt文件里的删了空的分区文件倒无所谓,删了txt文件,表里就不显示了

可以关掉自动统计信息那个,代码在前面有

这样不会报错,第二次导入会报错可能是跟这个什么统计信息有关,第二次导入可能是会有两份这个,冲突,导致报错,但是不影响分区文件的生成,如果是从别的目录下导入的txt,就是有数据的分区文件。还有就是关了以后再打开,不管你导入几次都不会再报错,除非你删表重建重新导,你重开hive都不管。

你第二次导入会生成和原本的分区文件名字基本一样,只是多了copy_1而已的新的分区文件,这个数据也是一样的,而且不会重复,和下面这种情况一样(这里最后一句有问题)

先弄出来有数据的分区文件,然后再用dfs -put导入txt文件,会出现两份数据在表里,就累计加起来了,你在hdfs目录里删哪一个,表里就会少哪一个。与copy_1的文件情况不同,这个数据会重复,copy_1的不会重复出现在表中,

!!!改正,copy_1的数据也会出现,上面那句是错误的,copy_1的数据也是会重复出现的。之前测试的时候是有空的分区文件,是我的疏忽。

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值