You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
15 KiB
210 lines
15 KiB
= Laboratory Report - Cloud Computing & Services
|
|
|
|
*_Authors_*
|
|
|===
|
|
|
|
| Oulis Evangelos | <cs151051@uniwa.gr>
|
|
| Katsimpras Drosos | <cs131110@uniwa.gr>
|
|
| Oulis Nikolaos | <cs161079@uniwa.gr>
|
|
| Kampoli Agathi | <cs131031@uniwa.gr>
|
|
|
|
|===
|
|
|
|
//Metadata:
|
|
:description: Cloud Computing and Services, Hadoop, Kubernetes
|
|
:keywords: Cloud Computing Service Hadoop Kubernetes
|
|
:toc: right
|
|
:toc-title: Content Array
|
|
:toc-levels: 4
|
|
:source-hilighter: highlight
|
|
:icons: font
|
|
|
|
== Hadoop
|
|
Το Hadoop αποτελεί μία συλλογή από open-source βοηθητικά προγράμματα το αποία προσφέρουν
|
|
τα απαραίτητα εφόδια για την επίλυση προβλημάτων (υπολογιστικών προβλημάτων) τα οποία
|
|
διαθέτουν μεγάλο όγκο δεδομένων και υπολογισμών σε ένα πλέγμα υπολογιστών. Η κατάτμηση
|
|
των δεδομένων και η συνεργασία πολλών υπολογιστικών συστημάτων κάνει αυτό το framework
|
|
πολύ αποδοτικό ειδικά σε προβλήματα όπου τα δεδομένα είναι σε αυξημένη κλίμακα και οι
|
|
υπολογσιστικές πράξεις για μία ορισμένη επεξεργασία πολύπλοκες.
|
|
|
|
=== Utilities
|
|
Το framework αποτελείται από ένα προγραμματισμένο μοντέλο *Map Reduce* το οποίο αποτελείται
|
|
από ένα κατανεμημένο σύστημα αποθήκευσης (storage) και βασικές μεθόδους για την επεξεργασία δεδομένων
|
|
μεγάλης κλίμακας (Big Data Processing) μέσω του προγραμματισμένου μοντέλου.
|
|
|
|
== Why?
|
|
Το hadoop έχει αναπτυχθεί για μεγάλα υπολογιστικά συστήματα (clusters) τα οποία αποτελούνται
|
|
από 2, 3 ακόμα και εκατοντάδες υπολογιστικές μηχανές. Το hadoop εξ' αρχής σχεδιάστηκε έτσι
|
|
ώστε να συνδυάζει το υλικό τέτοιων υπολογιστικών μηχανών (commodity hardware clusters), το οποίο μπορεί
|
|
να είναι απλό, με σκοπό την δυμιουργία παράλληλης επεξεργασίας και με μικρό κόστος στην αγορά του υλικού.
|
|
|
|
== How?
|
|
Όλα τα κομμάτια του hadoop έχουν αναπτυχθεί με σκοπό την διαχείριση των σφαλμάτων του Hardware με
|
|
μηχανισμούς που ορίζει το Framework αυτόματα.
|
|
|
|
== Hadoop Description
|
|
Ο πυρήνας του hadoop αποτελείται από ένα μέρος που αφορά την αποθήκη των δεδομένων. Αυτή είναι γνωστή ως
|
|
*Hadoop Distributed File System (HDFS)*, και το μέρος την υπολογιστικής επεξεργασίας δεδομένων και η διαμοίραση
|
|
της εργασίας σε όλους τους κόμβους της τοπολογίας που είναι γνωστό ως *MapReduce programming Model*.
|
|
|
|
=== Hadoop Destributed File System (HDFS)
|
|
Το HDFS αποτελείται από έναν κατανεμημένο χώρο αποθήκευσης ο οποίος
|
|
διαμοιράζεται από τις υπολογιστικές μηχανές ενός πλέγματος όπου το Hadoop διαχειρίζεται. Η κύρια
|
|
λειτουργία του είναι η κατάτμηση των αρχείων σε μεγάλα τμήματα (blocks) και η κατανομή αυτών
|
|
σε όλες τις μηχανές του πλέγματος (cluster).
|
|
|
|
=== Hadoop YARN
|
|
Έπειτα ο YARN αναλαμβάνει την διαμοίραση ενός τμήματος του
|
|
κώδικα ο οποίος είναι χρήσιμος για κάθε μηχανή, όπου τους δίνει τη δυνατότητα εφαρμογής ενός
|
|
συνόλου εντολών για την παράλληλη επεξεργασία των δεδομένων αντίστοιχα σε κάθε μηχανή. Αυτό δίνει
|
|
τη δυνατότητα στην κάθε μηχανή του πλέγματος να διαχειρίζεται το δικό της μέρος των δεδομένων σαν
|
|
να είναι στο τοπικό της σύστημα.
|
|
|
|
Ο YARN ακόμα αναλαμβάνει την έναρξη της διεργασίας που αφορά την εφαρμογή σε επίπεδο κόμβου.
|
|
|
|
=== Hadoop MapReduce
|
|
Το προγραμματισμένο μοντέλο MapReduce αναλαμβάνει την συλλογή των αποτελεσμάτων κάθε κόμβου της
|
|
τοπολογίας και την δημιουργία της εξόδου. Η έξοδος κάθε κόμβου δρομολογείται σε ξεχωριστό αρχείο.
|
|
|
|
=== Απόδοση Hadoop
|
|
Αυτό επιτυγχάνει μεγάλες ταχύτητες στην επεξεργασία δεδομένων μεγάλης κλίμακας, και ακόμα ταχύτερη μπορεί
|
|
να γίνει όταν το δίκτυο το οποίο διέπει αυτό το πλέγμα προσφέρει μεγάλες ταχύτητες επικοινωνίες μεταξύ
|
|
των υπολογιστικών μηχανών.
|
|
|
|
|
|
=== Hadoop Modules (Συνοπτικά)
|
|
* Hadoop Common – contains libraries and utilities needed by other Hadoop modules,
|
|
|
|
* Hadoop Distributed File System (HDFS) – a distributed file-system that stores data on commodity machines, providing very high aggregate bandwidth across the cluster,
|
|
oyROEaFv0v
|
|
* Hadoop YARN – (introduced in 2012) a platform responsible for managing computing resources in clusters and using them for scheduling users' applications,
|
|
|
|
* Hadoop MapReduce – an implementation of the MapReduce programming model for large-scale data processing.
|
|
|
|
|
|
== Εγκατάσταση και Εκτέλεση μίας Clustered Hadoop Υπηρεσίας
|
|
|
|
=== Έλεγχος του Cluster μας
|
|
Για να πραγματοποιήσουμε έλεγχο του cluster μας θα εκτελέσμουμε την εντολή:
|
|
|
|
[source, bash]
|
|
----
|
|
docker node ls
|
|
----
|
|
|
|
έτσι ώστε να πάρουμε σε μία λίστα την κατάσταση και την τοπολογία του cluster-kubernete (leader) καθώς
|
|
και την κατάσταση κάθε node (slave) του cluster.
|
|
|
|
[source, txt]
|
|
----
|
|
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
|
|
gcnl3yrd9f8m3eiihdvssw02b * snf-12294 Ready Active Leader 19.03.8
|
|
kj7ymjntacu719r3wz10q71wy snf-12296 Ready Active 18.09.7
|
|
t7zdlnw882xxv1unel5mt2zij snf-12399 Ready Active 19.03.11
|
|
hublulhmmp42s9vhdp3pquyx2 snf-12418 Ready Active 19.03.8
|
|
----
|
|
|
|
|
|
=== Απαραίτητα Πακέτα Που θα Χρειαστούν
|
|
|
|
==== Docker
|
|
Το Docker είναι ένα σύνολο Platform-as-a-Service (PaaS) προϊόντων που χρησιμοποιεί εικονικοποίηση σε επίπεδο
|
|
λειτουργικού συστήματος (OS-level virtualization) για την μεταφορά λογισμικού σε πακέτα τα οποία καλούνται
|
|
Containers. Τα Containers είναι απομονομένα το ένα από το άλλο και φέρουν το καθένα τα δικά του λογισμικά,
|
|
βιβλιοθήκες και αρχεία παραμετροποίησης (configuration files).
|
|
|
|
Τα Containers μπορούν να επικοινωνήσουν μεταξύ διαμέσου καλά ορισμένων καναλιών. Όλα τα Containers
|
|
τρέχουν από ένα μόνο πυρήνα λειτουργικού συστήματος (Operating System kernel) και ως εκ' τούτου χρήζουν
|
|
λιγότερες απαιτήσεις στους πόρους ενός υπολογιστικού συστήματος σε σχέση με τα Virtual Machines.
|
|
|
|
Το λογισμικό που φυλοξενεί (hosts) πολλά Containers καλείται Docker Engine.
|
|
|
|
|
|
==== Docker Compose
|
|
Το Docker Compose είναι ένα εργαλείο το οποίο ορίζει/παραμετροποιεί και τρέχει ένα multi-container Docker application.
|
|
Για την χρήση αυτού του εργαλείου είναι υποχρεωτική η χρήση αρχείου YAML για την παραμετροποίηση μιας υπηρεσίας
|
|
μιας εφαρμογής. Έπειτα, με μία απλή εντολή μπορεί κανείς να δημιουργήσει και να εκκινήσει όλες της υπηρεσίες
|
|
που έχουν περιγραφεί σε αυτό το YAML αρχείο.
|
|
|
|
==== GitHub
|
|
Ακόμα θα πρέπει να έχουμε πρόσβαση στο GitHub. Αυτό προειποθέτει να έχουμε ένα Git client.
|
|
|
|
|
|
=== Setting Up a Hadoop Cluster Using Docker
|
|
Για την εγκατάσταση του Hadoop σε ένα Docker, πρώτα απ' όλα χρειαζόμαστε μία εικόνα του Hadoop
|
|
(Hadoop Docker Image). Για την παραγωγή της εικόνας (Image), θα χρησιμοποιήσουμε έναν έτοιμο
|
|
πρότζεκτ το οποίο δίνεται από την βιβλιογραφεία ως link:++https://github.com/big-data-europe/docker-hadoop++[Big Data Europe]
|
|
και είναι ανοιχτό στο GitHub.
|
|
|
|
[source, bash]
|
|
----
|
|
git clone git@github.com:big-data-europe/docker-hadoop.git
|
|
----
|
|
|
|
==== Παραγωγή των Docker Image
|
|
Για την παραγωγή όλων των Docker Images θα χρησιμοποιήσουμε το αρχείο *Makefile* που διαθέτει το project.
|
|
Με την εντολή (*make*) γίνεται η παραγωγή των απαραίτητων Docker Images. Έπειτα τα dockers που δημιουργήθηκαν
|
|
μπορούμε να τα ερευνήσουμε εκτελώντας την εντολή *docker images* . Ένα στιγμιότυπο της μηχανής leader παρουσιάζεται
|
|
παρακάτω.
|
|
|
|
[source, txt]
|
|
----
|
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
|
bde2020/hadoop-resourcemanager 1.1.0-hadoop2.7.1-java8 c1e9b215cb9b 9 hours ago 1.37GB
|
|
bde2020/hadoop-historyserver 1.1.0-hadoop2.7.1-java8 495fd0b43074 9 hours ago 1.37GB
|
|
bde2020/hadoop-nodemanager 1.1.0-hadoop2.7.1-java8 d61cf73e6c0c 9 hours ago 1.37GB
|
|
bde2020/hadoop-datanode 1.1.0-hadoop2.7.1-java8 51340609864b 9 hours ago 1.37GB
|
|
bde2020/hadoop-namenode 1.1.0-hadoop2.7.1-java8 69b2a3c5f4dd 9 hours ago 1.37GB
|
|
bde2020/hadoop-submit master e9f7299c31a5 9 hours ago 1.37GB
|
|
----
|
|
|
|
|
|
==== Docker Compose Services (Αναφορά)
|
|
Έπειτα μέσω ενός YAML αρχείου θα κάνουμε expose τις απαραίτητες υπηρεσίες σε κάθε κόμβο της τοπολογίας
|
|
του ενός leader και των τεσσάρων slaves. Η τοπολογία που χρησιμοποιήσαμε στο cluster που διαθέτουμε είναι
|
|
η εξής:
|
|
|
|
* expose τεσσάρων κόμβων ως κόμβους οι οποίοι θα προσφέρουν του υπολογιστικούς πόρους τους για
|
|
την επεξεργασία δεδομένων.
|
|
|
|
* expose ενός κόμβου ως manager, HDFS και YARN.
|
|
|
|
.General Graph of Topology
|
|
image::fig1.png[]
|
|
|
|
Παρακάτω θα απαριθμήσουμε την κάθε υπηρεσία όπου το *docker compose* κάνει expose.
|
|
|
|
* **nodename** : Υπηρεσία η οποία γίνεται expose σε έναν κόμβο της τοπολογίας, στον leader κόμβο του
|
|
cluster μας. Το NodeName αποτελεί κομβική υπηρεσία του HDFS. Πρακτικά είναι υπεύθυνος να κρατάει το
|
|
*direcotry tree* όλων των αρχείων του System File, και καταγράφει την θέση κάθε δεδομένου (data) κατά
|
|
μήκος του Cluster.
|
|
|
|
* **datanode** : Υπηρεσία η οποία γίνεται expose σε όλους τους κόμβους της τοπολογίας ως κόμβοι
|
|
οι οποίοι θα μπορούν να εκτελέσουν υπολογισμούς. Τα DataNode στιγμιότυπα έχουν την ικανότητα
|
|
να επικοινωνούν μεταξύ τους, το οποίο γίνεται όταν οι DataNodes αναπαράγουν τα data.
|
|
|
|
* **resource manager**: Υπηρεσία η οποία γίνεται expose μόνο στον leader κόμβο της τοπολογίας μας.
|
|
Ουσιαστικά αυτή η υπηρεσία αφορά τον YARN ο οποίος είναι υπεύθυνος για την διαχείριση των υπολογιστικών
|
|
πόρων και των πόρων του δικτύου που διέπει τις μηχανές, την χρονοδρομολόγηση των Tasks και τον προγραμματισμό
|
|
της εφαρμογής (e.g. MapReduce jobs).
|
|
|
|
* **node manager**: Υπηρεσία που γίνεται expose σε όλους τους κόμβους της τοπολογίας. Αποτελεί μία ειδική
|
|
περίπτωση *TaskTracker* ο οποίος είναι πιο ευέλικτος από τον TaskTracker. Είνα υπεύθυνος για τον δυναμική
|
|
δέσμαυση των πόρων κάθε μηχανής. Ακόμα, για τον Node Manager ισχύει ότι αποτελεί ένα deamon του YARN.
|
|
|
|
* **history server**: Υπηρεσία που τρέχει μόνο στον leader του cluster μας. Εκτελεί ένα REST-API το οποίο
|
|
επιτρέπει στον τελικό χρήστη να αποκτήσει την κατάσταση κάθε εφαρμογής MapReduce η οποία έχει τερματίσει.
|
|
|
|
|
|
==== Docker Compose Υπηρεσιών
|
|
Έπειτα, θα πρέπει
|
|
|
|
|
|
|
|
|
|
== References
|
|
|
|
* [1] link:++https://en.wikipedia.org/wiki/Apache_Hadoop++[Hadoop General Description]
|
|
* [2] link:++https://clubhouse.io/developer-how-to/how-to-set-up-a-hadoop-cluster-in-docker/++[Setting Up Hadoop on a Cluster]
|
|
|
|
(C)
|
|
|