diff --git a/report.html b/report.html index da1735b..6131583 100644 --- a/report.html +++ b/report.html @@ -533,6 +533,13 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

Hadoop YARN

+

Το βασικό υπόστωμα είναι το HDFS, είναι ο πρώτος δαίμονας που δημιουργεί τα NameNodes για τα +replications και τα φυλάγματα αρχείων HDFS.

+
+
+

Το YARN είναι ένας ενδιάμεσος δαίμονας για την σύνδεση των MapReduce με το HDFS.

+
+

Έπειτα ο YARN αναλαμβάνει την διαμοίραση ενός τμήματος του κώδικα ο οποίος είναι χρήσιμος για κάθε μηχανή, όπου τους δίνει τη δυνατότητα εφαρμογής ενός συνόλου εντολών για την παράλληλη επεξεργασία των δεδομένων αντίστοιχα σε κάθε μηχανή. Αυτό δίνει @@ -540,7 +547,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b να είναι στο τοπικό της σύστημα.

-

Ο YARN ακόμα αναλαμβάνει την έναρξη της διεργασίας που αφορά την εφαρμογή σε επίπεδο κόμβου.

+

Ο YARN ακόμα αναλαμβάνει την έναρξη της διεργασίας που αφορά την εφαρμογή σε επίπεδο κόμβου (MapReduce).

@@ -676,7 +683,7 @@ bde2020/hadoop-submit master e9f7299c31a5 9
-

Docker Compose Services

+

Docker Compose Services (Αναφορά)

Έπειτα μέσω ενός YAML αρχείου θα κάνουμε expose τις απαραίτητες υπηρεσίες σε κάθε κόμβο της τοπολογίας του ενός leader και των τεσσάρων slaves. Η τοπολογία που χρησιμοποιήσαμε στο cluster που διαθέτουμε είναι @@ -733,6 +740,285 @@ cluster μας. Το NodeName αποτελεί κομβική υπηρεσία

+
+

Configuration of Docker Compose (Υπηρεσιών)

+
+

Έπειτα, θα πρέπει να κατασκευάσουμε ένα configuration YARN αρχείο το οποία θα αναλάβει την εκκίνηση +των υπηρεσιών σε όλους τους κόμβους κατά μήκος του Cluster. Το configuration αρχείο αναλαμβάνει +ακόμα και τη διαδικασία EXPOSE έτσι ώστε δίνεται η δυνατότητα πρόσβασης σε αυτές από το Internet.

+
+
+

To YARN αρχείο παρουσιάζετια παρακάτω.

