כיצד להגדיר אשכול Hadoop עם זמינות גבוהה של HDFS

בלוג זה מספק סקירה כללית של ארכיטקטורת HDFS High Availability וכיצד להגדיר ולהגדיר אשכול HDFS High Availability בצעדים פשוטים.

HDFS אדריכלות אשכול זמינות גבוהה

בבלוג זה אדבר על ארכיטקטורת אשכול HDFS 2.x על זמינות גבוהה ועל ההליך להקמת אשכול HDFS עם זמינות גבוהה.זהו חלק חשוב מה- . סדר הכיסוי של הנושאים בבלוג זה הוא כדלקמן:



  • אדריכלות HDFS HA
    • מבוא
    • זמינות NameNode
    • אדריכלות HA
    • יישום HA (JournalNode ואחסון משותף)
  • כיצד להקים את HA (Quorum Journal Nodes) באשכול Hadoop?

מבוא:

הרעיון של אשכול זמינות גבוהה הוצג ב- Hadoop 2.x כדי לפתור את נקודת הכישלון היחידה ב- Hadoop 1.x. כידוע מהבלוג הקודם שלי ש- עוקב אחר טופולוגיית Master / Slave כאשר NameNode משמש כדמון מאסטר ואחראי על ניהול צמתים אחרים של עבדים הנקראים DataNodes. מאסטר דאמון יחיד או שם צמת זה הופך לצוואר בקבוק. אמנם הכנסת ה- NameNode המשנית אמנם מנעה מאיתנו אובדן נתונים והורדת חלק מהנטל של ה- NameNode אך היא לא פתרה את בעיית הזמינות של ה- NameNode.



זמינות שם שם:

אם אתה מחשיב את התצורה הסטנדרטית של אשכול HDFS, ה- NameNode הופך ל- נקודת כשל יחידה . זה קורה כי ברגע שה- NameNode הופך להיות לא זמין, כל האשכול הופך להיות לא זמין עד שמישהו יפעיל מחדש את ה- NameNode או יביא אחד חדש.

הסיבות לחוסר זמינותו של NameNode יכולות להיות:



  • אירוע מתוכנן כמו עבודות תחזוקה כאלה כולל שדרוג של תוכנה או חומרה.
  • זה יכול להיות גם בגלל אירוע לא מתוכנן שבו ה- NameNode קורס בגלל כמה סיבות.

בשני המקרים לעיל, יש לנו זמן השבתה בו איננו מסוגלים להשתמש באשכול HDFS שהופך לאתגר.

סוג נתונים לתאריך ב- SQL

אדריכלות HDFS HA:

בואו נבין שכיצד HDFS HA ​​אדריכלות פתר את הבעיה הקריטית הזו של זמינות NameNode:

ארכיטקטורת HA פתרה את הבעיה הזו של זמינות NameNode בכך שהיא מאפשרת לנו לקבל שני NameNodes בתצורה פעילה / פסיבית. לכן, יש לנו שני שמות שם פועלים במקביל באשכול זמינות גבוהה:



  • שם שם פעיל
  • שם המתנה / פסיבי.

אדריכלות HDFS HA ​​- אשכול זמינות גבוהה - אדוריקה

אם NameNode אחד יורד, ה- NameNode השני יכול להשתלט על האחריות ולכן להקטין את זמן האשכול. שם המתנה המתנה משמש למטרה של גיבוי NameNode (בניגוד ל- NameNode המשני) המשלב יכולות כישלון לאשכול Hadoop. לכן, במצב ה- StandbyNode, אנו עשויים לבצע כישלון אוטומטי בכל פעם ש- NameNode קורס (אירוע לא מתוכנן) או שנוכל לקבל כשל חינני (יזום ידנית) במהלך תקופת התחזוקה.

