HDFS注意点

 

  1. unlike a filesystem for a single disk, a file in HDFS that is smaller than a single block dose not occupy a full block's worth of underlying storage.(For example, a 1MB file stored with a block size of 128M uses 1MB of disk space, not 128M)
  2. secondary namenode dose not act as a name node.Its main role is to periodically merge the namespace image with the edit log to prevent the edit log from becoming too large. the state of the secondary name node lags that of the primary, so in the event of total failure of the primary, data loss is almost certain.(P318)
  3. HDFS High Availability

the new name node is not able to serve requests until it has (i)loaded its namespace image into memory,(ii)replayed its edit log,  and (iii)received enough block reports from the datanodes to leave safe mode. On large clusters with many files and blocks, the time it takes for a name node to start from cold can be 30 minutes or more.

 

the long recovery time is problem for routine maintenance, too. In fact, because unexpected failure of the name node is so rare, the case for planned downtime is actually more important in practice.

  Hadoop 2 remedied this situation by adding support for HDFS high availability.

### HDFS架构 HDFS(Hadoop Distributed File System)采用Master/Slave架构来管理数据存储,主要由四个组件构成:HDFS Client、NameNode、DataNode和Secondary NameNode。其中,NameNode作为集群的中心服务器,负责管理文件系统的命名空间和客户端对文件的访问权限。每个DataNode通常运行在一个独立的节上,负责管理本地存储资源。Client仅能够将大文件分割成块进行存储,还能与NameNode通信以获取文件位置信息,并直接与DataNode交互完成数据读写操作。此外,Client还提供了多种管理HDFS的命令行工具,便于用户启动或关闭服务以及访问文件系统 [^2]。 ### HDFS使用方法 #### Shell操作 HDFS支持丰富的Shell命令,允许用户执行文件上传、下载及直接操作等任务。例如,使用`hadoop fs -put`命令可以将本地文件上传至HDFS;而`hadoop fs -get`则用于从HDFS下载文件到本地。对于HDFS内部文件的操作,如移动、复制或删除,同样可以通过一系列命令实现,如`hadoop fs -mv`用于文件移动,`hadoop fs -rm`用于删除文件 [^1]。 #### API操作 除了Shell命令外,HDFS还提供了一套API接口,使得开发者能够在应用程序中集成HDFS功能。这包括文件上传、下载、重命名、删除等操作。例如,在Java中,可以通过`FileSystem`类的方法实现文件的上传: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; public class HDFSUpload { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); FileSystem fs = FileSystem.get(conf); Path srcPath = new Path("/local/path/to/file"); Path dstPath = new Path("/user/hadoop/file"); fs.copyFromLocalFile(srcPath, dstPath); fs.close(); } } ``` 此代码片段演示了如何配置Hadoop环境并利用API将本地文件上传至HDFS指定路径 [^1]。 ### 常见问题及解决方案 #### 数据块大小调整 默认情况下,HDFS中的文件会被分割成64MB大小的数据块进行存储。然而,根据实际应用场景的同,可能需要调整这一参数以优化性能。修改数据块大小可以通过设置`dfs.block.size`属性实现,该属性位于`hdfs-site.xml`配置文件中。需要注意的是,更改此值后,新创建的文件才会应用新的块大小设置 [^3]。 #### 数据平衡问题 随着时间推移,由于新增节或数据增长均等原因,可能导致集群内各DataNode上的数据分布变得均衡。虽然HDFS设计有自动重新平衡机制,但在某些版本中此特性可能未被完全实现。此时,可以手动触发平衡过程,使用`hadoop balancer`命令来启动数据重分布任务,确保所有节负载均衡 [^4]。 #### 安全性与权限管理 为了保护存储在HDFS上的敏感数据,应合理配置用户权限。HDFS支持类似Unix文件系统的权限模型,允许为同用户或组分配读、写、执行权限。管理员可通过`hadoop fs -chmod`、`hadoop fs -chown`等命令修改文件或目录的权限和所有者信息 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值