{"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\/et\/blog\/news\/konfigurirovanie-spark-na-yarn","title":{"rendered":"Spark'i konfigureerimine YARNis.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr! Eile toimus <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/events\/1825957590998380\/\">Apache Sparkile p\u00fchendatud kohtumine<\/a><\/noindex>, Rambler&#038;Co poistsime, et osalejatelt tuli p\u00e4ris palju k\u00fcsimusi seoses selle t\u00f6\u00f6riista konfigureerimisega. Seet\u00f5ttu otsustasime oma kogemust jagada. Teema pole lihtne \u2014 seega kutsume \u00fcles jagama kogemusi ka kommentaarides, ehk meil on samuti midagi valesti arusaadav ja kasutatav.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nL\u00fchike sissejuhatus \u2014 kuidas me Spark'i kasutame. Meil on kolmekuuline programm <noindex><a rel=\"nofollow\" href=\"http:\/\/newprolab.com\/ru\/bigdata?utm_source=habr&amp;utm_campaign=spark\">\u201eAndmeanal\u00fc\u00fcsi spetsialist\u201c<\/a><\/noindex>, ja kogu teises moodulis t\u00f6\u00f6tavad meie osalejad selle t\u00f6\u00f6riistaga. Vastavalt sellele on meie \u00fclesanne, kui korraldajad, valmistada klaster ette selle kasutamiseks sellises kontekstis.<\/p>\n<p>Meie kasutamise erip\u00e4ra seisneb selles, et samal ajal v\u00f5ib Spark'iga t\u00f6\u00f6tavate inimeste arv v\u00f5rdsuda kogu grupiga. N\u00e4iteks seminaril, kui k\u00f5ik proovivad samaaegselt ja kordavad meie \u00f5petaja jooniseid. Ja see on mitte v\u00e4he \u2014 m\u00f5nikord peaaegu 40 inimest. Ilmselt ei ole maailmas palju ettev\u00f5tteid, kes puutuvad kokku sellise kasutusskeemiga.<\/p>\n<p>J\u00e4rgmiseks r\u00e4\u00e4gin, kuidas ja miks me valisime teatud konfigureerimise parameetreid.<\/p>\n<p>Alustame algusest. Spark'il on 3 v\u00f5imalust t\u00f6\u00f6tada klastris: standalone, Mesos'i kasutamine ja YARN'i kasutamine. Otsustasime valida kolmanda variandi, kuna see oli meile loogiline. Meil on juba olemas Hadoop klaster. Meie osalejad on selle arhitektuuriga juba h\u00e4sti tuttavad. Alustame YARN'iga.<\/p>\n<pre><code class=\"apache\">spark.master=yarn<\/code><\/pre>\n<p>\nEdasi on huvitavam. Igal kolmel deploy variandil on 2 varianti: client ja cluster. L\u00e4htudes <noindex><a rel=\"nofollow\" href=\"http:\/\/spark.apache.org\/docs\/latest\/running-on-yarn.html\">dokumentatsioon<\/a><\/noindex> ja erinevatest linkidest internetis, v\u00f5ib j\u00e4reldada, et client sobib interaktiivseks t\u00f6\u00f6ks \u2014 n\u00e4iteks jupyter notebook'i kaudu, samas kui cluster sobib rohkem tootmislahenduste jaoks. Meie puhul oli meil huvi interaktiivse t\u00f6\u00f6 j\u00e4rele, seega:<\/p>\n<pre><code class=\"apache\">spark.deploy-mode=client<\/code><\/pre>\n<p>\n\u00dcldiselt hakkab Spark sellest hetkest alates YARN-is t\u00f6\u00f6tama, kuid meile sellest ei piisanud. Kuna meie programm keskendub suurtele andmetele, siis m\u00f5nikord oli osalistel puudu see, mida saadi tasakaalustatud ressursside jaotamise k\u00e4igus. Ja siit me leidsime huvitava asja \u2014 d\u00fcnaamiline ressursside jaotamine. L\u00fchidalt \u00f6eldes on asi j\u00e4rgmine: kui teil on raske \u00fclesanne ja klaster on vaba (n\u00e4iteks hommikuti), siis selle valiku abil v\u00f5ib Spark teile anda t\u00e4iendavaid ressursse. Vajadus arvutatakse seal keerulise valemi abil. S\u00fcgavamale ei lasku, - see t\u00f6\u00f6tab h\u00e4sti.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.enabled=true<\/code><\/pre>\n<p>\nMe seadsime selle parameetri, ja Spark k\u00e4ivitamisel nurjus ja ei k\u00e4ivitunud. \u00d5igesti, sest oli vaja lugeda <noindex><a rel=\"nofollow\" href=\"http:\/\/spark.apache.org\/docs\/latest\/configuration.html\">dokumentatsioon<\/a><\/noindex> t\u00e4psemalt. Seal on m\u00e4rgitud, et k\u00f5ik peab olema korras, tuleb veel aktiveerida t\u00e4iendav parameeter.<\/p>\n<pre><code class=\"apache\">spark.shuffle.service.enabled=true<\/code><\/pre>\n<p>\nMiks see vajalik on? Kui meie t\u00f6\u00f6 ei vaja enam nii palju ressursse, peab Spark need tagasi tagasi \u00fcldisesse gruppi andma. Peaaegu igasuguste MapReduce \u00fclesannete k\u00f5ige t\u00f6\u00f6mahukam etapp on Shuffle etapp. See parameeter lubab s\u00e4ilitada andmeid, mis tekivad selle etapi k\u00e4igus, ja vabastada vastavalt t\u00e4itej\u00f5ud. T\u00e4itej\u00f5ud on protsess, mis t\u00f6\u00f6tleb k\u00f5ike t\u00f6\u00f6taja seadmes. Tal on mingisugune arv protsessorituumasid ja mingisugune hulk m\u00e4lu.<\/p>\n<p>Me lisasime selle parameetri. K\u00f5ik tundus t\u00f6\u00f6tavat. Oli m\u00e4rgatav, et osalistele anti t\u00f5epoolest rohkem ressursse, kui neid vajas. Kuid tekkis teine probleem - mingil hetkel \u00e4rkasid teised osalised ja soovisid samuti Spark'i kasutada, kuid k\u00f5ik oli h\u00f5ivatud, ja nad olid rahulolematud. Neid v\u00f5ib m\u00f5ista. Hakkasime dokumentatsiooni vaatama. Seal selgus, et on veel mitmeid parameetreid, mille abil saab protsessile m\u00f5ju avaldada. N\u00e4iteks kui t\u00e4itej\u00f5ud on ootere\u017eiimil \u2014 kui kaua tohib ressursse tagasi v\u00f5tta?<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.executorIdleTimeout=120s<\/code><\/pre>\n<p>\nMeie puhul, kui teie executors ei tee kahe minuti jooksul midagi, siis palun tagastage need \u00fchisesse hulka. Kuid isegi see parameeter ei olnud alati piisav. Oli n\u00e4ha, et inimene ei tee juba ammu midagi ja ressursse ei vabastata. Selgus, et on olemas veel \u00fcks eriline parameeter \u2014 kui kaua peab m\u00f6\u00f6duma, et valida executors, mis sisaldavad vahem\u00e4llu salvestatud andmeid. Vaikes\u00e4ttega oli see \u2014 infinity! Me korrigeerisime seda.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.cachedExecutorIdleTimeout=600s<\/code><\/pre>\n<p>\nSee t\u00e4hendab, et kui teie executors ei tee viie minuti jooksul midagi, siis andke need \u00fchisesse hulka tagasi. Sellises re\u017eiimis on ressursside vabastamise ja jagamise kiirus suure arvu kasutajate jaoks muutunud korralikuks. Rahulolematute arv on v\u00e4henenud. Kuid me otsustasime minna edasi ja piirata maksimaalset executors\u2019te arvu \u00fche rakenduse kohta \u2014 praktiliselt \u00fche programmi osaleja kohta.<\/p>\n<pre><code class=\"apache\">spark.dynamicAllocation.maxExecutors=19<\/code><\/pre>\n<p>\nN\u00fc\u00fcd, muidugi, tekkisid rahulolematud ka teiselt poolt \u2014 \"klaster seisab, aga mul on ainult 19 executors\", aga mis seal ikka \u2014 vajalik on leida \u00f5ige tasakaal. K\u00f5iki ei saa \u00f5nnelikuks teha.<\/p>\n<p>Ja veel \u00fcks v\u00e4ike lugu, mis on seotud meie juhtumi spetsiifikaga. Kord hilines praktilisse tundidesse mitu inimest, ja neil ei hakanud Spark mingil p\u00f5hjusel k\u00e4ima. Me vaatasime vabade ressursside arvu \u2014 tundus, et on olemas. Spark peaks k\u00e4ima hakkama. \u00d5nneks oli dokumentatsioon juba mingil hetkel alateadvusse salvestunud ja me m\u00e4letasime, et Spark otsib k\u00e4ivitamisel endale porti, millega alustada. Kui esimene port vahemikust on h\u00f5ivatud, siis siirdub ta j\u00e4rgmise juurde. Kui see on vaba, siis ta haarab selle. Ja on olemas parameeter, mis n\u00e4itab maksimaalset katsete arvu selle jaoks. Vaikes\u00e4ttega on see 16. Arv on v\u00e4iksem kui inimeste arv meie grupis tunnis. Seega, p\u00e4rast 16 katset viskas Spark selle asja k\u00e4est ja \u00fctles, et ei saa k\u00e4ivituda. Me korrigeerisime seda parameetrit.<\/p>\n<pre><code class=\"apache\">spark.port.maxRetries=50<\/code><\/pre>\n<p>\nEdasi r\u00e4\u00e4gin m\u00f5ningatest seadistustest, mis ei ole enam t\u00f5eliselt seotud meie juhtumi spetsiifikaga.<\/p>\n<p>Selleks, et Spark kiiremini k\u00e4ima saada, on soovitus arhiveerida jars-kaust, mis asub SPARK_HOME kodudirektooriumis, ja panna see HDFS-i. Nii ei pea ta nende jaride allalaadimisele t\u00f6\u00f6tajates aega raiskama.<\/p>\n<pre><code class=\"apache\">spark.yarn.archive=hdfs:\/\/\/tmp\/spark-archive.zip<\/code><\/pre>\n<p>\nSamuti on soovitatav kasutada kiirema t\u00f6\u00f6 jaoks serialiseerijana Kryo't. See on optimeeritum kui vaikimisi valitud.<\/p>\n<pre><code class=\"apache\">spark.serializer=org.apache.spark.serializer.KryoSerializer<\/code><\/pre>\n<p>\nJa on veel \u00fcks vana probleem Sparkiga: see kukub sageli m\u00e4lu t\u00f5ttu kokku. See juhtub tihti siis, kui t\u00f6\u00f6tajad on k\u00f5ik arvutanud ja saadavad tulemuse draiverile. Me tegime selle parameetri suuremaks. Vaikimisi on see 1Gb, meie tegime - 3.<\/p>\n<pre><code class=\"apache\">spark.driver.maxResultSize=3072<\/code><\/pre>\n<p>\nJa viimane, magustoiduna. Kuidas uuendada Spark versioonile 2.1 HortonWorks'i jaotuses - HDP 2.5.3.0. See versioon HDP sisaldab eelinstallitud versiooni 2.0, kuid kord otsustasime, et Spark areneb \u00fcsna aktiivselt ning iga uus versioon parandab m\u00f5ningaid vigu ja toob lisav\u00f5imalusi, sealhulgas Python API jaoks, seega otsustasime, et uuendamine on vajalik.<\/p>\n<p>Laadige alla versioon ametlikult veebilehelt Hadoop 2.7 jaoks. Pakkige lahti, kopeerige HDP kausta. Panime s\u00fcmbollinkid nagu vaja. K\u00e4ivitame - ei k\u00e4ivitu. N\u00e4itab v\u00e4ga ebaselget viga.<\/p>\n<pre><code class=\"apache\">java.lang.NoClassDefFoundError: com\/sun\/jersey\/api\/client\/config\/ClientConfig<\/code><\/pre>\n<p>\nGugeldades selgus, et Spark ei oota, kuni Hadoop end kokku parandab, ja otsustas kasutada uut jersey versiooni. Nad vaidlevad selle \u00fcle JIRA's. Lahenduseks oli - laadige alla <noindex><a rel=\"nofollow\" href=\"https:\/\/mvnrepository.com\/artifact\/com.sun.jersey\/jersey-bundle\/1.17.1\">jersey versioon 1.17.1<\/a><\/noindex>. Kopeerige see SPARK_HOME'i jars kausta, tehke j\u00e4lle zip ja laadige HDFS-i.<\/p>\n<p>Selle vea v\u00e4ltisime, kuid tekkis uus ja \u00fcsna \u00e4\u00e4rmuslik.<\/p>\n<pre><code class=\"apache\">org.apache.spark.SparkException: Yarn application has already ended! See v\u00f5is olla tapetud v\u00f5i ei suutnud k\u00e4ivituda rakenduse master.<\/code><\/pre>\n<p>\nSellega proovime k\u00e4ivitada versiooni 2.0 - k\u00f5ik on korras. Proovi arvata, milles probleem. Uurisime selle rakenduse logisid ja n\u00e4gime midagi sellist:<\/p>\n<pre><code class=\"apache\">\/usr\/hdp\/${hdp.version}\/hadoop\/lib\/hadoop-lzo-0.6.0.${hdp.version}.jar<\/code><\/pre>\n<p>\nKokkuv\u00f5ttes, mingil p\u00f5hjusel hdp.version ei lahendunud. Gugeldades leidsime lahenduse. Peab minema Ambari seadistustesse YARNi ja lisama seal kohandatud yarn-site parameetri:<\/p>\n<pre><code class=\"apache\">hdp.version=2.5.3.0-37<\/code><\/pre>\n<p>\nSee maagia aitas ning Spark startis. Testisime mitmeid meie jupyteri m\u00e4rkmikke. K\u00f5ik t\u00f6\u00f6tab. Oleme valmis esimese tunniga Sparkis laup\u00e4eval (juba homme)!<\/p>\n<p><b>UPD<\/b>. Tunnis ilmnes veel \u00fcks probleem. Mingil hetkel YARN l\u00f5petas konteinerite v\u00e4ljastamise Sparkile. YARN-is tuli parandada parameeter, mis oli vaikimisi 0.2:<\/p>\n<pre><code class=\"apache\">yarn.scheduler.capacity.maximum-am-resource-percent=0.8<\/code><\/pre>\n<p>\nSee, only 20% of the resources participated in resource allocation. After changing the parameters, YARN was restarted. The issue was resolved, and the other participants were also able to launch the Spark context.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/news\/konfigurirovanie-spark-na-yarn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Spark Configuration on YARN | ProHoster","description":"Habr, hello!","canonical_url":"https:\/\/prohoster.info\/et\/blog\/news\/konfigurirovanie-spark-na-yarn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/30548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=30548"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30548\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=30548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=30548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=30548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}