ישנן שתי בעיות בשמירה על עקביות באשכול HDFS High זמינות:

  • NameNode פעיל והמתנה צריכים להיות תמיד מסונכרנים זה עם זה, כלומר הם צריכים להיות מאותם מטא נתונים. זה יאפשר לנו להחזיר את אשכול Hadoop לאותו מצב מרחב שמות בו הוא התרסק, ולכן יספק לנו כישלון מהיר.
  • צריך להיות רק שם אחד פעיל בכל פעם מכיוון ששני שם קוד פעיל יובילו לשחיתות הנתונים. תרחיש מסוג זה מכונה תרחיש מפוצל מוח שבו אשכול מתחלק לאשכול קטן יותר, כל אחד מאמין שהוא האשכול הפעיל היחיד. כדי למנוע תרחישים כאלה גידור נעשה. גידור הוא תהליך להבטיח שרק NameNode אחד יישאר פעיל בזמן מסוים.

יישום ארכיטקטורת HA:

עכשיו אתה יודע שב- HDFS HA ​​אדריכלות יש לנו שני NameNodes הפועלים בו זמנית. לכן אנו יכולים ליישם את תצורת NameNode הפעילה והמתנה בשתי דרכים:

  1. שימוש בצמתים של יומן המניין
  2. אחסון משותף באמצעות NFS

הבה נבין את שתי דרכי ההטמעה שלוקחות אחת אחת:

1. שימוש בצמתים של יומן המניין:

  • שם המתנה המתנה וה- NameNode הפעיל נשמרים ביניהם באמצעות קבוצה נפרדת של צמתים או שדים - הנקראים JournalNodes .JournalNodes עוקב אחר טופולוגיית הטבעות שבה הצמתים מחוברים זה לזה כדי ליצור טבעת.JournalNode מגיש את הבקשה שמגיעה אליה ומעתיק את המידע לצמתים אחרים בזירה.זה מספק סובלנות לתקלות במקרה של כשל ב- JournalNode.
  • ה- NameNode הפעיל אחראי על עדכון ה- EditLogs (מידע מטא נתונים) הקיים ב- JournalNodes.
  • ה- StandbyNode קורא את השינויים שבוצעו ב- EditLogs ב- JournalNode ומחיל אותו על מרחב השמות שלו באופן קבוע.
  • במהלך כישלון כישלון, StandbyNode מוודא שהוא עדכן את נתוני המטא-נתונים שלו מ- JournalNodes לפני שהפך ל- Active NameNode החדש. זה הופך את מצב מרחב השמות הנוכחי לסינכרוני עם המדינה לפני הכישלון.
  • כתובות ה- IP של שני ה- NameNodes זמינות לכל ה- DataNodes והם שולחים את פעימות הלב שלהם וחוסמים את פרטי המיקום לשני ה- NameNode. זה מספק כישלון מהיר (פחות זמן השבתה) מכיוון שב- StandbyNode יש מידע מעודכן על מיקום החסימה באשכול.

גידור NameNode:

כעת, כפי שנדון קודם לכן, חשוב מאוד להבטיח שיש רק שם פעיל אחד בכל פעם. אז גידור הוא תהליך להבטיח את המאפיין הזה באשכול.

  • JournalNodes מבצע את הגידור הזה בכך שהוא מאפשר רק ל- NameNode להיות הכותב בכל פעם.
  • שם המתנה המתנה לוקח על עצמו את האחריות לכתיבת JournalNodes ואוסר על כל NameNode אחר להישאר פעיל.
  • לבסוף, ה- Active NameNode החדש יכול לבצע את פעילויותיו בבטחה.

2. שימוש באחסון משותף:

  • ה- StandbyNode ו- NameNode הפעיל שומרים על סנכרון זה עם זה באמצעות a התקן אחסון משותף .ה- NameNode הפעיל רושם את הרשומה של כל שינוי שנעשה במרחב השמות שלו ל- EditLog הקיים באחסון משותף זה.ה- StandbyNode קורא את השינויים שבוצעו ב- EditLogs באחסון משותף זה ומחיל אותו על מרחב השמות שלו.
  • כעת, במקרה של כישלון מעבר, ה- StandbyNode מעדכן את פרטי המטא-נתונים שלו באמצעות ה- EditLogs באחסון המשותף. לאחר מכן, היא לוקחת את האחריות של ה- Active NameNode. זה הופך את מצב מרחב השמות הנוכחי לסינכרוני עם המדינה לפני הכישלון.
  • על מנהל המערכת להגדיר לפחות שיטת גידור אחת כדי למנוע תרחיש מפוצל.
  • המערכת עשויה להשתמש במגוון מנגנוני גידור. זה עשוי לכלול הרג של תהליך ה- NameNode וביטול הגישה שלו לספריית האחסון המשותף.
  • כמוצא אחרון, אנו יכולים לגדר את ה- NameNode שהיה פעיל בעבר בטכניקה המכונה STONITH, או 'לירות בראשו של הצומת השני'. STONITH משתמשת ביחידת חלוקת חשמל מיוחדת כדי להפעיל בכוח את מכונת NameNode.

