8 Distributed Computing Technologies in Big Data Analytics
Published Oct 2020

Introduction
The advent of distributed computing technology has revolutionized various real-life applications, providing a cost-effective alternative to expensive supercomputers for handling intensive data computation. Distributed computing systems consist of networks of computation units interconnected through fast networks, facilitating resource sharing among compute nodes. Communication and coordination between these nodes occur through message passing, allowing them to work together to achieve common goals. To end-users, the collection of autonomous compute nodes appears as a single unit, offering enhanced fault tolerance and reliability.
As data continues to grow exponentially, database technologies have evolved to meet the demands of modern applications, especially with the emergence of big data. Big data technologies leverage the fundamental concepts of distributed computing to achieve large-scale computation in a scalable and cost-efficient manner. The key properties of big data, including volume, variety, velocity, and veracity, have led to its successful application in various data-intensive domains such as weather forecasting, biomedical research, and more.
In this article, we will explore different distributed computing technologies used in big data analytics, categorizing them into various application areas and providing examples of popular tools.
1. Distributed Database
A distributed database stores data in multiple interconnected computers across diverse physical locations while appearing as a single database system to the user. This transparent distribution of data enables enhanced availability and reliability. There are two approaches to storing data in a distributed database system:
Replication: The entire database is redundantly stored in multiple sites, ensuring data availability even if one site fails. However, maintaining consistency across replicas can be challenging.
Fragmentation: Data is logically divided and placed on different sites, maintained by a master server. While this approach ensures consistency, it lacks redundancy.
The adoption of distributed data storage enhances scalability, reliability, and availability. It enables horizontal scalability, distributing the workload across multiple computers, thereby improving speed and performance. Additionally, the distributed approach allows data to be located closer to areas of high demand, further optimizing data access.
While distributed database systems alleviate scalability issues found in single-server relational databases with ACID properties, they face challenges governed by the CAP theorem. According to this theorem, a distributed data store cannot simultaneously provide all three properties:
Consistency: Ensuring all operations have atomic characteristics and changes yield the same results across nodes.
Availability: Responding to every request, even in the presence of failures.
Partition Tolerance: Continuing to operate despite arbitrary messages being dropped or delayed between nodes in the network.
The visualization of the CAP theorem with three properties is shown in the figure below.

Distributed systems offer significant computing power using affordable commodity hardware. However, the complexity of distributed databases and the trade-off of the CAP theorem make it crucial to carefully choose the appropriate database design to maximize advantages.
NoSQL Database
The dominance of relational databases in the past is now being challenged by the increasing adoption of NoSQL databases. NoSQL databases offer a schemaless model and high scalability, making them ideal for storing structured and unstructured data. There are four types of NoSQL databases:

Document databases: Store data in JSON-like documents with flexible data types. Examples: MongoDB, CouchDB.
Graph databases: Store data as nodes and edges, suitable for relationship-based data. Examples: Neo4j, JanusGraph.
Key-value databases: Simple databases with key-value pairs, commonly used for caching and user preferences. Examples: Redis, Memcached, DynamoDB.
Wide Column databases: Provide flexibility by allowing different columns for each row, popular for IoT data and user profiles. Examples: Cassandra, Hbase.
2. Distributed storage
A Distributed storage system is an infrastructure that efficiently distributes data across multiple physical servers and data centers. Data is organized in clusters of storage units that synchronize and work together, enabling parallel processing of large data volumes for significantly improved performance. This versatile storage system can handle various data types, including video, images, documents, and objects.
The traditional approach of processing data in a single computer system with a local file system becomes a bottleneck when dealing with large data volumes, taking days to complete. To address this, a distributed file system was introduced, distributing data across multiple local hard disks associated with separate computing nodes. This parallel processing allows terabytes of data to be handled within minutes.
The primary motivation behind a distributed storage system is to achieve scalability, redundancy, and high performance while utilizing cost-effective commodity hardware to store vast amounts of data inexpensively.
However, the distributed storage system faces limitations governed by the CAP theorem. When using a distributed storage system, we must give up at least one of the three properties of the CAP theorem. Many existing distributed storage systems prioritize availability and partition tolerance, at the expense of strong consistency, which is instead achieved through eventually consistent mechanisms.
Distributed File System HDFS
HDFS is a Java-based distributed file system designed for data-intensive applications, offering high fault tolerance and throughput. It efficiently spans multiple computers, enabling the storage and processing of large data volumes on inexpensive commodity hardware.

