A computer-implemented method for processing queries of data in parallel using a distributed processing system with a Hadoop query processing layer, a given query having at least one query parameter, the data being organized in accordance with a graph data model, the graph data model including a plurality of vertexes configured to be logically connected using a plurality of edges, each vertex in the plurality of vertexes being configured to correspond to a portion of the data, wherein at least one vertex in the plurality of vertexes is configured to be logically connected to at least another vertex in the plurality of vertexes using at least one edge in the plurality of edges, wherein two vertexes logically connected by an edge are configured to form a triple in a plurality of triples, wherein the data includes the plurality of triples, the method comprising: loading the data onto a master node, the master node including a processor and a memory; partitioning, by the master node, the plurality of vertexes into a plurality of disjoint subsets of base vertexes to obtain a plurality of partitions of data, each partition of data including triples corresponding to a respective disjoint subset of base vertexes; assigning, by the master node, each of the plurality of partitions of data to a respective worker node in a plurality of worker nodes for storage, such that each worker node in the plurality of worker nodes owns a respective disjoint subset of base vertexes, each of the plurality of worker nodes including a processor and a memory; replicating, using a respective data replicator module of each of the plurality of worker nodes, triples according to a 2-hop guarantee, such that for each base vertex in each partition, all vertexes that are reachable within 2 hops of that base vertex in the graph data model are stored locally on the same worker node to which the partition is assigned, thereby to improve the efficiency of query processing by increasing the likelihood that a query can be processed in parallel using the plurality of worker nodes and reducing an amount of communication between worker nodes in the plurality of worker nodes; identifying, at each worker node, duplicative triples that have subjects corresponding to base vertexes owned by one or more other worker nodes in the plurality of worker nodes; receiving, by the master node, a query defining a graph pattern for retrieval of data stored on the plurality of worker nodes, the graph pattern defining a path through the graph data model; and processing the query by performing graph pattern matching at the plurality of worker nodes to retrieve data responsive to the query, wherein the identified duplicative triples are excluded from the query processing at the plurality of worker nodes. loading the data onto a master node, the master node including a processor and a memory; partitioning, by the master node, the plurality of vertexes into a plurality of disjoint subsets of base vertexes to obtain a plurality of partitions of data, each partition of data including triples corresponding to a respective disjoint subset of base vertexes; assigning, by the master node, each of the plurality of partitions of data to a respective worker node in a plurality of worker nodes for storage, such that each worker node in the plurality of worker nodes owns a respective disjoint subset of base vertexes, each of the plurality of worker nodes including a processor and a memory; replicating, using a respective data replicator module of each of the plurality of worker nodes, triples according to a 2-hop guarantee, such that for each base vertex in each partition, all vertexes that are reachable within 2 hops of that base vertex in the graph data model are stored locally on the same worker node to which the partition is assigned, thereby to improve the efficiency of query processing by increasing the likelihood that a query can be processed in parallel using the plurality of worker nodes and reducing an amount of communication between worker nodes in the plurality of worker nodes; identifying, at each worker node, duplicative triples that have subjects corresponding to base vertexes owned by one or more other worker nodes in the plurality of worker nodes; receiving, by the master node, a query defining a graph pattern for retrieval of data stored on the plurality of worker nodes, the graph pattern defining a path through the graph data model; and processing the query by performing graph pattern matching at the plurality of worker nodes to retrieve data responsive to the query, wherein the identified duplicative triples are excluded from the query processing at the plurality of worker nodes.