I found that the best to think of graph implementation is sparse matrices of the adjacency matrix. CSR/CSC format has fast lookup abilities, building and switching between formats is "relative" efficient. Most graph algorithms need primitives that can be built on top of this.
For distributed computing one can look int GraphLab or its smaller version, now largely abandoned GraphChi.
For distributed computing one can look int GraphLab or its smaller version, now largely abandoned GraphChi.