כשל אוטומטי:

Failover הוא הליך שבו מערכת מעבירה אוטומטית את השליטה למערכת משנית כאשר היא מגלה תקלה או תקלה. ישנם שני סוגים של failover:

כישלון חינני: במקרה זה, אנו יוזמים ידנית את הכישלון לצורך תחזוקה שוטפת.

כשל אוטומטי: במקרה זה, הכישלון מתחיל באופן אוטומטי במקרה של כשל ב- NameNode (אירוע לא מתוכנן).

Apache Zookeeper הוא שירות המספק את יכולת הכיבוי האוטומטי באשכול HDFS High Disability. היא שומרת על כמויות קטנות של נתוני תיאום, מודיעה ללקוחות על שינויים בנתונים אלה ומפקחת על לקוחות על כשלים. Zookeeper מקיים הפעלה עם NameNodes. במקרה של כישלון, תוקף ההפעלה יפוג ו- Zookeeper יודיע ל- NameNodes אחרים כדי להתחיל בתהליך הכישלון. במקרה של כשל ב- NameNode, NameNode פסיבי אחר יכול לנעול ב- Zookeeper המציין שהוא רוצה להיות ה- NameNode הפעיל הבא.

ה- ZookeerFailoverController (ZKFC) הוא לקוח Zookeeper שגם מפקח ומנהל את מצב NameNode. כל אחד מה- NameNode מפעיל גם ZKFC. ZKFC אחראי לפיקוח על תקינות ה- NameNodes מעת לעת.

כעת לאחר שהבנתם מהי זמינות גבוהה באשכול Hadoop, הגיע הזמן להגדיר אותו. כדי להגדיר זמינות גבוהה באשכול Hadoop עליכם להשתמש ב- Zookeeper בכל הצמתים.

הדמונים ב- Active NameNode הם:

  • שומר החיות
  • שומר החיות נכשל בבקר
  • JournalNode
  • NameNode

הדמונים ב- NameNode במצב המתנה הם:

  • שומר החיות
  • שומר החיות נכשל בבקר
  • JournalNode
  • NameNode

הדמונים ב- DataNode הם:

  • שומר החיות
  • JournalNode
  • DataNode

אם ברצונך לשלוט ב- HDFS ו- Hadoop, עיין בקורס Big Data ו- Hadoop שאוצר במיוחד על ידי אדוריקה. לחץ על הכפתור למטה כדי להתחיל.

הגדרת ותצורה של אשכול זמינות גבוהה ב- Hadoop:

תחילה עליך להגדיר את שמות Java והמארח של כל צומת.

מכונה וירטואלית כתובת ה - IP שם מארח
שם שם פעיל192.168.1.81nn1.cluster.com או nn1
שם מצב המתנה192.168.1.58nn2.cluster.com או nn2
DataNode192.168.1.82dn1.cluster.com או dn1

הורד את קובץ הזפת הבינארי Hadoop ו- Zookeeper, חלץ את הקבצים לעריכת קבצי תצורה.

פקודה : wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

מורחים את zookeeper-3.4.6.tar.gz

פקודה : tar –xvf zookeeper-3.4.6.tar.gz

הורד את הזפת הבינארית Hadoop היציבה מאתר Apache Hadoop.

פקודה : wget https://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz

חלץ את כדור הזפת של Hadoop.

פקודה : tar –xvf hadoop-2.6.0.tar.gz

מורח Hadoop בינארי.

הוסף את Hadoop, Zookeeper והנתיבים לקובץ .bashrc.

פתח את הקובץ .bashrc.

פקודה : sudo gedit ~ / .bashrc

הוסף את הנתיבים הבאים:

