我使用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地址。
答案 0 :(得分:14)
Hadoop提供了几种访问HDFS的方法
以下所有内容几乎支持文件系统的所有功能 -
<强> 1。 FileSystem(FS)shell命令:提供Hadoop文件系统操作以及Hadoop的其他文件系统的轻松访问 支持,如本地FS,HFTP FS,S3 FS 这需要安装 hadoop客户端并让客户端编写块 直接到一个数据节点。所有版本的Hadoop都不支持在文件系统之间进行复制的所有选项。
<强> 2。 WebHDFS:它定义了一个公共HTTP REST API,允许客户端从多种语言访问Hadoop而无需安装 Hadoop,Advantage是语言无关的方式(curl,php等......) WebHDFS需要访问集群的所有节点以及某些数据 读取,它直接从源节点传输但有开销 of http over (1)FS Shell但非常适用于不同的hadoop集群和版本。
第3。 HttpFS。在防火墙后面的集群中读取和写入数据到HDFS。单个节点将充当GateWay节点,通过它所有的节点 数据将被转移和性能明智我相信这可以 需要将数据从公共源提取到安全集群时,速度更快但更受欢迎。
所以选择正确!当你无法选择上面的选择时,下面的列表将永远是另一种选择。
答案 1 :(得分:6)
Hadoop提供FileSystem Shell API以支持文件系统操作,例如创建,重命名或删除文件和目录,打开,读取或写入文件。 FileSystem shell是一个使用java FileSystem类的java应用程序 提供FileSystem操作。 FileSystem Shell API为操作创建RPC连接。
如果客户端在Hadoop集群中,那么这很有用,因为它使用hdfs
URI方案连接hadoop分布式文件系统,因此客户端建立直接RPC连接以将数据写入HDFS。
这对于在Hadoop集群中运行的应用程序很有用,但可能存在外部应用程序需要操作HDFS的用例,例如它需要创建目录并将文件写入该目录或读取存储在HDFS上的文件的内容。 Hortonworks开发了一个API,以支持基于称为WebHDFS的标准REST功能的这些要求。
WebHDFS提供REST API功能,任何外部应用程序都可以通过HTTP连接连接DistributedFileSystem。无论外部应用程序是Java还是PHP。
WebHDFS概念基于HTTP操作,如GET,PUT,POST和DELETE。 像OPEN,GETFILESTATUS,LISTSTATUS这样的操作正在使用HTTP GET,其他如CREATE,MKDIRS,RENAME,SETPERMISSIONS都依赖于HTTP PUT
它通过HTTP提供对HDFS的安全读写访问。它基本上是有意的
作为HFTP(通过HTTP的只读访问)和HSFTP(通过HTTPS进行只读访问)的替代。它使用webhdfs
URI方案连接分布式文件系统。
如果客户端位于Hadoop群集之外并尝试访问HDFS。 WebHDFS对它很有用。如果你试图连接两个不同版本的Hadoop集群,那么WebHDFS是有用的,因为它使用REST API,因此它独立于MapReduce或HDFS版本。
答案 2 :(得分:4)
HDFS访问和WebHDFS之间的区别在于可扩展性,这是由于HDFS的设计以及HDFS客户端将文件分解为生活在不同节点中的分割这一事实。当HDFS客户端访问文件内容时,它会转到NameNode并获取Hadoop集群上的文件拆分列表及其物理位置。
然后,它可以继续在所有这些位置上生成DataNodes,以并行获取分割中的块,将内容直接传送到客户端。
WebHDFS是一个生活在HDFS集群中的代理,它在HDFS上分层,因此在将所有数据中继到WebHDFS客户端之前,所有数据都需要流式传输到代理。实质上,它成为单一访问点和IO瓶颈。
答案 3 :(得分:1)