hadoop - 在 HDFS 中上传期间可以读取数据吗?
问题描述
想象一下,XYZ 先生正在将一个 500MB 的文件上传到 Hadoop (HDFS) 中。100MB 数据成功上传到 Hadoop(HDFS) 中,作为客户端的 ABC 先生想在上传过程中读取上传的数据。在这种情况下会发生什么,上传的1000MB数据会显示出来吗?
解决方案
做这样的事情。如果将一个 500MB 的文件上传到 HDFS。如果 100MB 的数据已经在 HDFS 中成功上传,而另一个客户端即将读取上传的数据,而上传仍在进行中。那么会发生什么呢?上传的那100MB数据是否会显示?Hadoop1x 的默认块大小为 64MB,Hadoop2x 的默认块大小为 128MB。
设block-size为100MB,即5个block要复制3次(默认replication-factor)
以下过程描述了如何将块写入 HDFS:
如果我们有 A、B、C、D 和 E 是客户端、文件、名称节点和数据节点的五个块。然后首先,客户端获取块 A 并接近名称节点以获取数据节点位置,以便存储当前块和它的复制副本。一旦数据节点信息可供客户端使用,他将直接到达数据节点并开始复制块 A,同时将复制到第二个数据节点。当块被复制并复制到数据节点时,块 A 存储的确认将到达客户端,然后客户端将重新启动下一个块即块 B 的相同过程。
因此,如果一个客户端正在将 500MB 的文件上传到 HDFS,其中 100MB 的数据已成功上传到 HDFS,而另一个客户端即将读取上传的数据,而上传仍在进行中,那么只有当前块正在写入将不会对读者可见。
推荐阅读
- json - 由 protojson 库生成的 JSON 中未显示 Protobuf 自定义选项
- amazon-web-services - 错误代码:AccessDeniedException。用户:arn:aws:iam::xxx:user/xxx 无权执行:lambda:CreateEventSourceMapping on resource:*
- laravel - 方法 Illuminate\Database\Eloquent\Collection::attach 在 laravel 8 中不存在错误
- python - 如何识别 Python 打开的 MySQL 中打开的连接
- sql - 如何在 .NET Core 的实体框架中的原始 SQL 中添加 CAST
- javascript - 在material-ui中为DatePicker添加自定义按钮
- opencv - 如何在 CUDA 内核中正确操作 CV_16SC3 Mat
- python - 根据当前时间和上次更新时间之间的小时计算时差
- powerapps - Powerapps - 无法从 Flow 获得响应
- ubuntu - 将 postinst 添加到 debian 版本