The architecture of HDFS follows a master-slave model, with dedicated servers for metadata (Name Node) and application data (Data Nodes). The Name Node acts as the central control of the file system, managing the entire file system tree, handling client requests, and distributing storage tasks. On the other hand, Data Nodes store application data and replicate file content for enhanced reliability. The replication of data across multiple nodes ensures fault tolerance without individual failover mechanisms.
HDFS stands apart from conventional file systems by providing an API that exposes the locations of file blocks. This feature enables distributed programming, such as the Map-Reduce framework, to process data locally on the node where it resides, reducing data transfer overhead.
3. Distributed Computing Frameworks
To overcome the overhead of distributed computation, distributed computing frameworks have been introduced. These frameworks enable concurrent processing by breaking down large datasets into smaller chunks and processing them in parallel on different nodes. By distributing the workload across multiple processors, the performance is significantly improved. The results from each processing node are then aggregated to form the final output, which is returned to the application. This approach allows for efficient processing of petabytes of data and enhances the scalability and performance of distributed systems.
Map-Reduce
Map-Reduce is a parallel and distributed programming model used for processing and generating large-scale big data sets. In a typical Map-Reduce program, there are two main procedures: the "map" procedure and the "reduce" procedure.
The "map" procedure performs data filtering and sorting, transforming the input data into key-value pairs. This step prepares the data for further processing.
The "reduce" procedure performs a summary operation on the mapped data. It processes and analyzes the intermediate key-value pairs generated by the "map" procedure to produce meaningful results or aggregations.
This model is inspired by the "split-apply-combine" strategy commonly used in data analysis, where data is split into smaller subsets, functions are applied to each subset, and the results are combined for final analysis.
The key idea behind Map-Reduce is the recognition that data is not a singular entity, but rather a collection of multiple units. By processing this data in parallel, the computation performance is greatly improved.
To optimize the processing performance of Map-Reduce, it is beneficial to execute the map-reduce logic on the nodes where the data is already stored. This approach minimizes data transfer overhead by performing computations closer to the data.

The fundamental steps involved in the Map-Reduce process are as follows:
Map: Each computing node executes the map function on its local data, generating several chunks of intermediate data in the form of key-value pairs.
**Shuffle: **The compute nodes redistribute the intermediate data based on the output keys produced by the map function. This step ensures that data belonging to the same key is located on the same compute node.
Reduce: Each compute node processes a group of output data in parallel. After processing, it produces a new set of output data that is stored in a distributed file system.
Map-Reduce is effectively employed in various distributed computing frameworks, playing a crucial role in handling large-scale data processing tasks efficiently, and is commonly associated with technologies like Apache Hadoop.
Apache Spark
Apache Spark is a distributed computing framework specifically designed to optimize iterative workloads and enhance performance through memory computations. Its capability for faster parallel processing is achieved by leveraging memory primitives. With the ability to load data into local or cluster-wide shared memory, Spark enables iterative querying at significantly higher speeds compared to the traditional Map-Reduce framework. As a result, it has become widely popular in modern applications such as streaming, machine learning, graph processing, and data transformations.
Spark effectively utilizes memory capacity to minimize redundant reading and writing in the map-reduce workflow, leading to improved efficiency. One of its key concepts, known as "Resilient Distributed Data (RDD)," treats memory across multiple computers as a cohesive, contiguous memory resource, further enhancing data processing performance and ensuring fault tolerance.

