CDH ( pour Cloudera Distributed Hadoop ) est une distribution complète, testée et populaire d'Apache Hadoop et des projets associés. CDH livre les éléments de base de Hadoop - stockage évolutif et calcul distribué - ainsi qu'une interface utilisateur Web et capacités d'entreprise vitales. CDH est une solution Open Source sous licence Apache et est la seule solution Hadoop à offrir un lot unifié de traitement, recherche interactive SQL et interactive, et contrôle d'accès basé sur les rôles.
CDH fournit:
Notre plateforme CDH 6 sera composée de la plateforme suivante :
- Serveur Edge : serveur « d’interface » entre les utilisateurs et le cluster afin de lancer des jobs (traitements).
- Serveur Utility : serveur où les services Cloudera Manager ainsi que Navigator seront déployés.
- Serveur SQL : serveur de base de donnée.
- Serveur Master : il gère les processus maîtres d’Hadoop comme le systeme de gestion de fichiers HDFS ou YARN.
- Serveur Worker : Contient les blocs de données correspondant aux fichiers à transmettre.
La version mineure Cloudera Manager doit toujours être égale ou supérieure à la version mineure CDH.
Les anciennes versions de Cloudera Manager peuvent ne pas prendre en charge les fonctionnalités des versions plus récentes de CDH.
Tous les serveurs devront avoir accès aux repositories de cloudera suivants:
| Operating System | Version (bold=new) |
|---|---|
| Red Hat Enterprise Linux-compatible | |
| RHEL / CentOS / Oracle Linux RHCK | 7.6, 7.5, 7.4, 7.3 |
| 6.10, 6.9 , 6.8 | |
Le JDK oracle est disponible à l'adresse suivantes :
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
| JDK 8 | Supported in C5.3 and Higher |
|---|---|
| 1.8u181 | Recommended / Latest version tested |
| 1.8u162 | Recommended |
| 1.8u144 | Recommended |
| 1.8u131 | Recommended |
| 1.8u31 | Minimum required |
Le JDK oracle est disponible à l'adresse suivantes :
| JDK 8 | Supported in C5.3 and Higher |
|---|---|
| 1.8u181 | Recommended / Latest version tested |
La console d'administration de Cloudera Manager que nous utiliserons pour installer, configurer, gérer et surveiller les services, prend en charge la dernière version des navigateurs suivants :
| MySQL Version | Cloudera Enterprise 6.x |
|---|---|
| 5.7 | ![]() |
| MariaDB Version | Cloudera Enterprise 6.x |
|---|---|
| 5.5 | ![]() |
| 10.0 | ![]() |
Les actions suivantes devront êtres réalisées sur tous les serveurs du cluster.
Les horloges de tous les nœuds de votre cluster ainsi que la machine qui exécute le Cloudera Manager doivent pouvoir se synchroniser à une référence de temps ( serveur NTP par exemple ).
Cette référence de temps doit être commune à tous les nœuds.
[root@srv-*** ~]# vi /etc/chrony.conf
Sur les distributions type Red Hat / CentOS, SELinux (Security-Enhanced Linux) est activé par défaut. Malheureusement, ceci empêche parfois l'installation et le fonctionnement correct de certains programmes.
Si on veut désactiver de manière définitive, y compris entre les boots, il faut modifier le fichier “/etc/selinux/config”, et modifier la ligne : SELINUX=enforcing en SELINUX=disabled
[root@srv-*** ~]# vi /etc/selinux/config
Le paramètre admet 3 valeurs, que l'on peut trouver dans le fichier :
# SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced : politique de sécurité activée # permissive - SELinux prints warnings instead of enforcing : affichage d'un message d'avertissement. # disabled - No SELinux policy is loaded : politique de sécurité non chargée.
Les opérations cryptographiques nécessitent une entropie pour assurer l'aléatoire.
Nous pouvons vérifier l'entropie disponible sur un système Linux en exécutant la commande suivante:
[root@srv-*** ~]# cat /proc/sys/kernel/random/entropy_avail
La sortie affiche l'entropie actuellement disponible.
Vérifiez l'entropie plusieurs fois pour déterminer l'état du pool d'entropie sur le système. Si l'entropie est toujours faible (500 ou moins), vous devez l'augmenter en installant rng-tools et en démarrant le service rngd.
[root@srv-*** ~]# yum installer rng-tools [root@srv-*** ~]# cp /usr/lib/systemd/system/rngd.service /etc/systemd/system/ [root@srv-*** ~]# sed -i -e /ExecStart=\/sbin\/rngd -f/ExecStart=\/sbin\/rngd -f -r \/dev\/urandom/' /etc/systemd/system/rngd.service [root@srv-*** ~]# systemctl démon-recharger [root@srv-*** ~]# systemctl start rngd [root@srv-*** ~]# systemctl active rngd
[root@srv-*** ~]# nano /etc/sysconfig/network NETWORKING_IPV6=no IPV6INIT=no
[root@srv-*** ~]# nano /etc/rc.local echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled [root@srv-*** ~]# chmod +x /etc/rc.d/rc.local [root@srv-*** ~]# /etc/rc.d/rc.local
[root@srv-*** ~]# nano /etc/sysctl.conf # Kernel sysctl configuration file for ACCOR # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 # Restricting access to kernel logs kernel.dmesg_restrict = 1 # Restricting access to kernel pointers in the proc filesystem kernel.kptr_restrict = 1 # Randomize the positions of the stack, virtual dynamic shared object # (VDSO) page, and shared memory regions. # The base address of the data segment is located immediately after # the end of the executable code segment. # Enable Randomized Virtual Memory Region Placement (Scored) kernel.randomize_va_space = 2 # Controls IP packet forwarding # Disable IP Forwarding (Scored) net.ipv4.ip_forward = 0 net.ipv4.route.flush = 1 # Respond to a ping net.ipv4.icmp_echo_ignore_all = 0 # Enable Ignore Broadcast Requests (Scored) net.ipv4.icmp_echo_ignore_broadcasts = 1 # Enable Bad Error Message Protection (Scored) net.ipv4.icmp_ignore_bogus_error_responses = 1 # Enable TCP SYN Cookies (Scored) net.ipv4.tcp_syncookies = 1 # protect against tcp time-wait assassination hazards # drop RST packets for sockets in the time-wait state net.ipv4.tcp_rfc1337 = 1 # Enable source validation by reversed path, as specified in RFC1812 # Enable RFC-recommended Source Route Validation (Scored) net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 # Send redirects, if router, but this is just server # Disable Send Packet Redirects (Scored) net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # Accept packets with SRR option? No # Disable Source Routed Packet Acceptance (Scored) net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Disable ICMP Redirect Acceptance (Scored) net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # Disable Secure ICMP Redirect Acceptance (Scored) net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 # Disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 # Restrict Core Dumps (Scored) fs.suid_dumpable = 0 # Swappiness vm.swappiness = 1
Depuis la polémique du licensing coté Oracle, Cloudera supports depuis la java-1.8.0-openjdk
[root@srv-*** ~]# yum install java-1.8.0-openjdk.x86_64
MySQL Connector/ODBC permet de se connecter à un serveur de base de données MySQL grâce à l'utilisation des API (interface de programmation) ODBC.
[root@srv-*** ~]# yum install mysql-connector-java
On force le hostname :
[root@srv-*** ~]# hostnamectl set-hostname cl-xxxx
Sur tout les noeuds on force le hostname dans le cloud templates (Machines EC2 hébergées chez AWS)
[root@srv-*** ~]# sudo vi /etc/cloud/cloud.cfg
Ajoutez la ligne suivante au bas du fichier pour vous assurer que le nouveau nom d'hôte est préservé entre les redémarrages/redémarrages :
preserve_hostname: true
On ajoute le proxy dans “yum.conf” si nécessaire.
[root@srv-*** ~]# vi /etc/yum.conf
On update le system
[root@srv-*** ~]# yum update
On installe les packages suivants :
[root@srv-*** ~]# yum install wget curl nano unzip zip
On désactive firewallD et selinux
[root@srv-*** ~]# systemctl disable firewalld
On reboot
[root@srv-*** ~]# reboot
Ajout du groupe hadoop:
[root@cl-dlmgr01 ~]# groupadd hadoop
Ajout de l'utilisateur hduser:
[root@cl-dlmgr01 ~]# adduser --groups hadoop hduser [root@cl-dlmgr01 ~]# passwd hduser (keepass)
Définition des droits pour le nouvel utilisateur:
[root@cl-dlmgr01 ~]# visudo -f /etc/sudoers.d/hduser # Add hduser user hduser ALL=(ALL) NOPASSWD:ALL
Autoriser dans /etc/ssh/sshd_config : PubkeyAuthentication et PasswordAuthentication :
PubkeyAuthentication yes PasswordAuthentication yes
Redémarrage du service sshd:
[root@cl-dlmgr01 ~]# systemctl restart sshd
Génère une clé pour le user : hduser
[root@srv-utility01 ~]# su - hduser [root@srv-utility01 ~]# ssh-keygen -t rsa
Depuis le serveur cloudera manager:
[root@srv-utility01 ~]# su - hduser [root@srv-utility01 ~]# ssh-copy-id -i .ssh/id_rsa.pub hduser@srv-***
Préparation des partitions:
[root@srv-master0X ~]# fdisk /dev/xvdb [root@srv-master0X ~]# fdisk /dev/xvdc [root@srv-master0X ~]# fdisk /dev/xvdd
Modifier le fichier /etc/fstab:
[root@srv-master0X ~]# vi /etc/fstab /dev/xvdb1 /data01 xfs defaults,noatime 1 2 /dev/xvdc1 /data02 xfs defaults,noatime 1 2 /dev/xvdd1 /data03 xfs defaults,noatime 1 2 [root@srv-master0X ~]# mkdir -p /data01 [root@srv-master0X ~]# mkdir -p /data02 [root@srv-master0X ~]# mkdir -p /data03
XFS Commands
[root@srv-master0X ~]# mkfs.xfs /dev/xvdb1 [root@srv-master0X ~]# mount /dev/xvdb1 /data01 [root@srv-master0X ~]# xfs_io –xc "resblks 0" /data01 [root@srv-master0X ~]# xfs_io –xc "resblks" /data01
Préparation des partitions:
[root@srv-worker0X ~]# fdisk /dev/xvdb [root@srv-worker0X ~]# fdisk /dev/xvdc [root@srv-worker0X ~]# fdisk /dev/xvdd [root@srv-worker0X ~]# fdisk /dev/xvde [root@srv-worker0X ~]# fdisk /dev/xvdf
Modifier le fichier /etc/fstab:
[root@srv-worker0X ~]# vi /etc/fstab /dev/xvdb1 /hdfs-data01 xfs defaults,noatime 1 2 /dev/xvdc1 /hdfs-data02 xfs defaults,noatime 1 2 /dev/xvdd1 /hdfs-data03 xfs defaults,noatime 1 2 /dev/xvde1 /kudu-data01 xfs defaults,noatime 1 2 /dev/xvdf1 /kudu-data02 xfs defaults,noatime 1 2 [root@srv-worker0X ~]# mkdir -p /hdfs-data01 [root@srv-worker0X ~]# mkdir -p /hdfs-data02 [root@srv-worker0X ~]# mkdir -p /hdfs-data03 [root@srv-worker0X ~]# mkdir -p /kudu-data01 [root@srv-worker0X ~]# mkdir -p /kudu-data02
XFS Commands
[root@srv-worker0X ~]# mkfs.xfs /dev/xvdb1 [root@srv-worker0X ~]# mount /dev/xvdb1 /hdfs-data01 etc ... for all disk [root@srv-worker0X ~]# xfs_io –xc "resblks 0" /hdfs-data01 [root@srv-worker0X ~]# xfs_io –xc "resblks" /hdfs-data01
Cloudera Manager constitue la tour de contrôle de CDH. L’outil apporte une console d’administration Web pour déployer, gérer, monitorer et contrôler l’état de santé de déploiements de CDH. Il comprend également une API pour configurer le système et récupérer des métriques et des informations sur le fonctionnement d’un cluster CDH.
Cloudera Manager permet d’ajouter des fonctions clé à Cloudera Express : le reporting opérationnel, gestion de quota, journal de configurations, mises à jour en continu, re-démarrage de services, intégration de Kerberos, intégration à LDAP, gestions du TLS, support de SNMP et récupération après sinistre automatique.
Nous partirons du principe que les pré-requis sont bien appliqué sur l'ensemble des serveurs composants le cluster. (cf. Pré-requis)
Récuperer le fichier “cloudera-manager.repo” mis à disposition sur le repository officiel à l'adresse suivante : Archive Cloudera
[root@cl-dlmgr01 ~]# nano /etc/yum.repos.d/cloudera-manager.repo [cloudera-manager] name=Cloudera Manager 6.1.0 baseurl=https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/ gpgkey=https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPM-GPG-KEY-cloudera gpgcheck=1 enabled=1 autorefresh=0 type=rpm-md [root@cl-dlmgr01 ~]# yum repolist
Pour l'installation du cloudera Manager, il suffira de passer par la commande “yum” sur le serveur “dlmgr01”.
Installation du cloudera manager:
[root@srv-utility01 ~]# yum install cloudera-manager-daemons cloudera-manager-server Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.heanet.ie * extras: ftp.heanet.ie * updates: ftp.heanet.ie Resolving Dependencies --> Running transaction check ---> Package cloudera-manager-daemons.x86_64 0:6.1.0-769885.el7 will be installed --> Processing Dependency: perl for package: cloudera-manager-daemons-6.1.0-769885.el7.x86_64 ---> Package cloudera-manager-server.x86_64 0:6.1.0-769885.el7 will be installed --> Running transaction check ---> Package perl.x86_64 4:5.16.3-294.el7_6 will be installed --> Processing Dependency: perl-libs = 4:5.16.3-294.el7_6 for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Socket) >= 1.3 for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Scalar::Util) >= 1.10 for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl-macros for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl-libs for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(threads::shared) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(threads) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(constant) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Time::Local) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Time::HiRes) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Storable) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Socket) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Scalar::Util) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Pod::Simple::XHTML) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Pod::Simple::Search) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Getopt::Long) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Filter::Util::Call) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(File::Temp) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(File::Spec::Unix) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(File::Spec::Functions) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(File::Spec) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(File::Path) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Exporter) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Cwd) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: perl(Carp) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Processing Dependency: libperl.so()(64bit) for package: 4:perl-5.16.3-294.el7_6.x86_64 --> Running transaction check ---> Package perl-Carp.noarch 0:1.26-244.el7 will be installed ---> Package perl-Exporter.noarch 0:5.68-3.el7 will be installed ---> Package perl-File-Path.noarch 0:2.09-2.el7 will be installed ---> Package perl-File-Temp.noarch 0:0.23.01-3.el7 will be installed ---> Package perl-Filter.x86_64 0:1.49-3.el7 will be installed ---> Package perl-Getopt-Long.noarch 0:2.40-3.el7 will be installed --> Processing Dependency: perl(Pod::Usage) >= 1.14 for package: perl-Getopt-Long-2.40-3.el7.noarch --> Processing Dependency: perl(Text::ParseWords) for package: perl-Getopt-Long-2.40-3.el7.noarch ---> Package perl-PathTools.x86_64 0:3.40-5.el7 will be installed ---> Package perl-Pod-Simple.noarch 1:3.28-4.el7 will be installed --> Processing Dependency: perl(Pod::Escapes) >= 1.04 for package: 1:perl-Pod-Simple-3.28-4.el7.noarch --> Processing Dependency: perl(Encode) for package: 1:perl-Pod-Simple-3.28-4.el7.noarch ---> Package perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 will be installed ---> Package perl-Socket.x86_64 0:2.010-4.el7 will be installed ---> Package perl-Storable.x86_64 0:2.45-3.el7 will be installed ---> Package perl-Time-HiRes.x86_64 4:1.9725-3.el7 will be installed ---> Package perl-Time-Local.noarch 0:1.2300-2.el7 will be installed ---> Package perl-constant.noarch 0:1.27-2.el7 will be installed ---> Package perl-libs.x86_64 4:5.16.3-294.el7_6 will be installed ---> Package perl-macros.x86_64 4:5.16.3-294.el7_6 will be installed ---> Package perl-threads.x86_64 0:1.87-4.el7 will be installed ---> Package perl-threads-shared.x86_64 0:1.43-6.el7 will be installed --> Running transaction check ---> Package perl-Encode.x86_64 0:2.51-7.el7 will be installed ---> Package perl-Pod-Escapes.noarch 1:1.04-294.el7_6 will be installed ---> Package perl-Pod-Usage.noarch 0:1.63-3.el7 will be installed --> Processing Dependency: perl(Pod::Text) >= 3.15 for package: perl-Pod-Usage-1.63-3.el7.noarch --> Processing Dependency: perl-Pod-Perldoc for package: perl-Pod-Usage-1.63-3.el7.noarch ---> Package perl-Text-ParseWords.noarch 0:3.29-4.el7 will be installed --> Running transaction check ---> Package perl-Pod-Perldoc.noarch 0:3.20-4.el7 will be installed --> Processing Dependency: perl(parent) for package: perl-Pod-Perldoc-3.20-4.el7.noarch --> Processing Dependency: perl(HTTP::Tiny) for package: perl-Pod-Perldoc-3.20-4.el7.noarch ---> Package perl-podlators.noarch 0:2.5.1-3.el7 will be installed --> Running transaction check ---> Package perl-HTTP-Tiny.noarch 0:0.033-3.el7 will be installed ---> Package perl-parent.noarch 1:0.225-244.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================================================================================== Installing: cloudera-manager-daemons x86_64 6.1.0-769885.el7 cloudera-manager 1.1 G cloudera-manager-server x86_64 6.1.0-769885.el7 cloudera-manager 8.7 k Installing for dependencies: perl x86_64 4:5.16.3-294.el7_6 updates 8.0 M perl-Carp noarch 1.26-244.el7 base 19 k perl-Encode x86_64 2.51-7.el7 base 1.5 M perl-Exporter noarch 5.68-3.el7 base 28 k perl-File-Path noarch 2.09-2.el7 base 26 k perl-File-Temp noarch 0.23.01-3.el7 base 56 k perl-Filter x86_64 1.49-3.el7 base 76 k perl-Getopt-Long noarch 2.40-3.el7 base 56 k perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k perl-PathTools x86_64 3.40-5.el7 base 82 k ... Complete!
Déclaration de la version de JAVA dans le fichier de Cloudera Manager.
[root@slv-cl-dev-dlmgr01 ~]# nano /etc/default/cloudera-scm-server export JAVA_HOME="/usr/java/jdk1.8.0_162"
Préparation base de donnée pour le Cloudera Manager:
[root@cl-dlmgr01 ~]# cd /usr/share/cmf/schema/ [root@cl-dlmgr01 ~]# ./scm_prepare_database.sh mysql -h localhost -u<USER_BDD_MySQL> -p<PASS_BDD_MySQL> --scm-host slv-fr-cis-tst01 scm scm scmAdmin
Démarrage du service:
[root@cl-dlmgr01 ~]# systemctl start cloudera-scm-server
Connexion à l'interface:
Une fois l'installation terminée, il suffira de se rendre sur l'interface du Cloudera manager :
http://<ip_du_server>:7180/
Le login par défaut : (admin/admin)
Activer la HA sur le ressources manager
Activer le loadbalancer pour Hue
Référence : http://www.cloudera.com/documentation/other/reference-architecture/PDF/cloudera_ref_arch_aws.pdf