HDFS 基础数据结构

FSDirectory and FSNamesystem 都是用来管理NameSpace状态的结构。

FSDirectory是一个内存数据结构,所有操作都在内存中进行。

相比之下,FSNamesystem会将操作持久化到数据结构。


INodeMap存储所有INode,存储INode ID 到INode的映射关系

FSDirectory有一组方法,例如:addFile


JournalSet管理一组Journals

JournalAndStream

JournalManager 用来管理存储的editlog

	/**
	 * 格式化底层存储,删除之前存储的数据
	 */
	void format(NamespaceInfo ns) throws IOException;

	/**
	 * Begin writing to a new segment of the log stream, which starts at the
	 * given transaction ID.
	 */
	EditLogOutputStream startLogSegment(long txId, int layoutVersion)
			throws IOException;

	/**
	 * Mark the log segment that spans from firstTxId to lastTxId as finalized
	 * and complete.
	 */
	void finalizeLogSegment(long firstTxId, long lastTxId) throws IOException;

	/**
	 * 设置stream用于edit的内存使用量
	 */
	void setOutputBufferCapacity(int size);

	/**
	 * 恢复尚未终结的segments
	 */
	void recoverUnfinalizedSegments() throws IOException;

	/**
	 * Perform any steps that must succeed across all JournalManagers involved
	 * in an upgrade before proceeding onto the actual upgrade stage. If a call
	 * to any JM's doPreUpgrade method fails, then doUpgrade will not be called
	 * for any JM.
	 */
	void doPreUpgrade() throws IOException;

	/**
	 * finalized or rolled back to the previous state.
	 * 执行JournalManager实际升级。
	 * 在执行完成之后,NameNode可以使用新的升级metadata。
	 * metadata可能会新于结束的状态和回滚到之前的状态。
	 */
	void doUpgrade(Storage storage) throws IOException;

	/**
	 * 升级结束。
	 * JournalManager 会清除升级过程中产生的状态。
	 * 结束结束。不可再回滚。
	 */
	void doFinalize() throws IOException;

	/**
	 * Return true if this JM can roll back to the previous storage state, false
	 * otherwise. The NN will refuse to run the rollback operation unless at
	 * least one JM or fsimage storage directory can roll back.
	 * 
	 * @param storage
	 *            the storage info for the current state
	 * @param prevStorage
	 *            the storage info for the previous (unupgraded) state
	 * @param targetLayoutVersion
	 *            the layout version we intend to roll back to
	 * @return true if this JM can roll back, false otherwise.
	 */
	boolean canRollBack(StorageInfo storage, StorageInfo prevStorage,
			int targetLayoutVersion) throws IOException;

	/**
	 * 执行回滚到之前文件系统状态. 
	 */
	void doRollback() throws IOException;

	/**
	 * @return journal manager创建时间.
	 */
	long getJournalCTime() throws IOException;

	/**
	 * 放弃第一个txid大于等于指定txid的segments
	 */
	void discardSegments(long startTxId) throws IOException;

	/**
	 * 关闭 journal manager,释放资源.
	 */
	@Override
	void close() throws IOException;


beginTransaction 和 endTransaction函数表示一组事务操作的开始与结束

TransactionId含有一个long类型txid属性


DataNode中每个block-pool/namespace都有一个BPOfferService实例。


DataStorage

你可能感兴趣的:(hdfs)