When you enroll in this course, you'll also be enrolled in this Specialization.
Learn new concepts from industry experts
Gain a foundational understanding of a subject or tool
Develop job-relevant skills with hands-on projects
Earn a shareable career certificate
There are 7 modules in this course
This course teaches learners (industry professionals and students) the fundamental concepts of Distributed Programming in the context of Java 8. Distributed programming enables developers to use multiple nodes in a data center to increase throughput and/or reduce latency of selected applications. By the end of this course, you will learn how to use popular distributed programming frameworks for Java programs, including Hadoop, Spark, Sockets, Remote Method Invocation (RMI), Multicast Sockets, Kafka, Message Passing Interface (MPI), as well as different approaches to combine distribution with multithreading.
Why take this course?
• All data center servers are organized as collections of distributed servers, and it is important for you to also learn how to use multiple servers for increased bandwidth and reduced latency.
• In addition to learning specific frameworks for distributed programming, this course will teach you how to integrate multicore and distributed parallelism in a unified approach.
• Each of the four modules in the course includes an assigned mini-project that will provide you with the necessary hands-on experience to use the concepts learned in the course on your own, after the course ends.
• During the course, you will have online access to the instructor and the mentors to get individualized answers to your questions posted on forums.
The desired learning outcomes of this course are as follows:
• Distributed map-reduce programming in Java using the Hadoop and Spark frameworks
• Client-server programming using Java's Socket and Remote Method Invocation (RMI) interfaces
• Message-passing programming in Java using the Message Passing Interface (MPI)
• Approaches to combine distribution with multithreading, including processes and threads, distributed actors, and reactive programming
Mastery of these concepts will enable you to immediately apply them in the context of distributed Java programs, and will also provide the foundation for mastering other distributed programming frameworks that you may encounter in the future (e.g., in Scala or C++).
Welcome to Distributed Programming in Java! This course is designed as a three-part series and covers a theme or body of knowledge through various video lectures, demonstrations, and coding projects.
In this module, we will learn about the MapReduce paradigm, and how it can be used to write distributed programs that analyze data represented as key-value pairs. A MapReduce program is defined via user-specified map and reduce functions, and we will learn how to write such programs in the Apache Hadoop and Spark projects. TheMapReduce paradigm can be used to express a wide range of parallel algorithms. One example that we will study is computation of the TermFrequency – Inverse Document Frequency (TF-IDF) statistic used in document mining; this algorithm uses a fixed (non-iterative) number of map and reduce operations. Another MapReduce example that we will study is parallelization of the PageRank algorithm. This algorithm is an example of iterative MapReduce computations, and is also the focus of the mini-project associated with this module.
Demonstration: Page Rank Algorithm in Spark•5 minutes
6 readings•Total 40 minutes
1.1 Lecture Summary•5 minutes
1.2 Lecture Summary•5 minutes
1.3 Lecture Summary•5 minutes
1.4 Lecture Summary•5 minutes
1.5 Lecture Summary•5 minutes
Mini Project 1: Page Rank with Spark•15 minutes
1 assignment•Total 30 minutes
Module 1 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 1 Submission•120 minutes
CLIENT-SERVER PROGRAMMING
Module 3•4 hours to complete
Module details
In this module, we will learn about client-server programming, and how distributed Java applications can communicate with each other using sockets. Since communication via sockets occurs at the level of bytes, we will learn how to serialize objects into bytes in the sender process and to deserialize bytes into objects in the receiver process. Sockets and serialization provide the necessary background for theFile Server mini-project associated with this module. We will also learn about Remote Method Invocation (RMI), which extends the notion of method invocation in a sequential program to a distributed programming setting. Likewise, we will learn about multicast sockets,which generalize the standard socket interface to enable a sender to send the same message to a specified set of receivers; this capability can be very useful for a number of applications, including news feeds,video conferencing, and multi-player games. Finally, we will learn about distributed publish-subscribe applications, and how they can be implemented using the Apache Kafka framework.
Demonstration: File Server using Sockets•4 minutes
6 readings•Total 40 minutes
2.1 Lecture Summary•5 minutes
2.2 Lecture Summary•5 minutes
2.3 Lecture Summary•5 minutes
2.4 Lecture Summary•5 minutes
2.5 Lecture Summary•5 minutes
Mini Project 2: File Server•15 minutes
1 assignment•Total 30 minutes
Module 2 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 2 Submission•120 minutes
Talking to Two Sigma: Using it in the Field
Module 4•15 minutes to complete
Module details
Join Professor Vivek Sarkar as he talks with Two Sigma Managing Director, Jim Ward, and Senior Vice President, Dr. Eric Allen at their downtown Houston, Texas office about the importance of distributed programming.
What's included
2 videos1 reading
Show info about module content
2 videos•Total 13 minutes
Industry Professional on Parallel, Concurrent, and Distributed Programming in Java - Jim Ward, Managing Director•7 minutes
Industry Professional on Distribution - Dr. Eric Allen, Senior Vice President•7 minutes
1 reading•Total 2 minutes
About these Talks•2 minutes
MESSAGE PASSING
Module 5•4 hours to complete
Module details
In this module, we will learn how to write distributed applications in the Single Program Multiple Data (SPMD) model, specifically by using the Message Passing Interface (MPI) library. MPI processes can send and receive messages using primitives for point-to-point communication, which are different in structure and semantics from message-passing with sockets. We will also learn about the message ordering and deadlock properties of MPI programs. Non-blocking communications are an interesting extension of point-to-point communications, since they can be used to avoid delays due to blocking and to also avoid deadlock-related errors. Finally, we will study collective communication, which can involve multiple processes in a manner that is more powerful than multicast and publish-subscribe operations. The knowledge of MPI gained in this module will be put to practice in the mini-project associated with this module on implementing a distributed matrix multiplication program in MPI.
3.1 Single Program Multiple Data (SPMD) model•7 minutes
3.2 Point-to-Point Communication•9 minutes
3.3 Message Ordering and Deadlock•8 minutes
3.4 Non-Blocking Communications•7 minutes
3.5 Collective Communication•7 minutes
Demonstration: Distributed Matrix Multiply using Message Passing•9 minutes
6 readings•Total 42 minutes
3.1 Lecture Summary•7 minutes
3.2 Lecture Summary•5 minutes
3.3 Lecture Summary•5 minutes
3.4 Lecture Summary•5 minutes
3.5 Lecture Summary•5 minutes
Mini Project 3: Matrix Multiply in MPI•15 minutes
1 assignment•Total 30 minutes
Module 3 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 3 Submission•120 minutes
COMBINING DISTRIBUTION AND MULTITHREADING
Module 6•4 hours to complete
Module details
In this module, we will study the roles of processes and threads as basic building blocks of parallel, concurrent, and distributed Java programs. With this background, we will then learn how to implement multithreaded servers for increased responsiveness in distributed applications written using sockets, and apply this knowledge in the mini-project on implementing a parallel file server using both multithreading and sockets. An analogous approach can also be used to combine MPI and multithreading, so as to improve the performance of distributed MPI applications. Distributed actors serve as yet another example of combining distribution and multithreading. A notable property of the actor model is that the same high-level constructs can be used to communicate among actors running in the same process and among actors in different processes; the difference between the two cases depends on the application configuration, rather the application code. Finally, we will learn about the reactive programming model,and its suitability for implementing distributed service oriented architectures using asynchronous events.
Demonstration: Parallel File Server using Multithreading and Sockets•4 minutes
7 readings•Total 55 minutes
4.1 Lecture Summary•5 minutes
4.2 Lecture Summary•5 minutes
4.3 Lecture Summary•10 minutes
4.4 Lecture Summary•5 minutes
4.5 Lecture Summary•5 minutes
Mini Project 4: Multi-Threaded File Server•15 minutes
Exit Survey•10 minutes
1 assignment•Total 30 minutes
Module 4 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 4 Submission•120 minutes
Continue Your Journey with the Specialization "Parallel, Concurrent, and Distributed Programming in Java"
Module 7•20 minutes to complete
Module details
The next two videos will showcase the importance of learning about Parallel Programming and Concurrent Programming in Java. Professor Vivek Sarkar will speak with industry professionals at Two Sigma about how the topics of our other two courses are utilized in the field.
What's included
2 videos1 reading
Show info about module content
2 videos•Total 10 minutes
Industry Professionals on Parallelism - Jake Kornblau and Margaret Kelley, Software Engineers, Two Sigma•7 minutes
Industry Professional on Concurrency - Dr. Shams Imam, Software Engineer, Two Sigma•4 minutes
1 reading•Total 10 minutes
Our Other Course Offerings•10 minutes
Earn a career certificate
Add this credential to your LinkedIn profile, resume, or CV. Share it on social media and in your performance review.
Instructor
Instructor ratings
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.
Rice University is consistently ranked among the top 20 universities in the U.S. and the top 100 in the world. Rice has highly respected schools of Architecture, Business, Continuing Studies, Engineering, Humanities, Music, Natural Sciences and Social Sciences and is home to the Baker Institute for Public Policy.
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.6
507 reviews
5 stars
69.42%
4 stars
22.28%
3 stars
4.93%
2 stars
0.98%
1 star
2.36%
Showing 3 of 507
N
NK
4·
Reviewed on Sep 4, 2017
It forced me to recall OpenMP and MPI. Thought it's already dead in favor to IMDG, spark, upc and so on.Practical tasks - miniprojects - was too easy to implement. Need more complex tasks.
S
SA
5·
Reviewed on Apr 27, 2020
A very good course, I learnt a lot from it, thank you Coursera.
P
PK
4·
Reviewed on May 27, 2020
thanks to coursera platform,to learn new way to solving distributed problem in java
No. The lecture videos, demonstrations and quizzes will be sufficient to enable you to complete this course. Students who enroll in the course and are interesting in receiving a certificate will also have access to a supplemental coursebook with additional technical details.
How does the Multicore Programming in Java: Parallelism course relate to the Multicore Programming in Java: Concurrency course?
Multicore Programming in Java: Parallelism and Multicore Programming in Java: Concurrency cover complementary aspects of multicore programming, and can be taken in any order. The Parallelism course covers the fundamentals of using parallelism to make applications run faster by using multiple processors at the same time. The Concurrency course covers the fundamentals of how parallel tasks and threads correctly mediate concurrent use of shared resources such as shared objects, network resources, and file systems.
When will I have access to the lectures and assignments?
To access the course materials, assignments and to earn a Certificate, you will need to purchase the Certificate experience when you enroll in a course. You can try a Free Trial instead, or apply for Financial Aid. The course may offer 'Full Course, No Certificate' instead. This option lets you see all course materials, submit required assessments, and get a final grade. This also means that you will not be able to purchase a Certificate experience.
What will I get if I subscribe to this Specialization?
When you enroll in the course, you get access to all of the courses in the Specialization, and you earn a certificate when you complete the work. Your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile.
Is financial aid available?
Yes. In select learning programs, you can apply for financial aid or a scholarship if you can’t afford the enrollment fee. If fin aid or scholarship is available for your learning program selection, you’ll find a link to apply on the description page.