关于hive中从hdfs上load数据到表中而HDFS上的数据却消失的若干问题

原链接:https://blog.csdn.net/shuaikang666/article/details/80357075

今天偶然间发现hive中一个我之前没有注意到的一个小细节(我怀疑你们之前也可能没有注意到):

那就是当我们试图从HDFS上导入数据到我们自己所创建的表中的时候

load data inpath '/xxx/xxx/test.txt' into table mytable;

发现原来存在于HDFS上的数据/xxx/xxx/test.txt 竟然消失不见了

我试图寻找它的一丝踪迹却发现它消失的无影无踪,它就像一个消失的爱人一样

于是乎查阅网上资料以及自己的动手实践发现:

原来它被移动到我们在hive中所创建的mytable下了,很神奇!我不知道设计hive的那群人为什么要这样搞,我想也许他们是想让我今晚写的博客有干货

【在没有指location时,hive load数据后将会搬移到缺省目录/user/hive/warehouse】

那么我们要想让HDFS上的数据不被移动而老老实实的待在原地踏步,该怎么办呢?

首先请允许我创建一个外部表

create external table if not exists outable(id int,name string)

row format delimited fields terminated by ' ,'

location '/mytable/';

然后我们从本地向 '/mytable/'中插入我们需要的数据

hadoop   fs   -put   test.txt    /mytable

然后这个test.txt就会存在于HDFS上的/mytable下

这时候我们就不用再load data inpath… (向outable插数据)

直接select * from outable;

就会显示出你想要的数据了

很神奇,有木有!


今天在做项目的时候突然想起来这个问题了,原来我之前创建的是hive内部表,内部表会由hive自身来管理这些数据

当执行load data inpath ‘/xxx/xxx/test.txt’ into table mytable; 之后,这个数据就会被移动到/user/hive/warehouse/xxxxx.db

文件夹下面去了。(ps:当你删除这个表的时候,文件夹下面的数据同样会被删除掉) -----------------------2019/09/10

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 将HDFS数据加载到Hive可以通过以下步骤完成: 1. 创建一个Hive表,定义表的结构和字段类型。 2. 使用HiveLOAD DATA命令将HDFS数据加载到Hive。例如: LOAD DATA INPATH '/path/to/hdfs/data' INTO TABLE my_hive_table; 其,/path/to/hdfs/data是HDFS数据的路径,my_hive_table是Hive表的名称。 3. 确认数据已经成功加载到Hive,可以使用SELECT语句查询表数据。 注意:在加载数据之前,需要确保HDFS数据已经按照Hive表的结构进行了格式化和分隔。如果数据格式不正确,可能会导致加载失败或者数据丢失。 ### 回答2: 在使用Hadoop生态系统的过程,经常需要将HDFS数据载入到Hive进行数据处理和分析。Hive是一种数据仓库和数据分析工具,它可以将HDFS数据转换成适合进行SQL查询和分析的数据格式。在这篇文章,我将介绍如何将HDFS数据加载到Hive。 步骤一:创建Hive表 在将数据HDFS导入Hive之前,首先需要创建Hive表格来存储数据Hive表定义文件指定了表的名称、列的名称和数据类型以及存储格式。Hive支持多种存储格式,如AVRO、ORC和PARQUET等。在创建Hive表时,需要注意表格与导入数据的文件格式的匹配。 步骤二:将数据HDFS导入Hive 一旦Hive表创建好了,就可以开始将数据HDFS导入到Hive了。有两种基本的方法可以完成这项任务:使用INSERT INTO语句或使用LOAD DATA语句。 使用INSERT INTO语句进行导入 使用INSERT INTO语句时,需要指定源数据和目标表的位置。INSERT INTO语句会将源数据插入到目标表,所以请确保表和源数据的结构匹配。例如: INSERT INTO TABLE my_table SELECT * FROM hdfs_table; 使用LOAD DATA语句进行导入 LOAD DATA语句是将HDFS文件批量导入到Hive的最简单的方法。在使用LOAD DATA语句之前,需要在HDFS上创建好文件并将其上传到HDFS上。然后,可以使用如下命令将文件导入到HiveLOAD DATA INPATH '/user/hdfs/data.tsv' INTO TABLE my_table; 需要注意的是,这里的路径需要与你在HDFS上存储数据的路径相符。 总结 将HDFS数据载入到Hive是非常有用的操作,可以为数据的处理和分析提供支持。以上就是将HDFS数据loadHive的详细步骤,希望这对你有所帮助。 ### 回答3: HDFS是Hadoop分布式文件系统,是一种高容错性、高性能、高可靠性的分布式存储系统。Hive是基于Hadoop的数据仓库工具,可以将结构化的数据存储在Hadoop的HDFS,并提供类SQL的查询语言。 将HDFS数据loadHive的步骤如下: 1.首先需要在HDFS存储数据。可以使用各种方式将数据传输到HDFS,如使用命令行工具hadoop fs,或使用GUI工具如Hue。 2.在Hive创建一个表来存储HDFS数据,可以使用hive命令行工具或Hue等GUI工具。 3.创建表后,需要设置表的属性,如表的分隔符、列的类型等。可以使用ALTER TABLE命令来修改表的属性。 4.将HDFS数据loadHive的表。可以使用LOAD DATA INPATH命令来将数据加载到表中。 5.如果数据是不同格式的,需要预处理数据,如使用脚本或工具将数据转换为Hive支持的格式。 6.可以使用SQL查询来分析和处理数据。可以使用SELECT、GROUP BY等SQL操作来查询表数据。 总之,将HDFS数据loadHive需要进行一定的设置和处理,但是一旦完成后,就可以使用Hive的强大查询功能来对数据进行分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值