I'll briefly answer the question.
The RIB (routing information base) contains all of the knowledge the router has obtained about how to reach destination networks. For example, it may have two different paths to reach the same network, both stored in the FIB. Or it might have learned the path the same network via two different routing protocols. Again, they would be unique, separate entries in the main RIB.
The router extracts the best entries from the RIB and inserts them into the FIB (forwarding information base.) For example, the router might be configured to prefer paths learned via one protocol over another, therefore leaving behind one of them and not inserting it into the FIB since it prefers the path via BGP vs. OSPF. There could also be a tie, and it takes two equal paths and inserts them into the FIB.
Bottom line, the router applies policy to extract the best paths from the RIB and insert them into the FIB. The FIB is generally composed of high speed memory that is used to build "hardware shortcuts" that allows the unit to switch packets at high speed.
A hierarchical FIB seeks to eliminate duplication of fields/data in each FIB entry. See http://newnog.net/meetings/nanog40/presentations/ClarenceFilsfils-BGP.pdf
Hope this helps.