{"id":30548,"date":"2019-10-31T21:36:08","date_gmt":"2019-10-31T18:36:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/konfigurirovanie-spark-na-yarn\/"},"modified":"2019-10-31T21:36:08","modified_gmt":"2019-10-31T18:36:08","slug":"konfigurirovanie-spark-na-yarn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/konfigurirovanie-spark-na-yarn","title":{"rendered":"Configuration de Spark sur YARN","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Habr, bonjour ! Hier, lors de <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/events\/1825957590998380\/\">la r\u00e9union d\u00e9di\u00e9e \u00e0 Apache Spark<\/a><\/noindex>, des gars de Rambler&amp;Co, il y a eu pas mal de questions de la part des participants concernant la configuration de cet outil. Nous avons d\u00e9cid\u00e9 de partager notre exp\u00e9rience \u00e0 ce sujet. Le sujet est complexe \u2014 nous vous invitons donc \u00e0 \u00e9galement partager vos exp\u00e9riences dans les commentaires, peut-\u00eatre que nous ne comprenons pas quelque chose ou que nous l'utilisons mal.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nUne petite introduction \u2014 comment nous utilisons Spark. Nous avons un programme de trois mois <noindex><a rel=\"nofollow\" href=\"http:\/\/newprolab.com\/ru\/bigdata?utm_source=habr&amp;utm_campaign=spark\">\u00ab Sp\u00e9cialiste des grandes donn\u00e9es \u00bb<\/a><\/noindex>, et durant tout le deuxi\u00e8me module, nos participants travaillent avec cet outil. Par cons\u00e9quent, notre t\u00e2che en tant qu'organisateurs est de pr\u00e9parer un cluster pour une utilisation dans ce cadre.<\/p>\n<p>Une particularit\u00e9 de notre utilisation est que le nombre de personnes travaillant simultan\u00e9ment sur Spark peut \u00eatre \u00e9gal \u00e0 l'ensemble du groupe. Par exemple, lors d'un s\u00e9minaire, lorsque tout le monde essaie et r\u00e9p\u00e8te ce que notre enseignant propose. Cela peut parfois aller jusqu'\u00e0 40 personnes. Il n'y a probablement pas beaucoup d'entreprises dans le monde qui rencontrent un tel sc\u00e9nario d'utilisation.<\/p>\n<p>Je vais ensuite expliquer comment et pourquoi nous avons choisi certains param\u00e8tres de configuration.<\/p>\n<p>Commen\u00e7ons par le d\u00e9but. Spark peut fonctionner sur le cluster de 3 mani\u00e8res : en mode standalone, en utilisant Mesos ou en utilisant YARN. Nous avons choisi la troisi\u00e8me option car elle nous semblait logique. Nous avons d\u00e9j\u00e0 un cluster hadoop. Nos participants connaissent bien son architecture. Utilisons YARN.<\/p>\n<pre><code class=\"apache\">spark.master=yarn<\/code><\/pre>\n<p>\nEnsuite, \u00e7a devient plus int\u00e9ressant. Chacune de ces 3 options de d\u00e9ploiement a 2 modes de d\u00e9ploiement : client et cluster. D'apr\u00e8s <noindex><a rel=\"nofollow\" href=\"http:\/\/spark.apache.org\/docs\/latest\/running-on-yarn.html\">documentation<\/a><\/noindex> et divers liens sur Internet, on peut conclure que le mode client convient pour un travail interactif \u2014 par exemple, via un notebook jupyter, tandis que le mode cluster est plus adapt\u00e9 aux solutions de production. Dans notre cas, nous \u00e9tions int\u00e9ress\u00e9s par un travail interactif, donc :<\/p>\n<pre><code class=\"apache\">spark.deploy-mode=client<\/code><\/pre>\n<p>\nEn gros, \u00e0 partir de ce moment l\u00e0, Spark fonctionnera d\u00e9j\u00e0 d'une certaine mani\u00e8re sur YARN, mais cela ne nous suffisait pas. Comme notre programme porte sur les Big Data, il arrivait parfois que les participants manquent de ce qui se pr\u00e9sentait dans le cadre d'une r\u00e9partition uniforme des ressources. Et l\u00e0, nous avons d\u00e9couvert une chose int\u00e9ressante : l'allocation dynamique des ressources. Pour faire court, l'id\u00e9e est la suivante : si vous avez une t\u00e2che lourde et que le cluster est libre (par exemple, le matin), gr\u00e2ce \u00e0 cette option, Spark peut vous fournir des ressources suppl\u00e9mentaires. Le besoin est calcul\u00e9 selon une formule astucieuse. Nous ne rentrerons pas dans les d\u00e9tails \u2014 cela fonctionne assez bien.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.enabled=true<\/code><\/pre>\n<p>\nNous avons d\u00e9fini ce param\u00e8tre, et lors du lancement de Spark, une erreur s'est produite et il ne s'est pas lanc\u00e9. C'est normal, car il fallait lire <noindex><a rel=\"nofollow\" href=\"http:\/\/spark.apache.org\/docs\/latest\/configuration.html\">documentation<\/a><\/noindex> plus attentivement. Il est indiqu\u00e9 que pour que tout soit en ordre, il faut \u00e9galement activer un param\u00e8tre suppl\u00e9mentaire.<\/p>\n<pre><code class=\"apache\">spark.shuffle.service.enabled=true<\/code><\/pre>\n<p>\nQuel est son besoin ? Lorsque notre job ne n\u00e9cessite plus autant de ressources, Spark doit les renvoyer au pool g\u00e9n\u00e9ral. La phase la plus co\u00fbteuse en main-d'\u0153uvre dans presque n'importe quelle t\u00e2che MapReduce est la phase de Shuffle. Ce param\u00e8tre permet de conserver les donn\u00e9es g\u00e9n\u00e9r\u00e9es durant cette phase et ainsi de lib\u00e9rer les executors. Un executor est un processus qui calcule tout sur le worker. Il dispose d'un certain nombre de c\u0153urs processeurs et d'une certaine quantit\u00e9 de m\u00e9moire.<\/p>\n<p>Nous avons ajout\u00e9 ce param\u00e8tre. Tout semblait fonctionner. Il est devenu \u00e9vident que les participants recevaient r\u00e9ellement plus de ressources quand ils en avaient besoin. Mais un autre probl\u00e8me est survenu : \u00e0 un moment donn\u00e9, d'autres participants se r\u00e9veillaient et voulaient aussi utiliser Spark, mais tout \u00e9tait occup\u00e9, et ils \u00e9taient m\u00e9contents. On peut les comprendre. Nous avons commenc\u00e9 \u00e0 consulter la documentation. Il s'est av\u00e9r\u00e9 qu'il existe encore un certain nombre de param\u00e8tres qui peuvent influencer le processus. Par exemple, si un executor est en mode attente \u2014 au bout de combien de temps peut-on r\u00e9cup\u00e9rer les ressources ?<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.executorIdleTimeout=120s<\/code><\/pre>\n<p>\nDans notre cas, si vos executors ne font rien pendant deux minutes, veuillez les renvoyer dans le pool g\u00e9n\u00e9ral. Cependant, ce param\u00e8tre n'\u00e9tait pas toujours suffisant. Il \u00e9tait \u00e9vident qu'une personne ne faisait rien depuis longtemps, mais les ressources n'\u00e9taient pas lib\u00e9r\u00e9es. Il s'est av\u00e9r\u00e9 qu'il existe un param\u00e8tre sp\u00e9cial pour d\u00e9terminer au bout de combien de temps r\u00e9cup\u00e9rer les executors contenant des donn\u00e9es en cache. Par d\u00e9faut, ce param\u00e8tre \u00e9tait d\u00e9fini sur \u2014 infini ! Nous l'avons corrig\u00e9.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.cachedExecutorIdleTimeout=600s<\/code><\/pre>\n<p>\nAinsi, si vos executors ne font rien pendant 5 minutes, renvoyez-les dans le pool g\u00e9n\u00e9ral. Dans ce mode, la vitesse de lib\u00e9ration et de distribution des ressources pour un grand nombre d'utilisateurs est devenue satisfaisante. Le nombre de m\u00e9contents a diminu\u00e9. Mais nous avons d\u00e9cid\u00e9 d'aller plus loin et de limiter le nombre maximum d'executors pour une application \u2014 en gros, pour un participant au programme.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.maxExecutors=19<\/code><\/pre>\n<p>\nBien s\u00fbr, il y a maintenant des m\u00e9contents de l'autre c\u00f4t\u00e9 \u2014 \"le cluster est inactif, et je n'ai que 19 executors\", mais que peut-on faire ? Il faut un certain \u00e9quilibre correct. On ne peut pas rendre tout le monde heureux.<\/p>\n<p>Et une autre petite histoire li\u00e9e \u00e0 la sp\u00e9cificit\u00e9 de notre cas. Un jour, plusieurs personnes sont arriv\u00e9es en retard \u00e0 la s\u00e9ance pratique, et leur Spark ne s'est pas lanc\u00e9 pour une raison quelconque. Nous avons v\u00e9rifi\u00e9 le nombre de ressources disponibles \u2014 apparemment, il y en avait. Spark devait se lancer. Heureusement, d'ici l\u00e0, la documentation \u00e9tait d\u00e9j\u00e0 ancr\u00e9e dans notre m\u00e9moire, et nous nous sommes souvenus que lors du lancement, Spark recherche un port sur lequel se lancer. Si le premier port de la plage est occup\u00e9, il passe au suivant. S'il est libre, il l'attrape. Et il existe un param\u00e8tre qui indique le nombre maximum de tentatives \u00e0 cet effet. Par d\u00e9faut, il est de 16. Ce nombre est inf\u00e9rieur au nombre de personnes dans notre groupe de s\u00e9ance. Donc, apr\u00e8s 16 tentatives, Spark abandonnait et disait qu'il ne pouvait pas d\u00e9marrer. Nous avons corrig\u00e9 ce param\u00e8tre.<\/p>\n<pre><code class=\"apache\">spark.port.maxRetries=50<\/code><\/pre>\n<p>\nJe vais maintenant parler de certains r\u00e9glages qui ne sont pas vraiment li\u00e9s \u00e0 la sp\u00e9cificit\u00e9 de notre cas.<\/p>\n<p>Pour un d\u00e9marrage plus rapide de Spark, il est recommand\u00e9 de compresser le dossier jars situ\u00e9 dans le r\u00e9pertoire domestique de SPARK_HOME et de le placer sur HDFS. Ainsi, il ne perdra pas de temps \u00e0 charger ces jar files sur les workers.<\/p>\n<pre><code class=\"apache\">spark.yarn.archive=hdfs:\/\/\/tmp\/spark-archive.zip<\/code><\/pre>\n<p>\nIl est \u00e9galement recommand\u00e9 d'utiliser kryo comme s\u00e9rialiseur pour un fonctionnement plus rapide. Il est plus optimis\u00e9 que celui par d\u00e9faut.<\/p>\n<pre><code class=\"apache\">spark.serializer=org.apache.spark.serializer.KryoSerializer<\/code><\/pre>\n<p>\nIl y a un vieux probl\u00e8me avec Spark, c'est qu'il tombe souvent \u00e0 court de m\u00e9moire. Cela se produit souvent lorsque les workers ont tout calcul\u00e9 et envoient le r\u00e9sultat au driver. Nous avons augment\u00e9 ce param\u00e8tre. Par d\u00e9faut, il est de 1 Go, nous l'avons port\u00e9 \u00e0 3.<\/p>\n<pre><code class=\"apache\">spark.driver.maxResultSize=3072<\/code><\/pre>\n<p>\nEt enfin, comme dessert. Comment mettre \u00e0 jour Spark vers la version 2.1 sur la distribution HortonWorks - HDP 2.5.3.0. Cette version de HDP contient une version pr\u00e9install\u00e9e 2.0, mais un jour, nous avons d\u00e9cid\u00e9 que Spark \u00e9voluait activement et que chaque nouvelle version corrigeait certains bugs tout en offrant des fonctionnalit\u00e9s suppl\u00e9mentaires, y compris pour l'API Python, donc nous avons d\u00e9cid\u00e9 de faire la mise \u00e0 jour.<\/p>\n<p>Nous avons t\u00e9l\u00e9charg\u00e9 la version sur le site officiel pour Hadoop 2.7. Nous l'avons d\u00e9compress\u00e9e, plac\u00e9e dans le dossier HDP. Nous avons cr\u00e9\u00e9 les liens symboliques n\u00e9cessaires. Nous lan\u00e7ons - \u00e7a ne d\u00e9marre pas. Un message d'erreur tr\u00e8s incompr\u00e9hensible s'affiche.<\/p>\n<pre><code class=\"apache\">java.lang.NoClassDefFoundError: com\/sun\/jersey\/api\/client\/config\/ClientConfig<\/code><\/pre>\n<p>\nEn cherchant sur Google, nous avons d\u00e9couvert que Spark a d\u00e9cid\u00e9 de ne pas attendre que Hadoop se d\u00e9veloppe, et a choisi d'utiliser une nouvelle version de jersey. Ils se disputent \u00e0 ce sujet sur JIRA. La solution \u00e9tait de t\u00e9l\u00e9charger <noindex><a rel=\"nofollow\" href=\"https:\/\/mvnrepository.com\/artifact\/com.sun.jersey\/jersey-bundle\/1.17.1\">jersey version 1.17.1<\/a><\/noindex>. Nous l'avons plac\u00e9 dans le dossier jars de SPARK_HOME, \u00e0 nouveau zip\u00e9 et transf\u00e9r\u00e9 sur HDFS.<\/p>\n<p>Nous avons contourn\u00e9 cette erreur, mais une nouvelle erreur plut\u00f4t obscure est apparue.<\/p>\n<pre><code class=\"apache\">org.apache.spark.SparkException: L'application Yarn est d\u00e9j\u00e0 termin\u00e9e ! Elle a peut-\u00eatre \u00e9t\u00e9 tu\u00e9e ou n'a pas pu lancer le ma\u00eetre d'application.<\/code><\/pre>\n<p>\nEn essayant de lancer la version 2.0 \u2014 tout va bien. Essaie de deviner quel est le probl\u00e8me. Nous avons plong\u00e9 dans les logs de cette application et avons vu quelque chose comme \u00e7a :<\/p>\n<pre><code class=\"apache\">\/usr\/hdp\/${hdp.version}\/hadoop\/lib\/hadoop-lzo-0.6.0.${hdp.version}.jar<\/code><\/pre>\n<p>\nEn gros, pour une raison quelconque, hdp.version n'a pas \u00e9t\u00e9 r\u00e9solue. Apr\u00e8s avoir cherch\u00e9 sur Google, nous avons trouv\u00e9 une solution. Il faut aller dans Ambari, dans les param\u00e8tres YARN, et ajouter ce param\u00e8tre dans yarn-site personnalis\u00e9 :<\/p>\n<pre><code class=\"apache\">hdp.version=2.5.3.0-37<\/code><\/pre>\n<p>\nCette magie a fonctionn\u00e9, et Spark a red\u00e9marr\u00e9. Nous avons test\u00e9 quelques-uns de nos jupyter-notebooks. Tout fonctionne. Nous sommes pr\u00eats pour notre premier cours sur Spark ce samedi (d\u00e9j\u00e0 demain) !<\/p>\n<p><b>MAJ<\/b>. Au cours, nous avons d\u00e9couvert un autre probl\u00e8me. \u00c0 un moment donn\u00e9, YARN a cess\u00e9 de fournir des conteneurs pour Spark. Il fallait corriger un param\u00e8tre dans YARN, qui par d\u00e9faut \u00e9tait \u00e0 0.2 :<\/p>\n<pre><code class=\"apache\">yarn.scheduler.capacity.maximum-am-resource-percent=0.8<\/code><\/pre>\n<p>\nC'est-\u00e0-dire que seulement 20 % des ressources ont particip\u00e9 \u00e0 la distribution des ressources. En modifiant les param\u00e8tres, nous avons red\u00e9marr\u00e9 YARN. Le probl\u00e8me a \u00e9t\u00e9 r\u00e9solu et les autres participants ont \u00e9galement pu lancer le contexte Spark.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/newprolab\/blog\/327556\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442! \u0412\u0447\u0435\u0440\u0430 \u043d\u0430 \u043c\u0438\u0442\u0430\u043f\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c Apache Spark, \u043e\u0442 \u0440\u0435\u0431\u044f\u0442 \u0438\u0437 Rambler&#038;Co, \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0420\u0435\u0448\u0438\u043b\u0438 \u043f\u043e \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0430\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0422\u0435\u043c\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0442\u043e\u0436\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043c\u044b \u0442\u043e\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0432\u043e\u0434\u043d\u0430\u044f \u2014 \u043a\u0430\u043a \u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-30548","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/konfigurirovanie-spark-na-yarn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Spark \u043d\u0430 YARN | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/konfigurirovanie-spark-na-yarn\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:36:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:36:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Configuration de Spark sur YARN | ProHoster","description":"Habr, bonjour !","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/konfigurirovanie-spark-na-yarn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Spark \u043d\u0430 YARN | ProHoster","og:description":"\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/konfigurirovanie-spark-na-yarn","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:36:08+00:00","article:modified_time":"2019-10-31T18:36:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30548","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 01:45:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:33:26","updated":"2026-01-21 01:45:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=30548"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30548\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=30548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=30548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=30548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}