HDFS详解:启动、原理与Java客户端操作

需积分: 13 0 下载量 117 浏览量 更新于2024-08-30 收藏 11KB MD 举报
HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件,用于大规模分布式存储和处理数据。本笔记主要介绍了HDFS的基础知识,包括其启动和停止过程,以及核心工作原理。 首先,HDFS的启动和停止可以通过命令行工具实现。一键启动使用`start-dfs.sh`脚本,而停止服务则使用`stop-dfs.sh`。这些脚本负责管理NameNode和DataNode节点,确保整个集群的正常运行。 在HDFS上传文件时,流程分为以下几个步骤: 1. 客户端发起请求到NameNode,检查剩余存储空间。 2. NameNode负责存储元数据,确认有足够的空间后,指示客户端切分文件为数据块。 3. 数据块被切分后,NameNode分配存储位置,并将位置信息告知客户端。 4. 客户端根据位置信息,与DataNode建立连接,实现数据块的传输。 5. 数据块传输采用冗余存储策略,通常每个块至少复制3份,提高数据安全性。 6. 在上传过程中,如果某个数据块传输失败,将重新尝试。 连接校验机制涉及NameNode和DataNode的身份验证。NameNode使用族群ID和数据块池ID来区分节点,同时DataNode也有自己的uuid(唯一标识符)以区分不同的实例。这种设计有助于数据的正确路由和一致性维护。 下载文件时,流程如下: 1. 客户端向NameNode请求文件的元数据,包括数据块的位置信息。 2. 客户端根据元数据选择网络状况良好的DataNode进行下载,确保数据的一致性和可靠性。 3. 数据块从DataNode传输到客户端,客户端对所有块进行拼接,完成下载。 HDFS的数据存储特性有: - 每个数据块默认大小为128MB,大文件切片方便处理。 - 数据块备份至少为3份,提供数据冗余和容错能力。 - 数据块位置信息存储在DataNode的元数据中,便于管理和查找。 值得注意的是,HDFS的设计原则之一是避免存储大量小文件,因为这可能导致元数据开销过大,影响系统的整体性能和效率。因此,HDFS更适合存储大文件或大量小文件组成的集合。 此外,本笔记还提到了HDFS的通信机制,虽然具体内容没有详细展开,但可以推测它涉及网络通信优化、数据流控制和错误恢复等方面,这些都是保证HDFS高效稳定运行的关键要素。 这个笔记为理解HDFS的工作原理提供了清晰的框架,涵盖了从集群管理到数据传输、存储策略和通信细节的重要知识点。对于开发人员和Hadoop用户来说,理解和掌握这些概念对于高效使用HDFS至关重要。

at org.apache.hadoop.ipc.Client.call(Client.java:1476) at org.apache.hadoop.ipc.Client.call(Client.java:1413) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229) at com.sun.proxy.$Proxy29.mkdirs(Unknown Source) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.mkdirs(ClientNamenodeProtocolTranslatorPB.java:563) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) at com.sun.proxy.$Proxy30.mkdirs(Unknown Source) at org.apache.hadoop.hdfs.DFSClient.primitiveMkdir(DFSClient.java:3014) at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:2984) at org.apache.hadoop.hdfs.DistributedFileSystem$21.doCall(DistributedFileSystem.java:1047) at org.apache.hadoop.hdfs.DistributedFileSystem$21.doCall(DistributedFileSystem.java:1043) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.mkdirsInternal(DistributedFileSystem.java:1043) at org.apache.hadoop.hdfs.DistributedFileSystem.mkdirs(DistributedFileSystem.java:1036) at org.apache.hadoop.hive.ql.session.SessionState.createPath(SessionState.java:751) at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:674) at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:586)

2023-07-16 上传

INFO [upload-pool-47] c.e.d.j.DataUnitService.DataUnitService#tohiveWy[DataUnitService.java:172] /u01/tarsftp//2023070719592612007140001.txt.gz解压>>>>>>/u01/untarsftp/ 2023-07-07 20:11:54,787 WARN [Thread-4655234] o.a.h.h.DFSClient.DFSOutputStream$DataStreamer#run[DFSOutputStream.java:558] DataStreamer Exception org.apache.hadoop.ipc.RemoteException: File /dataunit/cu_access_log/10/2023070719592612007140001.txt could only be written to 0 of the 1 minReplication nodes. There are 11 datanode(s) running and no node(s) are excluded in this o peration. at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:2121) at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.chooseTargetForNewBlock(FSDirWriteFileOp.java:286) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2706) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:875) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:561) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:524) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1025) at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:876) at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:822) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2682)

2023-07-13 上传

2023-07-07 20:11:52,076 INFO [upload-pool-40] c.e.d.j.DataUnitService.DataUnitService#uploadFileToHdfs[DataUnitService.java:98] 本次文件上传HDFS用时:18s 2023-07-07 20:11:52,077 INFO [upload-pool-40] c.e.d.j.DataUnitService.DataUnitService#uploadFileToHdfs[DataUnitService.java:98] 本次文件上传HDFS用时:0s 2023-07-07 20:11:52,514 INFO [upload-pool-35] c.e.d.j.DataUnitService.DataUnitService#tohiveWy[DataUnitService.java:172] /u01/tarsftp//2023070719575912003640001.txt.gz解压>>>>>>/u01/untarsftp/ 2023-07-07 20:11:52,520 WARN [Thread-4655232] o.a.h.h.DFSClient.DFSOutputStream$DataStreamer#run[DFSOutputStream.java:558] DataStreamer Exception org.apache.hadoop.ipc.RemoteException: File /dataunit/cu_access_log/10/2023070719575912003640001.txt could only be written to 0 of the 1 minReplication nodes. There are 11 datanode(s) running and no node(s) are excluded in this o peration. at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:2121) at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.chooseTargetForNewBlock(FSDirWriteFileOp.java:286) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2706) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:875) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:561) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:524) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1025) at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:876) at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:822) at java.security.AccessController.doPrivileged(Native Method) at javax.securi

2023-07-13 上传