At its core, an Apache Spark application comprises two main components:
**Driver: **This component converts user-written code into multiple tasks, which can be distributed across worker nodes.
**Executors: **These components execute the assigned tasks on individual nodes within the cluster.
The architecture of Apache Spark is designed to optimize distributed data processing, making efficient use of memory and computing resources, and enabling scalable and high-performance data analysis and processing tasks.
4. Machine Learning Platforms
Machine learning algorithms involve complex mathematical operations, such as matrix algebra and optimization, especially when dealing with large-scale data. To develop accurate and generalized models, a substantial amount of training data is required, demanding high computational capabilities.
Traditionally, scaling the computational power for machine learning involved increasing the number of cores and memory in individual computers. However, modern approaches employ distributed computing with a large number of interconnected computers, enabling parallel model building.
The rise of distributed computing frameworks like Apache Spark has significantly accelerated the evolution of machine learning. These frameworks allow building models on vast datasets without the need for sampling, ensuring accurate predictions. They are optimized for high performance, utilizing fast computation, parallel distributed training, and in-memory compression to handle massive datasets efficiently.
Several popular machine learning platforms, such as Mahout, H2O, Spark, Hadoop, DIANNE, MXNet, and Petuum, contribute to the advancement and accessibility of machine learning capabilities in diverse applications.
5. Search System
With the increasing demand for real-time delivery of information, the world is embracing big data, generating petabytes of data daily. To handle this vast amount of data, efficient storage solutions are essential.
Traditionally, real-time search with traditional indexing schemes becomes impractical given the scale of big data and the need to process unstructured and structured textual data. To enable searchable textual data, an inverted index is created. In the forward index, documents are stored in a database, retrievable with a document ID. The inverted index, on the other hand, is constructed from keywords found in the documents, associating each word with a list of documents containing it. This indexing scheme significantly accelerates search queries by avoiding the need to search documents one by one.
By leveraging the limited number of words in a language, the size of the inverted index remains manageable even with an extensive collection of documents. As a result, it can be efficiently stored in the memory of a single node or a cluster of nodes, ensuring fast and effective data retrieval.
Elastic Search
Elasticsearch is a prominent distributed search software designed for big data and distributed systems. Operating as a RESTful search engine, it supports HTTP and JSON based search queries, offering full-text search capabilities for various data types, including textual, numerical, geospatial, structured, and unstructured data. Its versatility makes it applicable in diverse applications such as application search, website search, enterprise search, logging, monitoring, data analysis, security analysis, and business analysis.
The core of Elasticsearch's searching mechanism lies in the concept of an inverted index. This index contains a list of unique words present in the documents, with each word associated with a list of documents containing it. When a search query is initiated, Elasticsearch refers to the inverted index table to locate the desired data. The output of the query is a list of documents containing the relevant word or term. By employing the inverted index, Elasticsearch efficiently maps terms to the documents that contain them, enabling fast and accurate search results.
To enhance performance and scalability, Elasticsearch divides the index into multiple shards, distributing them across multiple nodes. This intelligent shard management is automatically handled by the Elasticsearch server, ensuring efficient organization and retrieval of data.
6. Big Data Messaging
In a big data system, each component is a cluster comprising numerous computing nodes responsible for handling distributed data and computation. However, establishing and managing one-to-one communication in such a system presents challenges. Despite the robustness of individual components, communication can become a bottleneck. One critical issue is the unpredictability of data flow, making it difficult to estimate the required infrastructure for data processing. Mismatches in data entry and processing rates may result in large in-memory buffers during data parsing and extraction, leading to potential data loss in case of failures.
To address this problem, big data messaging software has evolved to efficiently handle high volumes of messages by temporarily storing them with failover and replication capabilities, ensuring data integrity and prevention of data loss. Two main paradigms are widely used in distributed messaging systems for various applications:
**Publish/Subscribe Paradigm: **Producers publish messages grouped into categories, and consumers subscribe to the categories they are interested in. This mechanism enables efficient message distribution to relevant consumers. Example: Apache Kafka.
Messaging Queue Paradigm: Producers send messages to a queue, from which consumers consume the data in order. This asynchronous approach allows producers and consumers to interact with the message queue independently, making it a point-to-point communication pattern. Examples include RabbitMQ, ActiveMQ, and AeroMQ.
These messaging paradigms play a crucial role in facilitating seamless communication and data processing in complex big data systems.oint communication. Examples: RabbitMQ, ActiveMQ, AeroMQ, etc.
RabbitMQ
RabbitMQ is a prominent message-passing software widely adopted in various software industries. Initially designed to operate on a single server, it has evolved to incorporate clustering architecture to meet the demands of big data applications. Leveraging the advanced message queuing protocol, RabbitMQ facilitates efficient asynchronous message-based communication between applications.
One of its key features is its implementation of the popular publish/subscribe system architecture. In this architecture, a group of message producers publishes messages with specific subjects, while a group of consumers subscribes to these subjects to consume the messages. This enables seamless and scalable communication between different components of a distributed system. The publish/subscribe architecture of RabbitMQ is a crucial element in supporting efficient data exchange and information flow in complex software environments.