+
+
+
+
version: '3.4'
+
+services:
+  namenode:#εκκίνηση της υπηρεσίας nodename
+    image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
+    ports:
+      #expose στην πόρτα 9870
+      - 9870:9870
+    networks:
+      - hbase
+    volumes:
+      - namenode:/hadoop/dfs/name
+    environment:
+      - CLUSTER_NAME=test
+    env_file:
+      - ./hadoop.env
+    deploy:
+      #replicas number
+      mode: replicated
+      replicas: 1
+      restart_policy:
+        condition: on-failure
+      placement:
+        constraints:
+          #deploy μόνο στον leader του swarm
+          - node.role == manager
+      labels:
+        traefik.docker.network: hbase
+
+  datanode:
+    #εκκίνηση datanode υπηρεσίας
+    image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
+    ports:
+      #expose στην πόρτα 9864
+      - 9864:9864
+    networks:
+      - hbase
+    volumes:
+      - datanode:/hadoop/dfs/data
+    env_file:
+      - ./hadoop.env
+    environment:
+      SERVICE_PRECONDITION: "namenode:9870"
+    deploy:
+      #το global συμαίνει ότι η υπηρεσία γίνεται expose σε όλους τους κόμβους του swarm.
+      mode: global
+      restart_policy:
+        condition: on-failure
+      labels:
+        traefik.docker.network: hbase
+
+  resourcemanager:
+    #εκκίνηση resource manager υπηρεσίας.
+    image: bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
+    ports:
+      #expose στην πόρτα 8088
+      - 8088:8088
+    networks:
+      - hbase
+    environment:
+      SERVICE_PRECONDITION: "namenode:9870 datanode:9864"
+    env_file:
+      - ./hadoop.env
+    deploy:
+      mode: replicated
+      replicas: 1
+      restart_policy:
+        condition: on-failure
+      placement:
+        constraints:
+          #expose μόνο στον leader του swarm.
+          - node.role == manager
+      labels:
+        traefik.docker.network: hbase
+    healthcheck:
+      disable: true
+
+  nodemanager:
+    #εκκίνηση node manager υπηρεσίας
+    image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
+    ports:
+      #expose στην πόρτα 8042
+      - 8042:8042
+    networks:
+      - hbase
+    environment:
+      SERVICE_PRECONDITION: "namenode:9870 datanode:9864 resourcemanager:8088"
+    env_file:
+      - ./hadoop.env
+    deploy:
+      #λειτουργία σε global mode.
+      mode: global
+      restart_policy:
+        condition: on-failure
+      labels:
+        traefik.docker.network: hbase
+
+  historyserver:
+    #εκκίνηση history server υπηρεσίας.
+    image: bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
+    ports:
+      #expose στην πόρτα 8188.
+      - 8188:8188
+    networks:
+      - hbase
+    volumes:
+      - hadoop_historyserver:/hadoop/yarn/timeline
+    environment:
+      SERVICE_PRECONDITION: "namenode:9870 datanode:9864 resourcemanager:8088"
+    env_file:
+      - ./hadoop.env
+    deploy:
+      mode: replicated
+      replicas: 1
+      placement:
+        constraints:
+          #expose μόνο στον leader του swarm.
+          - node.role == manager
+      labels:
+        traefik.docker.network: hbase
+
+volumes:
+  datanode:
+    external: false
+  namenode:
+  hadoop_historyserver:
+
+#ανάθεση των replicas στο δίκτυο που έχουμε φτιάξει.
+networks:
+  hbase:
+
+
+
+
+

Docker Compose (Εκκίνηση Υπηρεσιών)

+
+

Για την δημιουργία του δικτύου και το deploy των υπηρεσιών όπως ορίζει το Compose αρχείο τρέξαμε την εξής εντολή:

+
+
+
+
docker stack deploy -c docker-compose.yml ondemand_hadoop3
+
+
+
+

Εξερέυνηση υπηρεσιών:

+
+
+

Στον leader

+
+
+
+
$ docker service ls
+
+ID                  NAME                               MODE                REPLICAS            IMAGE                                                    PORTS
+is4kvptx39az        ondemand_hadoop3_datanode          global              4/4                 bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8          *:9864->9864/tcp
+
+xunz4ket7yo0        ondemand_hadoop3_historyserver     replicated          1/1                 bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8     *:8188->8188/tcp
+
+lrmf8eipoudg        ondemand_hadoop3_namenode          replicated          1/1                 bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8          *:9870->9870/tcp
+
+v4zdvf1w81n8        ondemand_hadoop3_nodemanager       global              4/4                 bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8       *:8042->8042/tcp
+
+xeiumycqrwjo        ondemand_hadoop3_resourcemanager   replicated          1/1                 bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8   *:8088->8088/tcp
+
+
+
+
+
$ docker ps
+
+CONTAINER ID        IMAGE                                                    COMMAND                  CREATED             STATUS                 PORTS               NAMES
+2b429c832ac0        bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8   "/entrypoint.sh /run…"   7 hours ago         Up 7 hours             8088/tcp            ondemand_hadoop3_resourcemanager.1.vlfjc5ffij34zo58isbwsjfuq
+
+f7f074de631d        bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8       "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   8042/tcp            ondemand_hadoop3_nodemanager.gcnl3yrd9f8m3eiihdvssw02b.dwx96ccbgytwb85vm4qj1onh2
+
+b6bf6acfc31f        bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8          "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   9864/tcp            ondemand_hadoop3_datanode.gcnl3yrd9f8m3eiihdvssw02b.sotmojxw1g1m76k2b0xy4hdv4
+
+8bb54d6631f6        bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8          "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   9870/tcp            ondemand_hadoop3_namenode.1.iwj401lx6s85sdmvb2qxxkjmm
+
+cc28f5a899f4        bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8     "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   8188/tcp            ondemand_hadoop3_historyserver.1.xc82cobwgbi0se12nx5fcdlrt
+
+6cdf105a7f12        bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8          "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   9870/tcp            docker-hadoop_namenode_1
+
+
+
+