= יצוא HADOOP_HOME הייצוא HADOOP_MAPRED_HOME = $ HADOOP_HOME הייצוא HADOOP_COMMON_HOME = $ HADOOP_HOME הייצוא HADOOP_HDFS_HOME = $ HADOOP_HOME הייצוא YARN_HOME = $ HADOOP_HOME הייצוא HADOOP_CONF_DIR = $ HADOOP_HOME / etc / Hadoop הייצוא YARN_CONF_DIR = $ HADOOP_HOME / etc / Hadoop הייצוא JAVA_HOME = יצוא ZOOKEEPER_HOME = יצוא PATH = $ PATH: $ JAVA_HOME / bin: $ HADOOP_HOME / bin: $ HADOOP_HOME / sbin: $ ZOOKEEPER_HOME / bin

ערוך את הקובץ .bashrc.

אפשר את ה- SSH בכל הצומת.

צור את מפתח SSH בכל הצמתים.

פקודה : ssh-keygen –t rsa (שלב זה בכל הצמתים)

הגדר מפתח SSH בכל הצמתים.

אל תיתן שום נתיב לקובץ Enter כדי לשמור את המפתח ואל תתן שום ביטוי סיסמה. לחץ על כפתור Enter.

צור את תהליך מפתח ה- ssh בכל הצמתים.

לאחר שנוצר מפתח ssh, תקבל את המפתח הציבורי והמפתח הפרטי.

ספריית המפתח .ssh צריכה להכיל את ההרשאה 700 וכל המפתחות בתוך ספריית .ssh צריכים להכיל את ההרשאות 600.

שנה את הרשאת ספריית SSH.

שנה את הספרייה ל- .ssh ושנה את הרשאת הקבצים ל 600

שנה הרשאת מפתח ציבורי ופרטי.

עליכם להעתיק את המפתח הציבורי ssh nodes לכל הצמתים.

ב- Namenode פעיל, העתק את id_rsa.pub באמצעות הפקודה cat.

פקודה : חתול ~ / .ssh / id_rsa.pub >> ~ / .ssh / מורשים_מפתחות

העתק את מפתח ssh של Namenode למפתחות מורשים זה.

העתק את המפתח הציבורי של NameNode לכל הצמתים באמצעות ssh-copy-id פקודה.

פקודה : ssh-copy-id –i .ssh / id_rsa.pub edureka@nn2.cluster.com

העתק מפתח מטרה למצב המתנה NameNode.

העתק את המפתח הציבורי של NameNode לצומת הנתונים.

פקודה : ssh-copy-id –i .ssh / id_rsa.pub edureka@dn1.cluster.com

העתק את המפתח הציבורי של Namenode לצומת הנתונים.

הפעל מחדש את שירות sshd בכל הצמתים.

פקודה : שירות sudo הפעלה מחדש של sshd (בצע בכל הצמתים)

הפעל מחדש את שירות SSH.

עכשיו אתה יכול להתחבר לכל צומת מ- Namenode ללא אימות.

פתח את הקובץ core-site.xml מהצומת שם פעיל והוסף את המאפיינים שלהלן.

ערוך את core-site.xml מ- namenode פעיל

פתח את קובץ hdfs-site.xml ב- Namenode פעיל. הוסף את המאפיינים שלהלן.

dfs.namenode.name.dir / home / edureka / HA / data / namenode dfs.replication 1 dfs. הרשאות שקר dfs.nameservices אשכול ha dfs.ha.namenodes.ha- אשכול nn1, nn2 dfs.namenode.rpc כתובת .ha-cluster.nn1 nn1.cluster.com:9000 dfs.namenode.rpc-address.ha-cluster.nn2 nn2.cluster.com:9000 dfs.namenode.http-address.ha-cluster.nn1 nn1.cluster. com: 50070 dfs.namenode.http-address.ha-cluster.nn2 nn2.cluster.com:50070 dfs.namenode.shared.edits.dir qjournal: //nn1.cluster.com: 8485nn2.cluster.com: 8485dn1. cluster.com:8485/ha-cluster dfs.client.failover.proxy.provider.ha-cluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.automatic-failover.enabled נכון ha.zookeeper .quorum nn1.cluster.com:2181,nn2.cluster.com:2181,dn1.cluster.com:2181 dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files / home / edureka /.ssh/id_rsa

