使用本地文件夹作为Hadoop HDFS文件夹是否有任何可行且简单的选择

使用本地文件夹作为Hadoop HDFS文件夹是否有任何可行且简单的选择,hadoop,hive,hdfs,hiveql,Hadoop,Hive,Hdfs,Hiveql,我在一个速度极快的SAN磁盘中有大量文件,我喜欢对它们进行配置单元查询 一个明显的选择是使用如下命令将所有文件复制到HDFS中: hadoop dfs -copyFromLocal /path/to/file/on/filesystem /path/to/input/on/hdfs 但是,我不想创建文件的第二个副本,只是为了在其中进行配置单元查询 有没有办法将HDFS文件夹指向本地文件夹,以便Hadoop将其视为实际的HDFS文件夹?这些文件不断添加到SAN磁盘,因此Hadoop需要在添加新文

我在一个速度极快的SAN磁盘中有大量文件,我喜欢对它们进行配置单元查询

一个明显的选择是使用如下命令将所有文件复制到HDFS中:

hadoop dfs -copyFromLocal /path/to/file/on/filesystem /path/to/input/on/hdfs
但是,我不想创建文件的第二个副本,只是为了在其中进行配置单元查询

有没有办法将HDFS文件夹指向本地文件夹,以便Hadoop将其视为实际的HDFS文件夹?这些文件不断添加到SAN磁盘,因此Hadoop需要在添加新文件时查看它们


这类似于Azure的HDInsight方法,您可以将文件复制到blob存储中,而HDInsight的Hadoop可以通过HDFS查看这些文件。

您可以将HDFS路径装载到本地文件夹中,例如使用HDFS mount 请关注更多信息


但是如果您想要速度,这不是一个选项

您可以将hdfs路径装载到本地文件夹中,例如使用hdfs装载 请关注更多信息


但是如果你想提高速度,就不能选择使用本地文件系统处理小文件,但我不会出于任何其他目的这样做。
将文件放入HDFS意味着将其拆分为块,这些块将被复制和分发。
这将为您提供以后的性能和可用性


可以使用
文件://
将[外部]表的位置定向到本地文件系统
无论它是否顺利运行,还是您将开始出现各种错误,这都有待观察。
请注意,对于演示,我在这里做了一个小技巧,将位置指向一个特定的文件,但您的基本用途可能是目录

演示

create external table etc_passwd 
(
    Username        string
   ,Password        string
   ,User_ID         int
   ,Group_ID        int
   ,User_ID_Info    string
   ,Home_directory  string
   ,shell_command   string
) 
row format delimited
fields terminated by ':'
stored as textfile
location 'file:///etc'
;

alter table etc_passwd set location 'file:///etc/passwd'
;



使用本地文件系统处理小文件可能没问题,但我不会出于任何其他目的这样做。
将文件放入HDFS意味着将其拆分为块,这些块将被复制和分发。
这将为您提供以后的性能和可用性


可以使用
文件://
将[外部]表的位置定向到本地文件系统
无论它是否顺利运行,还是您将开始出现各种错误,这都有待观察。
请注意,对于演示,我在这里做了一个小技巧,将位置指向一个特定的文件,但您的基本用途可能是目录

演示

create external table etc_passwd 
(
    Username        string
   ,Password        string
   ,User_ID         int
   ,Group_ID        int
   ,User_ID_Info    string
   ,Home_directory  string
   ,shell_command   string
) 
row format delimited
fields terminated by ':'
stored as textfile
location 'file:///etc'
;

alter table etc_passwd set location 'file:///etc/passwd'
;



谢谢你的帮助。这个解决方案似乎只适用于蜂巢。有没有办法在HDFS级别做到这一点,这样所有依赖的Hadoop应用程序都不需要知道它是如何存储的?谢谢您的帮助。这个解决方案似乎只适用于蜂巢。有没有办法在HDFS级别做到这一点,这样所有依赖的Hadoop应用程序都不需要知道它是如何存储的?这是一个很好的想法;但是,您提供的示例甚至还没有发布。有什么工具我可以下载和使用吗?你也可以安装hdfs nfs网关,这是一个很好的主意;但是,您提供的示例甚至还没有发布。有什么工具我可以下载和使用吗?你也可以安装hdfs nfs网关
+----------+----------+---------+----------+--------------+-----------------+----------------+
| username | password | user_id | group_id | user_id_info | home_directory  | shell_command  |
+----------+----------+---------+----------+--------------+-----------------+----------------+
| root     | x        |       0 |        0 | root         | /root           | /bin/bash      |
| bin      | x        |       1 |        1 | bin          | /bin            | /sbin/nologin  |
| daemon   | x        |       2 |        2 | daemon       | /sbin           | /sbin/nologin  |
| adm      | x        |       3 |        4 | adm          | /var/adm        | /sbin/nologin  |
| lp       | x        |       4 |        7 | lp           | /var/spool/lpd  | /sbin/nologin  |
| sync     | x        |       5 |        0 | sync         | /sbin           | /bin/sync      |
| shutdown | x        |       6 |        0 | shutdown     | /sbin           | /sbin/shutdown |
| halt     | x        |       7 |        0 | halt         | /sbin           | /sbin/halt     |
| mail     | x        |       8 |       12 | mail         | /var/spool/mail | /sbin/nologin  |
| uucp     | x        |      10 |       14 | uucp         | /var/spool/uucp | /sbin/nologin  |
+----------+----------+---------+----------+--------------+-----------------+----------------+