Σε έναν Slave

+
+
+
+
$ docker ps
+
+CONTAINER ID        IMAGE                                                COMMAND                  CREATED             STATUS                 PORTS               NAMES
+18461d59101d        bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8   "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   8042/tcp            ondemand_hadoop3_nodemanager.hublulhmmp42s9vhdp3pquyx2.y6w1cz4a3rt0rx74qlan1aiil
+
+011b14fb01a2        bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8      "/entrypoint.sh /run…"   7 hours ago         Up 7 hours (healthy)   9864/tcp            ondemand_hadoop3_datanode.hublulhmmp42s9vhdp3pquyx2.ix2j42f1uldwxi74su9p0ulvi
+
+
+
+
+

Ορισμός Τοπολογίας στο Hadoop

+
+

Όσων αφορά την εγκατάσταση του Hadoop στο swarm, η κατανομή των κόμβων έχει γίνει ως εξής:

+
+
+ +
+
+

Επομένως, η τοπολογίας στο Hadoop αποτελείται από 4 κόμβους εξυπηρέτησης.

+
+
+

Γενικές πρηροφορίες για την τοπολογία και του swarm μπορούμε να βρούμε εδώ .

+
+
+ +
+

Παράδειγμα Εκτέλεσης

+
+

Για την εκτέλεση ενός σεναρίου χρησιμοποιήσαμε την εργασία της θεωρίας που βασιζόταν σε μία εφαρμογή +MapReduce. Ο πηγαίος κώδικας που χρησιμοποιήσαμε βρίσκεται στο repo που επισυνάπτεται εδώ .

+
+
+

Για την εκτέλεση του παραδείγματος αρχικά πρέπει να αποκησουμε πρόσβαση στο κεντρικό container από το +οποίο μπορούν να εκκινήσουν διεργασίες ανάθεσης MapReduce εργασιών.

+
+
+
+
# docker exec -it <container_id> bash
+$ docker exec -it 8bb54d6631f6 bash
+
+
+
+

Έπειτα, εκτός του ότι πρέπει να δημιουργήσουμε ένα σύνολο αρχείων για τη είσοδο του MapReduce προγράμματος, +πρέπει να τα κάνουμε put στον HDFS αυτά τα αρχεία. Είναι προυπόθεση η είσοδο να βρίσκεται στο κατανεμημένο +αυτό σύστημα, το οποίο είναι το μοναδικό σύστημα αρχείων στο οποίο έχουν πρόσβαση όλοι οι κόμβοι του πλέγματος.

+
+
+
+
# Δημιουργία φακέλου για την είσοδο.
+$ hadoop fs -mkdir -p input
+
+# Αντιγραφή των αρχείων εισόδων.
+$ hadoop fs -put * input
+
+
+
+

Στη συνέχεια φτιάχνουμε το jar file, που είναι ο default τρόπος που τρέχει κάτω από Java σε συνεργασία +του Hadoop ένα αρχείο Java. Ύστερα, για την εκτέλεση του jar αρχείου που αφορά την εφαρμογή που θέλουμε να τρέξουμε, +τρέχουμε την παρακάτω εντολή:

+
+
+
+
$ hadoop jar ccount.jar org.myorg.fileccount input output
+
+
+
+

Τέλος, για να δούμε την έξοδο αρκεί να πούμε hadoop fs -cat output/* .

+
@@ -757,7 +1043,7 @@ cluster μας. Το NodeName αποτελεί κομβική υπηρεσία