Hadoop的配置文件被拆分为core-site.xml hdfs-site.xml mapred-site.xml
其中的core-site.xml hdfs-site.xml
是站在HDFS角度上的配置文件;core-site.xml mapred-site.xml
是站在MapReduce角度上的配置文件。
HDFS 的设计前提与目标
1 硬件错误是常态而不是异常
2 流式数据访问, 运行在HDFS的应用主要是以流式数据读取为主, 做批量处理而不是用户交互处理。 因此HDFS更关注数据访问的高吞吐量。
3大规模数据集。HDFS的典型文件大小可能在GB甚至TB级别,因此HDFS支持大文件存储,并提供整体上高的数据传输带宽,能在一个集群里扩展数百个结点。
4简单一致性模型。 HDFS的应用程序要对文件实行一次性写,多次读的访问模式。
5 移动计算比移动数据更划算。对于大文件来说,如果在数据旁操作,那么效率会比较高。 特别是数据非常大的时候效果更加明显,可以减少网络的拥塞和提高系统的吞吐量。这就意味着,把计算迁移到数据的附近更好。而不是把数据传输到程序运行的地方。
HDFS是一个主从体系,集群拥有一个NameNode和一些DataNodes。NameNode管理文件系统的元数据。DataNode存储实际的数据。客户端通过与NameNode和DataNode交互访问文件系统。联系NameNode获得文件的元数据, 真正的IO操作直接和DataNode来交互的。
HDFS的文件通常是按照64MB切分成不同的数据块(Block), 每个数据块尽可能的分散存储于不同的DataNode中
NameNode使用事务日志(EditLog)来记录HDFS元数据的变化,使用映象文件(FsImage)存储文件系统的命名空间,包含文件的映射,属性等。日志和映象文件都存储在NameNode的本地文件系统中。
NameNode启动时,从磁盘中读取映象文件和事务日志,把事务日志的事务都应用到内存的映象文件中。然后将新的元数据刷新到本地磁盘的新的映象文件中,这样可以截去旧的事务日志,这个过程称为检查点(Checkpoint)。HDFS还设有SecondaryNameNode节点,它辅助NameNode处理映象文件和事务日志。NameNode启动的时候合并映象文件和事务日志,而Secondary NameNode会周期性的从NameNode上复制映象文件和事务日志到临时目录。合并生成新的文件再重新上传到NameNode。NameNode更新映象文件并清理事务日志。控制事务日志的大小。
HDFS可靠性措施
1 冗余备份
2 副本存放
3 心跳检测
4 安全模式
5 数据完整性检测
6 空间回收
7 元数据磁盘失效 映象文件和事务日志是HDFS的核心数据结构,如果这些文件损坏,将导致HDFS不可用。NameNode可以配置为支持维护映象文件和事务日志的多个副本,任何改动将同步到它们的副本中
8 快照//目前还不支持
HDFS下的文件操作
1列出HDFS文件
hdfs dfs -ls
要注意在HDFS中没有当前工作目录着一个概念,也没有cd这个命令。
2 列出HDFS目录下某个文档中的文件
hdfs dfs -ls in
ls -文件命
浏览HDFS的某个文件
3 上传文件到HDFS
hdfs dfs -put test1 test
将当前目录下的test1文件上传到HDFS并重命名为test
4将HDFS中的文件复制到本地系统中
hadoop dfs -get in getin
5 删除,通过-rmr 文件
命令删除HDFS下名为out的文档
hadoop dfs -rmr out
6 查看HDFS下的某个文件
hadoop dfs cat in/*
7 使用帮助, -help commandName
来获取帮助
管理与更新
hadoop dfsadmin -report
通过‘-report’命令查看HDFS的基本统计信息。
退出安全模式:NameNode在启动时会自动进去安全模式,这是NameNode的一种状态,在这个阶段,文件系统不允许做任何修改。他的目的是在系统启动时检查各个DataNode上数据块的有效性。同时根据策略对数据块进行必要的复制和删除, 当数据块最小百分比数满足配置的最小副本数条件时, 会自动退出安全模式。
系统会显示"Name node is in safe mode",等待17秒或者使用下面的命令退出安全模式
hadoop dfsadmin -safemode leave
进入安全模式的命令
hadoop dfsadmin -safemode enter
4 添加节点
向HDFS集群中 添加节点要和NameNode使用相同的配置,一般是直接从NameNode 上面复制。然后修改$HADOOP_HOME/conf/master文件,加入NameNode主机名。然后在NameNode上修改$HADOOP_HOME/conf/slaves文件,再建立到新节点的无密码ssh登录,最后运行启动命令bin/start-all.sh
5 负载均衡
可以使用命令bin/start-balancer.sh
重新平衡DataNodeh上的数据块的分布。