שנה את הספרייה לספריית ה- conf של zookeeper.

פקודה : cd zookeeper-3.4.6 / conf

ספריית Zookeeper Conf.

בספריית conf יש לך קובץ zoo_sample.cfg, צור את zoo.cfg באמצעות קובץ zoo_sample.cfg.

פקודה : cp zoo_sample.cfg zoo.cfg

צור קובץ zoo.cfg.

צור את הספריה בכל מקום והשתמש בספרייה זו כדי לאחסן את נתוני גן החיות.

פקודה : מקדיר

צור ספרייה לאחסון נתוני גן החיות.

פתח את הקובץ zoo.cfg.

פקודה : gedit zoo.cfg

הוסף את נתיב הספריה שנוצר בשלב שלעיל למאפיין dataDir והוסף את הפרטים הבאים לגבי הצומת הנותר, בקובץ zoo.cfg.

Server.1 = nn1.cluster.com: 2888: 3888

Server.2 = nn2.cluster.com: 2888: 3888

שרת.3 = dn1.cluster.com: 2888: 3888

ערוך את הקובץ zoo.cfg.

כעת העתק את ספריות Java ו- Hadoop-2.6.0, zookeeper-3.4.6 וקובץ .bashrc לכל הצמתים (צומת שם המתנה, צומת נתונים) באמצעות פקודת scp.

פקודה : scp –r edureka @:

העתק את קובץ Hadoop, Zookeeper ו- .bashrc לכל הצמתים.

באופן דומה, העתק את קובץ ה- .bashrc ואת ספריית ה- zookeeper לכל הצמתים ושנה את משתני הסביבה בכל אחד מהם בהתאם לצומת המתאים.

בצומת נתונים, צור כל ספריה שבה אתה צריך לאחסן את חסימות ה- HDFS.

בצומת נתונים, עליך להוסיף את המאפיינים dfs.datanode.data.dir.

במקרה שלי, יצרתי נתונים אנודה מדריך לאחסון הבלוקים.

צור ספריית Datanode.

שנה את ההרשאה לספריית צומת הנתונים.

שנה הרשאת ספריית Datanode.

פתח את הקובץ HDFS-site.xml, הוסף את נתיב הספריה של Datanode במאפיין dfs.datanode.data.dir.

הערה: שמור את כל המאפיינים המועתקים מה- namenode הפעיל הוסף dfs.datanode.data.dir מאפיין תמצית אחד ב- namenode.

dfs.datanode.data.dir / home / edureka / HA / data / datanode

ב- שם שמות פעיל, שנה את הספרייה בה ברצונך לאחסן את קובץ התצורה של zookeeper (נתיב המאפיין dataDir).

צור את קובץ myid בתוך הספרייה והוסף מספר 1 לקובץ ושמור את הקובץ.

פקודה : vi myid

צור קובץ myid.

במצב שם המתנה, שנה את הספרייה בה ברצונך לאחסן את קובץ התצורה של ה- zookeeper (נתיב המאפיין dataDir).

צור את קובץ myid בתוך הספרייה והוסף מספר 2 לקובץ ושמור את הקובץ.

בצומת נתונים, שנה את הספריה שבה ברצונך לאחסן את קובץ התצורה של zookeeper (נתיב המאפיין dataDir).

צור את קובץ myid בתוך הספרייה והוסף מספר 3 לקובץ ושמור את הקובץ.

הפעל את Journalnode בכל שלושת הצמתים.

פקודה : hadoop-daemon.sh התחל journalnode

התחל את Journalnode.

כאשר אתה מזין את הפקודה jps, תראה את הדמון של JournalNode בכל הצמתים.

לעצב אתמטרה פעילה.

פקודה : פורמט HDFS המיועד

פורמט NameNode פעיל.

התחל את הדמון של Namenode ו- Active Namedode.

פקודה מטרת ההתחלה: hadoop-daemon.sh

התחל את Namenode.

העתק את נתוני ה- HDFS Meta מצומת שם פעיל למצב המתנה.

פקודה : HDFS מיועד - bootstrapStandby

העתק את נתוני ה- HDFS Meta מצומת שם פעיל ל- Namenode המתנה.

