תנו ל-resolver החבילות של spark-shell את ה-proxy שלו בעת ההפעלה
ספקו את מאפייני ה-proxy של ה-JVM של הדרייבר לפני פתרון --packages; קוד shell והגדרות executor מאוחרים יותר עלולים לפספס את ההורדה הזו.
spark-shell --driver-java-options "-Dhttp.proxyHost=proxy.example -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.example -Dhttps.proxyPort=8080" --packages group:artifact:versionבהפעלת spark-shell מצד הלקוח, אפשרויות ה-JVM האלה של הדרייבר מגיעות לפני פתרון התלויות. החליפו את נקודת הקצה לדוגמה ואת group:artifact:version בערכים הרצויים באמצעות אפשרויות שהגרסה המותקנת של Spark תומכת בהן. שם המארח והפורט של Java הם מאפיינים נפרדים. עבור הורדות תלויות ציבוריות מותרות, רשימת שרתי פרוקסי HTTP מציעה מועמדים לשדות האלה.
השתמשו במיקום הזה כש---packages נכשל לפני שה-shell זמין. קוד אפליקציה שהוזן לאחר מכן אינו יכול לתקן את ההורדה הקודמת. Spark מבדיל בין אפשרויות הפעלה לבין הגדרות תוכנתיות; במצב לקוח ה-JVM של הדרייבר כבר קיים כשקוד האפליקציה רץ.
גם מצב הפריסה חשוב עבור spark.driver.extraJavaOptions: הדרייבר יכול לרוץ במכונה אחרת, שזקוקה לנתיב משלה אל ה-proxy. בקשת ה-API המאוחרת של executor היא תהליך ומיקום רשת אחרים; הגדרת executors אינה מגדירה בהכרח את פתרון האתחול.
כאשר אפשרויות ההפעלה קיימות אך ההורדה נכשלת
עקבו אחר שם המארח של המאגר, סוג הבקשה והשגיאה הראשונה. מטא-נתונים וארטיפקטים יכולים להגיע מכמה מארחים. כתובת מאגר תואמת Maven אינה מוכיחה ש-Spark קורא את settings.xml שבו משתמשת פקודת Maven מוצלחת.
הורדן ה-Java חייב לתמוך במנגנון ה-proxy ובאימות הנדרש. מאפייני מארח/פורט אינם מספקים כל סכימה, ומאפיין http.proxyUsername מומצא אינו הופך לאפקטיבי רק מפני ש-Java מקבל את השם. שמרו יחד את תצורת ההפעלה שלפני האתחול ואת ההורדה הכושלת הספציפית בעת אבחון השלב הזה.