【问题标题】:Hive External TableHive 外部表
【发布时间】:2014-10-14 20:41:04
【问题描述】:

我正在尝试使用 sqoop 将数据从 Oracle 导入 Hive。
我用过一次下面的命令,现在我想用新数据覆盖现有数据(日常操作)。
我再次运行了这个命令。

sqoop import --connect jdbc:oracle:thin:@UK01WRS6014:2184:WWSYOIT1 
--username HIVE --password hive --table OIDS.ALLOCATION_SESSION_DIMN 
--hive-overwrite --hive-database OI_DB --hive-table ALLOCATION_SESSION_DIMN  

但是我得到一个错误文件已经存在:

14/10/14 07:43:59 ERROR security.UserGroupInformation: 
PriviledgedActionException as:axchat 
(auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: 
Output directory 
hdfs://uslibeiadg004.aceina.com:8020/user/axchat/OIDS.ALLOCATION_SESSION_DIMN 
already exists

我在 hive 中创建的表都是外部表。 像 mapreduce 一样,我们每次执行相同的命令时都必须删除那个文件吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    当您从 EXTERNAL 表中删除时,您只会删除 Hive 元存储中的对象:您不会删除叠加该表的文件。非外部表仅属于 Hive,删除后将导致 Metastore-AND HDFS 数据被删除。

    因此,您可以尝试显式删除 HDFS 数据,或者将表定义为 hive 内部。

    【讨论】:

    • 就我而言,因为我已经在 hive 中创建了外部表结构,然后使用 --hive-overwrite 将数据导入到这些外部表中。我不知道为什么会收到 FileAlreadyExists 错误。它不应该给出错误,因为我会覆盖它。我说的对吗?
    • 你有hive覆盖,但没有hdfs覆盖。
    • @devek - 如果我删除那些外部表,重新创建托管表,导入数据,它将正常加载。再次,如果我使用 --hive-overwrite 导入数据,我不应该得到 FileAlreadyExists 错误。我说的对吗?
    • @aiman:如果你有外部表,那么hive没有有权删除hdfs中的底层表,只有metastore中的表定义。只有当表在 hive 内部时,您才能这样做。
    • okk...意味着我必须创建托管表才能使用 --hive-overwrite。谢谢 davek :D ...帮助
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多