HDFS上文件块的副本数设置

一、使用 setrep 命令来设置

# 设置 /javafx-src.zip 的文件块只存三份
hadoop fs -setrep 3 /javafx-src.zip

二、文件块在磁盘上的路径

# 设置的 hdfs 目录为/opt/hadoop-tmp/
# hdfs 文件块的路径为
/opt/hadoop-tmp/dfs/data/current/BP-362764591-192.168.8.136-1554970906073/current/finalized/subdir0/subdir0

三、文件的分割

文件大小 < 块设定值,文件不会被切割,直接存放到 hdfs 上,占用磁盘的空间就是文件大小文件大小 > 块设定值,文件被切割为块大小的 N 份文件,最后一份不够块大小也上面一样,只占用本身大小的磁盘空间

下图可以看到该文件副本为 3 份,分别存放在 h140、h138 和 h136 三台机器上

四、改变副本数后的文件的变化

# 减少,会随机删除一个机器上的文件块,这里是删除了 h136 上的
hadoop fs -setrep 2 /javafx-src.zip

# 增加,由于只配置了三台机器无法截图
# 分两种情况:
# 机器数量 >= 副本数,会把所有文件块复制到新节点
# 机器数量 <  副本数,会等有新节点增加再执行复制操作,一直到达副本数为止
# 文件块的副本数储存在 NameNode 上
hadoop fs -setrep 5 /javafx-src.zip

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

原文地址:https://www.cnblogs.com/jhxxb/p/10693533.html

时间: 2024-08-29 17:32:02

HDFS上文件块的副本数设置的相关文章

向Hive中导入HDFS上文件时要注意的问题

前几天往HDFS写文件写的时候把文件名起成了.aaa.txt,这样本来是可以的,上传到HDFS也是没有任务问题的,但是将这个文件与Hive进行关联的时候却出现问题了,并不是导入的时候报错了,是导入的时候什么也没有报,默认已为成功了,但是Hive中怎么都查不到数据,反复了好多次,最后把文件名改成了aaa.txt,问题解决了,难道Hive不认以.开头的文件?其实并不是不认,因为在Linux中以.打头的文件或文件夹都是隐藏的,用ls是查不到的,只有用ll才能看到,这就是关联后,为什么在Hive中查不到

shell脚本监控Flume输出到HDFS上文件合法性

在使用flume中发现由于网络.HDFS等其它原因,使得经过Flume收集到HDFS上得日志有一些异常,表现为: 1.有未关闭的文件:以tmp(默认)结尾的文件.加入存到HDFS上得文件应该是gz压缩文件,以tmp为结尾的文件就无法使用: 2.有大小为0的文件,比如gz压缩文件大小为0,我们单独拿下这个文件解压发现是无限循环压缩的...这个也不能直接用来跑mapreduce 目前发现上述两种情况,其它还暂未发现.至于出现上述情况还没明确原因,且这两种情况都会影响hive.MapReduce的正常

通过spark sql 将 hdfs上文件导入到mongodb

功能:通过spark sql 将hdfs 中文件导入到mongdo 所需jar包有:mongo-spark-connector_2.11-2.1.2.jar.mongo-java-driver-3.8.0.jar scala代码如下: import org.apache.spark.sql.Rowimport org.apache.spark.sql.Datasetimport org.apache.spark.SparkContextimport org.apache.spark.sql.SQ

HDFS读文件过程分析:读取文件的Block数据

转自http://shiyanjun.cn/archives/962.html 我们可以从java.io.InputStream类中看到,抽象出一个read方法,用来读取已经打开的InputStream实例中的字节,每次调用read方法,会读取一个字节数据,该方法抽象定义,如下所示:public abstract int read() throws IOException;Hadoop的DFSClient.DFSInputStream类实现了该抽象逻辑,如果我们清楚了如何从HDFS中读取一个文件

HDFS的文件操作

格式化HDFS 命令:[email protected]:Hadoop$bin/hadoop namenode -format 启动HDFS 命令:[email protected]:hadoop$bin/start-dfs.sh 列出HDFS上的文件 命令:[email protected]:hadoop$bin/hadoop dfs -ls 使用hadoop API public List<String[]>GetFileBolckHost(Configuration conf, Stri

利用JavaAPI访问HDFS的文件

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

设置hdfs和hbase副本数。hadoop2.5.2 hbase0.98.6

hdfs副本和基本读写. core-site.xmlhdfs-site.xml 从/etc/hdfs1/conf下拷贝到工作空间 import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.

【转载】HDFS 上传文件不均衡和Balancer太慢的问题

向HDFS上传文件,如果是从某个datanode开始上传文件,会导致上传的数据优先写满当前datanode的磁盘,这对于运行分布式程序是非常不利的. 解决的办法: 1.从其他非datanode节点上传 可以将hadoop的安装目录复制一份到一个不在集群中的节点(直接从非datanode的namenode上传也可以,但是这样不太好,会增加namenode的负担,并且时间长了会让namenode上放了各种乱七八糟的文件),在这个节点上不启动任何hadoop进程,但是可以当作客户端使用.上传文件到集群

HDFS 上传文件不均衡和Balancer太慢的问题

向HDFS上传文件,如果是从某个datanode开始上传文件,会导致上传的数据优先写满当前datanode的磁盘,这对于运行分布式程序是非常不利的. 解决的办法: 1.从其他非datanode节点上传 可以将hadoop的安装目录复制一份到一个不在集群中的节点(直接从非datanode的namenode上传也可以,但是这样不太好,会增加namenode的负担,并且时间长了会让namenode上放了各种乱七八糟的文件),在这个节点上不启动任何hadoop进程,但是可以当作客户端使用.上传文件到集群