从Hadoop提供静态文件
我的工作是为静态图像/视频文件设计一个分布式系统。数据的大小约为数十TB。它主要用于HTTP访问(因此不需要对数据进行处理;或者只进行简单的处理,比如调整大小——但是这并不重要,因为它可以直接在应用程序中完成) 更清楚一点,这是一个系统:从Hadoop提供静态文件,hadoop,mapreduce,scalability,distributed,weed-fs,Hadoop,Mapreduce,Scalability,Distributed,Weed Fs,我的工作是为静态图像/视频文件设计一个分布式系统。数据的大小约为数十TB。它主要用于HTTP访问(因此不需要对数据进行处理;或者只进行简单的处理,比如调整大小——但是这并不重要,因为它可以直接在应用程序中完成) 更清楚一点,这是一个系统: 必须是分布式的(水平规模),因为数据的总大小非常大 主要通过HTTP提供小型静态文件(如图像、缩略图、短视频) 一般情况下,不需要处理数据(因此不需要MapReduce) 对数据设置HTTP访问很容易 (应该有)良好的吞吐量 我正在考虑: 本机网络文件系统:但
有什么建议吗?Hadoop有一个访问文件的RESTAPI。请参阅文档中的条目。我觉得Hadoop不是用来存储大量小文件的
- HDFS不能有效地访问小文件:它主要是为大文件的流式访问而设计的。读取小文件通常会导致大量的搜索和从datanode到datanode的大量跳转来检索每个小文件,所有这些都是一种低效的数据访问模式
- HDFS中的每个文件、目录和块都表示为namenode内存中的一个对象,每个对象占用150字节。块大小为64 mb。因此,即使文件大小为10kb,也会为其分配一个64MB的整个块。那是浪费磁盘空间
- 如果文件非常小,并且有很多,那么每个映射任务处理的输入非常少,并且有更多的映射任务,每个任务都会带来额外的簿记开销。将1GB文件分为16个64MB块的文件和10000个左右100KB的文件进行比较。10000个文件每个使用一个映射,作业时间可能比使用单个输入文件的等效文件慢几十倍或数百倍
这让我想到了:一个以Haystacks的设计为灵感的开源项目。它专为存储文件而定制。到目前为止我还没有使用过它,但似乎值得一试。Hadoop针对大文件进行了优化,例如,它的默认块大小为64M。在Hadoop上,许多小文件既浪费又难以管理
您可以查看其他分布式文件系统,例如如果您能够对文件进行批处理,并且在添加到HDFS后不需要更新批处理,那么您可以将多个小文件编译成一个较大的二进制序列文件。这是在HDFS中存储小文件的一种更有效的方法(正如Arnon在上面指出的,HDFS是为大文件设计的,在处理小文件时效率非常低) 这是我在使用Hadoop处理CT图像时采用的方法(详细信息见)。在这里,225个CT扫描切片(每个都是单独的图像)被编译成一个更大的二进制序列文件,用于长时间流式读取到Hadoop中进行处理 希望这有帮助
我是《野草》的作者。对于您的需求,WeedFS是理想的选择。Hadoop不能处理很多小文件,除了您的原因,每个文件都需要在主文件中有一个条目。如果文件数量很大,hdfs主节点无法扩展 使用最新的Golang版本编译时,Weed FS的速度越来越快 最近对杂草FS进行了许多新的改进。现在,您可以非常轻松地使用内置上传工具进行测试和比较。这一个递归地上传目录下的所有文件
weed upload -dir=/some/directory
现在您可以通过“du-k/some/directory”查看磁盘使用情况,通过“ls-l/your/weed/volume/directory”查看weed-FS磁盘使用情况
我想您需要使用数据中心、机架感知等进行复制。它们现在已经存在 嗨,Chris,我一直在探索分布式fs的可用选项,以便为图像和杂草提供更好的服务。我想知道在weed中转储文件而不将其组织到文件夹中是否有任何缺点。我是新来的,没有太多的信息,这就是我直接联系你的原因。急切地等待你的答复。另外,请给我一个配置xml的示例。我使用的是ubuntu、jdk-8,通过一个由zhangxuYou编写的java客户端连接。您需要有一个地方来存储上传文件生成的文件ID。如果需要遍历文件夹,可能还可以将文件夹与文件ID一起存储。或者您可以使用杂草fs文件管理器。