“Big data Analytics” is a phrase that was coined to refer to amounts of datasets that are so large, traditional data processing software simply can’t manage them. For example, big data is used to pick out trends in economics, and those trends and patterns are used to predict what will happen in the future. These vast amounts of data require more robust computer software for processing, best handled by data processing frameworks.
These are the top preferred data processing frameworks, suitable for meeting a variety of different needs of businesses.
This is an open-source batch processing framework that can be used for the distributed storage and processing of big data sets. Hadoop relies on computer clusters and modules that have been designed with the assumption that hardware will inevitably fail, and those failures should be automatically handled by the framework.
There are four main modules within Hadoop. Hadoop Common is where the libraries and utilities needed by other Hadoop modules reside. The Hadoop Distributed File System (HDFS) is the distributed file system that stores the data. Hadoop YARN (Yet Another Resource Negotiator) is the resource management platform that manages the computing resources in clusters, and handles the scheduling of users’ applications. The Hadoop MapReduce involves the implementation of the MapReduce programming model for large-scale data processing.
Hadoop operates by splitting files into large blocks of data and then distributing those datasets across the nodes in a cluster. It then transfers code into the nodes, for processing data in parallel. The idea of data locality, meaning that tasks are performed on the node that stores the data, allows the datasets to be processed more efficiently and more quickly. Hadoop can be used within a traditional onsite datacenter, as well as through the cloud.
Apache Spark is a batch processing framework that has the capability of stream processing, as well, making it a hybrid framework. Spark is most notably easy to use, and it’s easy to write applications in Java, Scala, Python, and R. This open-source cluster-computing framework is ideal for machine-learning, but does require a cluster manager and a distributed storage system. Spark can be run on a single machine, with one executor for every CPU core. It can be used as a standalone framework, and you can also use it in conjunction with Hadoop or Apache Mesos, making it suitable for just about any business.
Spark relies on a data structure known as the Resilient Distributed Dataset (RDD). This is a read-only multiset of data items that is distributed over the entire cluster of machines. RDDs operate as the working set for distributed programs, offering a restricted form of distributed shared memory. Spark is capable of accessing data sources like HDFS, Cassandra, HBase, and S3, for distributed storage. It also supports a pseudo-distributed local mode that can be used for development or testing.
The foundation of Spark is Spark Core, which relies on the RDD-oriented functional style of programming to dispatch tasks, schedule, and handle basic I/O functionalities. Two restricted forms of shared variables are used: broadcast variables, which reference read-only data that has to be available for all the nodes, and accumulators, which can be used to program reductions. Other elements included in Spark Core are:
- Spark SQL, which provides domain-specific language used to manipulate DataFrames.
- Spark Streaming, which uses data in mini-batches for RDD transformations, allowing the same set of application code that is created for batch analytics to also be used for streaming analytics.
- Spark MLlib, a machine-learning library that makes the large-scale machine learning pipelines simpler.
- GraphX, which is the distributed graph processing framework at the top of Apache Spark.
This is another open-source framework, but one that provides distributed, real-time stream processing. Storm is mostly written in Clojure, and can be used with any programming language. The application is designed as a topology, with the shape of a Directed Acyclic Graph (DAG). Spouts and bolts act as the vertices of the graph. The idea behind Storm is to define small, discrete operations, and then compose those operations into a topology, which acts as a pipeline to transform data.
Within Storm, streams are defined as unbounded data that continuously arrives at the system. Sprouts are sources of data streams that are at the edge of the topology, while bolts represent the processing aspect, applying an operation to those data streams. The streams on the edges of the graph direct data from one node to another. These bolts and sprouts define sources of information and allow batch, distributed processing of streaming data, in real-time.
Samza is another open-source framework that offers near a real-time, asynchronous framework for distributed stream processing. More specifically, Samza handles immutable streams, meaning transformations create new streams that will be consumed by other components without any effect on the initial stream. This framework works in conjunction with other frameworks, using Apache Kafka for messaging and Hadoop YARN for fault tolerance, security, and management of resources.
Samza uses the semantics of Kafka to define how it handles streams. Topic refers to each stream of data that enters a Kafka system. Brokers are the individual nodes that are combined to make a Kafka cluster. A producer is any component that writes to a Kafka topic, and a consumer is any component that reads from a Kafka topic. Partitions are used to divide incoming messages in order to distribute a topic among the different nodes.
Flink is a hybrid framework, open-source, and stream processes, but can also manage batch tasks. It uses a high-throughput, low-latency streaming engine that is written in Java and Scala, and the runtime system that is pipelined allows for the execution of both batch and stream processing programs. The runtime also supports the execution of iterative algorithms natively. Flink’s applications are all fault-tolerant and can support exactly-once semantics. Programs can be written in Java, Scala, Python, and SQL, and Flink offers support for event-time processing and state management.
The components of the stream processing model in Flink include streams, operators, sources, and sinks. Streams are immutable, unbounded datasets that go through the system. Operators are functions that are used on data streams to create other streams. Sources are the entry points for streams that enter into the system. Sinks are places where streams flow out of the Flink system, either into a database or into a connection to another system. Flink’s batch processing system is really just an extension of the stream processing model.
Flink does not provide its own storage system, however, so that means you will have to use it in conjunction with another framework. That should not be a problem, as Flink is able to work with many other frameworks.
Data processing frameworks are not intended to be one-size-fits-all solutions for businesses. Hadoop was originally designed for massive scalability, while Spark is better with machine learning and stream processing. A good IT services consultant can evaluate your needs and offer advice. What works for one business may not work for another, and to get the best possible results, you may find that it’s a good idea to use different frameworks for different parts of your data processing.