Apache Kafka
Apache Kafka is a widely used distributed event streaming platform, built on the concept of a distributed commit log. Originally designed as a message queue system, it has evolved into a comprehensive event streaming solution. The underlying principle of Kafka remains pub/sub messaging, facilitating efficient message passing.
With its straightforward usability, high throughput, and robust replication capabilities, Kafka has become a powerful tool for handling event streams. Its architecture consists of essential components such as producers, consumers, brokers, ZooKeeper, logs, partitions, records, and topics. Records in Kafka comprise both a value and a timestamp, while topics act as categories for streams of records. Producers generate these streams, which are then stored in topics, and consumers subscribe to topics based on their areas of interest. Kafka's versatility and performance make it well-suited for a broad range of applications in distributed systems and data processing.
7. Distributed Caching System
In computing, a cache serves as a high-speed data storage layer designed to store frequently accessed data, enabling faster retrieval compared to accessing the primary data location. Typically, this data is stored in fast access hardware, such as Random-access memory (RAM), and may also involve a software component. The cache size is limited and contains copies of data from frequently used locations in the main memory.
When the processor requires reading or writing data in the main memory, it checks the cache for a corresponding entry. If the data is found in the cache, a cache hit occurs, resulting in faster access. Conversely, if the data is not present in the cache, a cache miss occurs, and the processor retrieves the data from the main memory.
Caches can be an integral component within a big-data based system, significantly improving real-time response to requests. Adhering to the power law, which states that the majority of users are served by a small portion of data, the cache proves vital in enhancing performance in distributed systems. Moreover, caches can be strategically located on separate cache servers, positioned closer to the data demand, to further optimize data retrieval speed.
Memcached
Memcached is a widely adopted, high-performance, and distributed cache system based on a key-value store model, designed to handle chunks of data efficiently. Over the years, Memcached has evolved to serve multi-node clusters effectively. Its architecture comprises four main components:
Client Software: Responsible for managing interactions with Memcached servers.
Hashing Algorithm: Used to select an appropriate server based on the "key" provided.
**Server Software: **Stores key-value pairs in an internal hash table, facilitating data storage.
LRU (Least Recently Used): Determines which data to discard when memory is limited, ensuring optimal memory utilization.
These well-coordinated components enable seamless cooperation between clients and servers, ensuring the efficient delivery of cached data.
Redis
Redis is a highly popular in-memory non-relational database known for its efficient key-value caching and storage capabilities. It outperforms traditional databases in terms of speed, with data processing typically taking only nanoseconds or milliseconds due to its simple structure and in-memory storage. Redis offers diverse options for data storage, such as strings, lists, sets, hashes, etc., and boasts advanced features like publish/subscribe, master/slave replication, disk persistence, and scripting. Additionally, it provides built-in replication, high availability, and data partitioning features. Redis enables atomic operations like append, find, and sort in the memory store, further enhancing its performance.
The architecture of an application utilizing Redis as a cache server is depicted below.

8. Data Visualization
In the realm of big data, the mere collection of vast amounts of data within a database does not inherently provide valuable insights about the system. To gain meaningful knowledge and insights, the data must be effectively visualized using various statistical elements such as charts, graphs, and maps. Data visualization tools and technologies play a crucial role in analyzing massive volumes of information and facilitating data-driven decision-making. As the volume of big data continues to grow exponentially, data visualization becomes a vital tool in comprehending trillions of data rows generated daily. By transforming data into easily understandable visual representations, it allows for the identification of trends and outliers, effectively communicating information in a clear and efficient manner.
Data visualization employs statistical graphs, plots, infographics, and other tools to facilitate users' analysis and reasoning about data and evidence. It enhances the accessibility, understandability, and usability of complex data, ultimately empowering individuals to make informed decisions based on comprehensive insights.
Conclusion
In response to the escalating trend of big data, various distributed computing technologies have been discussed, offering a viable solution to its challenges. Unlike conventional single computer systems, distributed systems boast a complex architecture and entail certain overheads. However, despite these limitations, they have demonstrated significant potential in terms of scalability and efficient processing of vast volumes of big data in a cost-effective and reliable manner. As a result, distributed computing technologies are poised to play a pivotal role in expediting solutions to address the ever-growing demands of big data.