Hadoop Hdfs放与webhdfs

Hadoop Hdfs放与webhdfs,hadoop,hdfs,webhdfs,Hadoop,Hdfs,Webhdfs,我使用webhdfs在hadoop hdfs中加载28 GB的文件,加载大约需要25分钟 我尝试使用hdfs put加载同一个文件,花了大约6分钟。为什么在性能上有如此大的差异 建议使用什么?谁能给我解释一下或者给我指点一些好的链接,这会很有帮助的 在我们下面是我正在使用的命令 curl -i --negotiate -u: -X PUT "http://$hostname:$port/webhdfs/v1/$destination_file_location/$source_filename.

我使用webhdfs在hadoop hdfs中加载28 GB的文件,加载大约需要25分钟

我尝试使用hdfs put加载同一个文件,花了大约6分钟。为什么在性能上有如此大的差异

建议使用什么?谁能给我解释一下或者给我指点一些好的链接,这会很有帮助的

在我们下面是我正在使用的命令

curl -i --negotiate -u: -X PUT "http://$hostname:$port/webhdfs/v1/$destination_file_location/$source_filename.temp?op=CREATE&overwrite=true"
这将重定向到datanode地址,我将在下一步中使用该地址写入数据

Hadoop提供了几种访问HDF的方法

以下所有功能几乎都支持文件系统的所有功能-

1。文件系统(FS)shell命令:提供了对Hadoop文件系统操作以及Hadoop支持的其他文件系统的轻松访问 支持本地FS、HFTP FS、S3 FS等。
这需要安装hadoop客户端,并且需要客户端写入块 直接连接到一个数据节点。Hadoop的所有版本都不支持在文件系统之间进行复制的所有选项

2。WebHDFS:它定义了一个公共HTTP REST API,允许客户端从多种语言访问Hadoop,而无需安装 Hadoop的优点是语言不可知(curl、php等)。
WebHDFS需要访问集群的所有节点,并且在某些数据丢失时需要访问这些节点 读取时,它直接从源节点传输,但有开销 (1)FS外壳,但工作不可知,不同的hadoop集群和版本没有问题

3。HttpFS。在防火墙后面的集群中向HDFS读写数据。单个节点将充当网关节点,所有 数据将被传输,性能方面我相信这是可以做到的 当需要将数据从公共源拉入安全集群时,速度更慢但更可取


所以选择正确!。。当您无法选择上面的选项时,向下列表将始终是一种选择。

Hadoop提供了一个文件系统外壳API来支持文件系统操作,如创建、重命名或删除文件和目录、打开、读取或写入文件。 文件系统外壳是一个java应用程序,它使用java文件系统类 提供文件系统操作。文件系统外壳API为操作创建RPC连接

如果客户端位于Hadoop集群内,那么这很有用,因为它使用
hdfs
URI方案与Hadoop分布式文件系统连接,因此客户端进行直接RPC连接以将数据写入hdfs

这对于在Hadoop集群中运行的应用程序来说是很好的,但是在某些情况下,外部应用程序可能需要操作HDFS,就像它需要创建目录并将文件写入该目录或读取存储在HDFS上的文件的内容一样。Hortonworks开发了一个API来支持这些基于标准REST功能(称为WebHDFS)的需求

WebHDFS提供RESTAPI功能,任何外部应用程序都可以通过HTTP连接连接分布式文件系统。不管外部应用程序是Java还是PHP

WebHDFS的概念基于HTTP操作,如GET、PUT、POST和DELETE。 OPEN、GETFILESTATUS、LISTSTATUS等操作使用httpget,CREATE、MKDIRS、RENAME、SETPERMISSIONS等其他操作依赖于httpput

它通过HTTP提供对HDFS的安全读写访问。这基本上是有意的 作为HFTP(HTTP上的只读访问)和HSFTP(HTTPS上的只读访问)的替代,它使用
webhdfs
URI方案与分布式文件系统连接


如果客户端在Hadoop集群之外,并试图访问HDFS。WebHDFS非常有用。另外,如果您试图连接两个不同版本的Hadoop群集,那么WebHDFS非常有用,因为它使用REST API,因此它独立于MapReduce或HDFS版本。

您可以使用传统的java客户端API(HDFS的linux命令正在内部使用)

从我读到的


java客户端和基于Rest的方法的性能相似。

HDFS访问和WebHDFS之间的区别在于可伸缩性,这是由于HDFS的设计以及HDFS客户端将文件分解为位于不同节点上的拆分。当HDFS客户机访问文件内容时,它会在封面下转到NameNode并获取文件拆分列表及其在Hadoop集群上的物理位置

然后,它可以在所有这些位置上运行数据节点,并行地获取分割中的块,将内容直接传输到客户端


WebHDFS是一个位于HDFS集群中的代理,它在HDFS上分层,因此所有数据都需要流式传输到代理,然后才能中继到WebHDFS客户端。本质上,它变成了一个单点访问和IO瓶颈。

您也可以为webhdfs编写命令吗?谢谢Ruby。您能详细解释一下为什么会有巨大的性能差异吗?