לאחר הפעלת פקודה זו, תקבל את המידע מאיזה צומת ומיקום נתוני המטא מעתיקים והאם הם מעתיקים בהצלחה או לא.

מידע על פרטי מטרה פעילה.

ברגע שמועתקים נתוני מטא מ- namenode פעיל ל- namenode המתנה, תקבל את ההודעה המוצגת למטה בצילום המסך.

מידע על HDFS במצב המתנה Namenode.

הפעל את הדמון של namenode במכונת namenode המתנה.

פקודה מטרת ההתחלה: hadoop-daemon.sh

כעת התחל את שירות ה- Zookeeper בכל שלושת הצמתים.

פקודה : zkServer.sh התחל (הפעל פקודה זו בכל הצמתים)

במטרה פעילה:

הפעל את שומר החיות ב- ActiveNameNode.

במצב המתנה Namenode:

הפעל את שומר החיות במצב המתנה ב- NameNode.

בצומת נתונים:

הפעל את גן החיות ב- DataNode.

לאחר הפעלת שרת ה- Zookeeper, הזן את הפקודה JPS. בכל הצמתים תראה את שירות QuorumPeerMain.

הפעל את הדמון של צומת נתונים במכונת הצמת נתונים.

פקודה : hadoop-daemon.sh התחל את ה- datanode

הפעל את ה- Zookeeper fail over controller בצומת שם פעיל ובצומת שם המתנה.

פרמט את ה- zookeeper fail over controller ב- namenode פעיל.

פקודה: HDFS zkfc –פורמט ZK

פורמט ZKFC.

הפעל את ה- ZKFC בשמם פעיל.

פקודה : hadoop-daemon.sh התחל zkfc

הזן את הפקודה jps כדי לבדוק את הדמונים של DFSZkFailoverController.

התחל את ZKFC.

פרמט את הכישלון של ה- zook over controller בבקר במצב המתנה.

פקודה : hdfs zkfc –פורמט ZK

הפעל את ה- ZKFC במצב המתנה.

פקודה : hadoop-daemon.sh התחל zkfc

הזן את הפקודה jps כדי לבדוק את הדמונים של DFSZkFailoverController.

כעת בדוק את הסטטוס של כל Namenode, איזה צומת פעיל או איזה צומת נמצא במצב המתנה באמצעות הפקודה שלהלן.

פקודה : hdfs haadmin –getServiceState nn1

בדוק את הסטטוס של כל NameNode.

כעת בדוק את הסטטוס של כל Namenode באמצעות דפדפן האינטרנט.

פתח את דפדפן האינטרנט והזן את כתובת האתר שלמטה.

: 50070

זה יראה אם ​​צומת השם פעיל או במצב המתנה.

שם שם פעיל.

פתח פרטי צומת שם אחרים באמצעות דפדפן האינטרנט.

שם מצב המתנה.

ב- namenode פעיל, הרס את הדמון namenode כדי לשנות את צומת שם המתנה לשם פעיל.

הזן jps ב- namenode פעיל והרג את הדמון.

פקודה: sudo kill -9

מזהה תהליך של שדים.

מזהה התהליך Namenode הוא 7606, הרוג את namenode.

פקודה : סודו להרוג -9 7606

הרגו את תהליך הצומת שם

פתח את שני הצמתים דרך דפדפן האינטרנט ובדוק את המצב.

פרטי נאמודה.

מצב NameNode.

מזל טוב, הגדרת בהצלחה אשכול HDFS זמינות גבוהה ב- Hadoop.

כעת לאחר שהבנתם אדריכלות אשכול זמינות גבוהה של Hadoop, עיינו ב מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס הכשרת ההסמכה של אדורקה ביג דאטה Hadoop עוזר ללומדים להיות מומחים בתחום HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume ו- Sqoop תוך שימוש במקרי שימוש בזמן אמת בתחום הקמעונאות, מדיה חברתית, תעופה, תיירות, פיננסים.

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ונחזור אליך.

window._LQ_ = חלון._LQ_ || {}

lqQuizModal (חלון, מסמך, {quizId: 'XAIVp8', baseUrl: 'https: //quiz.leadquizzes.com/',trigger:' exit '}, _LQ_)