I. Vue d'ensemble
Apache Spark est un moteur d'analyse rapide comme l'éclair unifiée (ne fournit pas de solutions de stockage de données)
Rapide comme l' éclair ( par rapport à un système de traitement classique des données volumineuses MapReduce):
- Déclencher une des tâches de calcul complexe Etape scission d'emploi en une pluralité de grains fins, chaque étape peut être un parallèle calcul distribué, pour la première génération de moteur de calcul de MapReduce, et il tâche ReduceTask MapTask diviser le gros grains, en particulier pour tâches complexes de calcul, nous avons besoin de plus que le travail MapReduce en série;
- moteur de calcul Spark-mémoire; MapReduce pour moteur de calcul basé sur le disque;
- Résultats intermédiaires Spark prennent en charge la mise en cache d'améliorer considérablement l'efficacité de calcul, les résultats peuvent être appliqués à cette réutilisation du cache et de récupération, les résultats intermédiaires MapReduce doivent écrire dans le débordement de disque;
Unified (tous les grands programmes offrent un grand traitement des données) :
- Lot (traitement par lots): Spark RDD, au lieu de Hadoop MapReduce
- Matériau de traitement (Streams Processing): Spark en continu et structuré Spark Streaming, au lieu Kafka Streams, tempête
- Interactive Query (SQL): Spark SQL, au lieu de la Ruche
- Machine Learning (Machine Learning): Spark MLlib, au lieu de Mahout
- Graphiques de calcul (Graph): Spark Graphx, calculés sur la base des graphiques de support de base de données NoSQL stockées (Neo4j)
- Spark bibliothèque écologique: résoudre d'autres gros problème de traitement de données
caractéristique
- Efficace: lot haute performance et calculs flux prennent en charge, en utilisant très sophistiqué DAG Scheduler (planificateur de graphe acyclique orienté) est une optimisation des requêtes physique et moteur d'exécution
- Facile à utiliser: Fournit plus de 80 fonctions d'ordre supérieur simplifie le développement d'applications parallèles distribués, et le soutien aux langages de programmation (Java, Python, Scala, R)
- Général: intégrer une variété de programmes de traitement des données, telles que SQL, Batch, Streaming, ML, graphique;
- Environnement d'exploitation: système de planification prend en charge une variété de la gestion des ressources, telles que YARN, Apache Mesos, K8S, autonome et ainsi de suite;
二, MapReduce VS Spark
Comme la première génération de grand cadre de traitement de données de MapReduce, au début de la conception juste pour répondre à la demande urgente de données de masse en fonction de la phase de calcul des données de masse. Depuis 2006, dépouillé du projet Nutch (Java moteur de recherche), le principal problème est le problème de la prise de conscience des premières personnes primaires de grande face de données.
La mise en œuvre toute MapReduce est calculée sur la base du calcul du disque IO, ainsi que la popularité croissante de la grande technologie de données, les gens ont commencé à redéfinir la taille des données, non satisfait de terminer le calcul de grandes quantités de données dans un délai raisonnable, également calculé sur l'efficacité des exigences plus strictes proposées, car les gens ont commencé à explorer l'utilisation Carte Réduire le cadre de calcul pour compléter un algorithme d'ordre supérieur complexe, souvent , ces algorithmes généralement pas par une seule itération de la carte Réduire terminé. En raison de la carte Réduire le modèle de calcul est toujours le résultat est stocké sur le disque, chaque itération nécessite un disque de données est chargé en mémoire, ce qui apporte plus étendu pour les itérations suivantes.
2009 Laboratoire de Spark à Berkeley, Californie AMP né après 2010 , le premier projet open source est aimé par beaucoup de développeurs, début Juin 2013 l'incubateur Apache, Février 2014 est devenu officiellement un projet Apache haut niveau. Spark se développe si rapidement parce que Spark dans la couche de calcul est évidemment supérieure à la carte Hadoop Réduire ce disque calcul itératif, car Spark peut utiliser la mémoire sur les données pour faire le calcul, mais aussi des résultats intermédiaires de calculs peuvent être mises en mémoire cache, ce qui est le suivi le calcul itératif fait gagner du temps, d' améliorer considérablement l'efficacité de calcul des données de masse de.
Spark a également présenté dans l'utilisation et Spark MapReduce faire une analyse de régression (n itérations de l' algorithme nécessaire), le taux d'étincelle de près de 10 à 100 fois ce calcul de vitesse calculée MapReduce.
Non seulement cette étincelle dans la philosophie de conception a également proposé la One stack ruled them all
stratégie, et fournit des services informatiques orientés par lots Spark tels que la branche basée sur : l' apprentissage par Spark-requêtes interactives, le traitement des flux en temps quasi réel, la machine à réaliser, Grahx stockage relationnel graphique.
Pas difficile de voir sur la figure dans la couche de calcul Apache Spark, Spark projet a commencé au niveau stratégique au rôle de connexion et ne pas jeter les Hadoop de données à grande origine comme la principale solution. peut être calculée Spark vers le bas, car les données de HDFS, HBase, Cassandra et serveur de fichiers Amazon S3, ce qui signifie que calculée en utilisant la couche Spark, l'architecture de niveau de stockage de l'utilisateur d'origine sans modification.
En troisième lieu , le processus de calcul
Parce que Spark est calculée après la naissance de calcul MapReduce, dessin d' expérience de conception MapReduce, éviter considérablement le processus de calcul MapReduce de la critique, nous allons examiner les processus de calcul MapReduce.
Pour résumer quelques inconvénients:
1) Bien que MapReduce idées de programmation vectoriel, mais l' état de calcul trop simple, simplement la tâche dans l' état Carte et réduire l' État, ne prend pas en compte la scène de calcul itératif.
2) résultat intermédiaire stocké dans le calcul des tâches sur le disque local, les appels IO excessives, l' efficacité des données d'écriture est faible.
3) MapReduce est de soumettre la tâche, et ensuite appliquer des ressources dans le calcul. Et les méthodes de calcul sont trop lourdes. Chaque degré de parallélisme est réalisé par un processus de calcul d' une machine virtuelle Java.
En simplement des listes peuvent facilement trouver le problème et a critiqué le calcul MapReduce, donc Spark tire sur le niveau d'expérience de calcul conception de calcul MapReduce concept DGASchedule et TaskSchedual proposé, brisant la tâche MapReduce dans un emploi seulement et réduire la carte d' état État les deux phases ne conviennent pas pour un calcul plus itérative du nombre de scènes. Spark propose donc un plus de conception avancée, diviser l'état de la tâche, Spark par État DGASchedule premières tâches de calcul, chaque étape du Sate encapsulé dans un début taskset dans la mission de calcul, puis taskset soumis par le calcul TaskSchedual groupe. organigramme Spark peut essayer d'utiliser au débit calculé est décrit ci - dessous: Par
rapport au calcul MapReduce, Spark calcul présente les avantages suivants:
1) Répartition des tâches intelligente DAG, sera divisé en un certain nombre de calculs complexes Etat, la scène pour satisfaire le calcul itératif
2) Spark fournit un calcul à tolérance de panne et la mise en cache des stratégies, les résultats sont stockés dans la mémoire ou sur le disque, la vitesse jusqu'à l'exécution de chaque état, d'améliorer l'efficacité opérationnelle
3) Spark au début du calcul, il a été une bonne application des ressources informatiques. parallélisme tâche est réalisée en commençant par un fil dans le procédé de l'exécuteur, par rapport à MapReduce calcul plus rapide.
Spark Cluster Manager fournit actuellement mises en œuvre mises en œuvre par le fil, autonome, Messso, kubernates et ainsi de suite. L'être le plus courant de fil et de gestion en mode autonome.
Quatre, l'environnement de cluster pseudo-distribué Spark à construire (autonome)
- Simuler tous les services de cluster sur un seul serveur;
- groupe autonome est une étincelle qui vient avec la gestion d'un système de planification des ressources, similaire à Hadoop YARN
préparations
- Plus CentOS7.2 de la machine virtuelle
- JDK8.0 ci-dessus
- Hadoop-2.9.2.tar.gz
- étincelle-2.4.4-bin-sans-hadoop.tgz
La configuration initiale de la machine virtuelle
réseau
# 1. 双网卡配置,添加网卡硬件,网络连接设置为NAT模式
# 2. 修改网卡的配置文件,ens33网卡(内网通信,静态地址) ens37网卡(外围通信,动态地址)
[root@SparkOnStandalone ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
IPADDR=192.168.197.201
NETMASK=255.255.255.0
Éteignez le pare-feu
[root@SparkOnStandalone ~]# systemctl disable firewalld
Définir le nom d'hôte
[root@SparkOnStandalone ~]# vi /etc/hostname
SparkOnStandalone
Configuration du nom d'hôte et la cartographie IP
[root@SparkOnStandalone ~]# vi /etc/hosts
192.168.48.201 SparkOnStandalone
Configuration sans SSH-dense Connexion
[root@SparkOnStandalone ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:60iw7cJLQf2X1GZIDBq8GKTVy5OmL21xUw5XYecYNSQ root@SparkOnStandalone
The key's randomart image is:
+---[RSA 2048]----+
| .oo. .o. E+= |
| o..oo ..+.* . |
| . .+o+ o.= . |
| .. B...o+ |
| oo .S=o |
| .=. oo. |
| .oooo.. |
| .+o+o |
| .=o . |
+----[SHA256]-----+
[root@SparkOnStandalone ~]# ssh-copy-id SparkOnStandalone
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'sparkonstandalone (192.168.197.201)' can't be established.
ECDSA key fingerprint is SHA256:gsJGwQ2NjqNlR1WjbLzlxJQnv24GdfTiqDm/hu4d7+s.
ECDSA key fingerprint is MD5:11:f9:7c:cd:f3:e1:b9:89:60:71:51:dd:b5:1e:49:0e.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
# 验证免密登录
[root@SparkOnStandalone ~]# ssh SparkOnStandalone
Last login: Mon Jan 13 11:23:33 2020 from 192.168.197.1
[root@SparkOnStandalone ~]# exit
登出
Connection to sparkonstandalone closed.
Installez le JDK
[root@SparkOnStandalone ~]# rpm -ivh jdk-8u171-linux-x64.rpm
Installer Hadoop HDFS
[root@SparkOnStandalone ~]# tar -zxf hadoop-2.9.2.tar.gz -C /usr
[root@SparkOnStandalone ~]# vi /usr/hadoop-2.9.2/etc/hadoop/core-site.xml
<!--nn访问入口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://SparkOnStandalone:9000</value>
</property>
<!--hdfs工作基础目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop-2.9.2/hadoop-${user.name}</value>
</property>
[root@SparkOnStandalone ~]# vi /usr/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
<!--block副本因子-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置Sencondary namenode所在物理主机-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>SparkOnStandalone:50090</value>
</property>
<!--设置datanode最大文件操作数-->
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
<!--设置datanode并行处理能力-->
<property>
<name>dfs.datanode.handler.count</name>
<value>6</value>
</property>
[root@SparkOnStandalone ~]# vi /usr/hadoop-2.9.2/etc/hadoop/slaves
SparkOnStandalone
Modifier la configuration de l'environnement
[root@SparkOnStandalone ~]# vi .bashrc
HADOOP_HOME=/usr/hadoop-2.9.2
JAVA_HOME=/usr/java/latest
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
CLASSPATH=.
export HADOOP_HOME
export JAVA_HOME
export PATH
export CLASSPATH
[root@SparkOnStandalone ~]# source .bashrc
initialisation NameNode
[root@SparkOnStandalone ~]# hdfs namenode -format
Démarrer HDFS
[root@SparkOnStandalone ~]# start-dfs.sh
[root@SparkOnStandalone ~]# jps
11266 NameNode
11847 Jps
11416 DataNode
11611 SecondaryNameNode
Spark d'installation
[root@SparkOnStandalone ~]# tar -zxf spark-2.4.4-bin-without-hadoop.tgz -C /usr
[root@SparkOnStandalone ~]# cd /usr/
[root@SparkOnStandalone usr]# mv spark-2.4.4-bin-without-hadoop/ spark-2.4.4
configuration
[root@SparkOnStandalone conf]# cp slaves.template slaves
[root@SparkOnStandalone conf]# cp spark-env.sh.template spark-env.sh
[root@SparkOnStandalone conf]# cp spark-defaults.conf.template spark-defaults.conf
[root@SparkOnStandalone conf]# vi spark-env.sh
SPARK_WORKER_INSTANCES=1
SPARK_MASTER_HOST=SparkOnStandalone
SPARK_MASTER_PORT=7077
SPARK_WORKER_CORES=4
SPARK_WORKER_MEMORY=2g
LD_LIBRARY_PATH=/usr/hadoop-2.9.2/lib/native
SPARK_DIST_CLASSPATH=$(hadoop classpath)
export SPARK_MASTER_HOST
export SPARK_MASTER_PORT
export SPARK_WORKER_CORES
export SPARK_WORKER_MEMORY
export LD_LIBRARY_PATH
export SPARK_DIST_CLASSPATH
export SPARK_WORKER_INSTANCES
[root@SparkOnStandalone conf]# vi slaves
SparkOnStandalone
Démarrer Spark cluster en mode autonome (pseudo-distribué)
[root@SparkOnStandalone spark-2.4.4]#./sbin/start-all.sh
service d'authentification
# 方法1
[root@SparkOnStandalone sbin]# jps
17216 Master
11266 NameNode
17347 Worker
11416 DataNode
11611 SecondaryNameNode
17612 Jps
# 方法2
http://192.168.48.201:8080/