hadoop - 是否有任何可行且简单的选项将本地文件夹用作 Hadoop HDFS 文件夹

标签 hadoop hive hdfs hiveql

我在速度极快的 SAN 磁盘中有大量文件,我喜欢对它们进行 Hive 查询。

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

hadoop dfs -copyFromLocal /path/to/file/on/filesystem /path/to/input/on/hdfs

但是,我不想创建我的文件的第二个副本,只是为了在其中进行 Hive 查询。

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

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

最佳答案

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


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

演示

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'
;

select * from  etc_passwd limit 10
;

+----------+----------+---------+----------+--------------+-----------------+----------------+
| 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  |
+----------+----------+---------+----------+--------------+-----------------+----------------+

关于hadoop - 是否有任何可行且简单的选项将本地文件夹用作 Hadoop HDFS 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44140658/

相关文章:

python - Hadoop错误流

hadoop - 我在哪里运行 spark - 独立、Hadoop 或 Mesos

hadoop - AvroStorage以本地模式存储到hdfs中

hadoop - 是否可以在配置单元中执行 'normalized' dense_rank()?

apache-spark - 触发流无法写入hdfs路径

hadoop - 谁访问了 Hive 表或 HDFS 目录

hadoop - Hadoop输入拆分转储

hadoop - Hadoop 2节点集群

hadoop - Cloudera Imala - 它是否支持存储过程/函数或 SQL block ?

hadoop - 如何在Hive中创建随机分区的数据