副本和块大小设置
块大小的默认值:128M,dfs.blocksize
块大小最小值默认值:1 Mdfs.namenode.fs-limits.min-block-size
块大小最小值约束:必须是512整倍数。
hdfs写入过程
DFSPacket:chunk(原生数据512 + 校验和4)
最多的126chunk数量。
//设置多少字节进行一次校验。
io.bytes.per.checksum=512
压缩
DefaultCodec
DeflateCodec
Bzip2(切割,MapReduce)
gzip
LZO
lz4
snappy
lz4 < lzo < .... Bzip2
SequenceFile
二进制。
key-value
没有按key排序。
sort() 产生新seq文件
可切割.
同步点。
sync(3456) ; //
支持压缩 //1:None 2:record(value) 3:block(全压缩)
Writable
out.write(in) ;
har命令实现归档
大量小文件,占用大量的NN的资源。
每个文件大概占用NN的 <=> 150字节
$>hadoop archive -archiveName my.har -p /user/centos /user/out
DFSPacket创建剖析
//
DFSOutputStream.computePacketChunkSize(dfsClient.getConf().writePacketSize, bytesPerChecksum){
}
DFSOutputStream.computePacketChunkSize(int psize, int csize){
//给packetSize赋值
final int bodySize = psize - PacketHeader.PKT_MAX_HEADER_LEN;
//
final int chunkSize = csize + getChecksumSize();//512 + 4
chunksPerPacket = Math.max(bodySize/chunkSize, 1);
//
DFSOutputStream.packetSize = chunkSize*chunksPerPacket;//126 * 512
}
DFSOutputStream.writeChunkImpl(packetSize,);
--> DFSOutputStream.createPacket(packetSize,);
xml
extended markup language,可扩展编辑语言。
<?xml version="1.0"?>
<configuration>
<property>
<name>ds.defaultFS</name>
<value>hdfs://s201:8020</value>
</property>
<property>
<name>ds.defaultFS</name>
<value>hdfs://s201:8020</value>
</property>
</configuration>
MapFile
对SeqFile的组合运用,key必须按key写入。否则异常。
生成一个目录,内含index和data两个文件。
此两个文件均是SequenceFile。
index文件是key -> 同步点的映射。
data文件就是key-value映射。
查找速度快。
修改hadoop.tmp.dir属性
1.停止hadoop集群
2.修改文件
[core-site.xml]
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop/full</value>
</property>
3.分发文件
$>cd /soft/hadoop/etc/hadoop
$>xsync.sh core-site.xml
4.删除所有主机/home/centos/hadoop/full和hadoop的日志
$>xcall.sh "rm -rf /home/centos/hadoop/full/*"
$>xcall.sh "rm -rf /soft/hadoop/logs/*"
5.重新格式化文件系统
$>hadoop namenode -format
6.启动hadoop集群。
$>start-dfs.sh
修改linux提示符
[/etc/profile]
...
export PS1='[\u@\h `pwd`]\$'
...
名称节点
[文件]
[镜像文件]
/home/centos/hadoop/full/dfs/name/current/fsimage_0000000000000000002
[编辑日志]
/home/centos/hadoop/full/dfs/name/current/edits_0000000000000000001-0000000000000000002
hdfs oiv命令查看fsimage镜像文件 hdfs oiv
镜像文件中存放的元数据,目录、权限、时间、副本数、块大小、上下级关系。
每个目录或者文件都对应一个节点(inode)。
//查看镜像文件
//offline image viewer
$>hdfs oiv -i fsimage_0000000000000000002 -o 1.xml -p XML //-p,processor处理器,用于指定使用哪种image处理器,此处使用XML.
//i:inputFile, o:outputFile
//查看编辑日志
//编辑日志存放时对hdfs的操作过程.都有操作编号(txid);
//offline edit viewer
$>hdfs oev -i edits_0000000000000000001-0000000000000000002 -o 2.xml -p XML
High HA :
名称节点配置多个存放目录
保证安全性。最好放在不同的磁盘下
每个目录都是一个备份。
写入数据时,同时向所有目录写入数据。
[hdfs-site.xml]
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value>
</property>
在名称节点上配置后要进行分发,所有数据节点上都使用。
数据节点配置多个存放目录
保证安全性。
多个目录是为了扩容。
[hdfs-site.xml]
dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2
在使用中都需对/home/centos/hadoop/full/* 进行清理,然后清楚日志,最后进行格式化(hadooop namenode -format).
RAID
磁盘冗余阵列.
Redundant Array of Independent Disks
阈值
阀值
名称和辅助名称名称节点对检查点的控制
1.2nn请求nn滚动日志
nn会创建新的edit(/edits_inprogress_0000000000000000003)
2.2nn复制nn的fsimag_x + edit_x + 1)
3.2nn在本地进行merge(合并),产生新的检查点文件(镜像文件。)
4.2nn回传检查点文件给nn
5.nn上对检查点文件进行重命名,fsimage_xxx
6.2nn每隔一小时(fs.checkpoint.period)创建检查点,如果编辑日志大小达到64M,也可以创建检查点。
2nn每隔5分钟检查编辑日志大小。
[hdfs-site.xml]
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints.
</description>
</property>
[hdfs-site.xml]
<property>
<!-- 如果操作的动作达到了1000000,不论是否到达一小时,都会创建检查点。 -->
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>The Secondary NameNode or CheckpointNode will create a checkpoint
of the namespace every 'dfs.namenode.checkpoint.txns' transactions, regardless
of whether 'dfs.namenode.checkpoint.period' has expired.
</description>
</property>
<!-- 2nn每隔60秒检查动作次数。 -->
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description>The SecondaryNameNode and CheckpointNode will poll the NameNode
every 'dfs.namenode.checkpoint.check.period' seconds to query the number
of uncheckpointed transactions.
</description>
</property>
<!-- 控制保留检查点文件的个数。 fsimage的个数-->
<property>
<name>dfs.namenode.num.checkpoints.retained</name>
<value>2</value>
</property>
metasave
帮助命令 hdfs dfsadmin -help metasave
保存名称节点的元数据信息到日志所在目录下.
$>cd /soft/hadoop/logs
$>hdfs dfsadmin -metasave x.log
手动滚动编辑日志
$>hdfs dfsadmin //查看dfsadmin的所有命令
$>hdfs dfsadmin -help rollEdits //查看指定命令的帮助
$>hdfs dfsadmin -rollEdits
手动保存名字空间
保存镜像文件。
$>hdfs dfsadmin -saveNamespace //在NN的本地目录完成镜像文件的保存。
安全模式
hdfs系统的一种状态,该状态不能写操作。
集群启动时,首先进入安全模式,启动完成退出安全模式。
$>hdfs dfsadmin -safemode get //查看安全模式状态
$>hdfs dfsadmin -safemode enter //进入安全模式状态
$>hdfs dfsadmin -safemode leave //离开安全模式状态
$>hdfs dfsadmin -safemode wait //等待安全模式状态,阻塞状态,离开安全模式后,继续执行。