2013-07-09 48 views

回答

2

Hortonworks' Sandbox可让您通过其HCatalog菜单执行此操作。否则,语法

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/c' SELECT a.* FROM b 

Hive language manual

1

因为你的意图只是为了从HDFS整个文件复制到本地FS,我不建议你通过一个蜂巢查询做到这一点,因为原因如下:

  • 它将启动一个Mapreduce作业,这将比普通副本花费更多的时间。
  • 它会创建不同名称的文件(000000_0, 000001_0 and so on),这将需要您以后手动重命名文件。
  • might打开这些文件时出现的面部问题,因为它们没有任何扩展名。您的操作系统将无法选择应用程序来自行打开这些文件。在这种情况下,您必须重命名文件或手动选择一个应用程序来打开它。

为了避免这些问题,你可以使用HDFS get command

bin/hadoop fs -get /user/hive/warehouse/sample/sample.txt /opt/zxy/sample.txt 

简单不适用方便。但是,如果您需要复制一些选定的数据,则必须使用Hive查询。

HTH

+0

嗨,无论命令我把它显示为空。我尝试copyToLocal并获取命令。我不明白这一部分。为什么我们不能使用copyToLocal命令从此Hive仓库复制到本地系统? – DrewRose

+0

让我看看你的命令 – Tariq

+0

] $ hadoop fs -get /user/hive/warehouse/orders1/orders.txt /opt/nancy/orders.txt get:null – DrewRose

1

我一般直接通过蜂巢对于这种事情在命令行中运行我的查询,管道将它导入本地文件,像这样:

hive -e 'select * from sample' > /opt/zxy/sample.txt 

希望有所帮助。

+0

不,不是。这背后的概念是什么?当我尝试从仓库复制数据时,使用get命令,它会复制或移动仓库中的数据吗?为什么不能使用copyToLocal? – DrewRose

+0

get和copyToLocal都适用于HDFS中的文件。虽然Hive中的数据在技术上存储为HDFS中的文件,但使用Hive查询来提取数据是合理的,而不是试图混淆内部。 –

+0

我必须说我有点困惑,为什么你要从本地加载一个文件到Hive中,然后将完全相同的未经修改的文件提取到本地。 –

相关问题