เพิ่มขวดลงในงาน Spark - ส่งประกาย


158

จริง ... มีการพูดคุยกันค่อนข้างมาก

อย่างไรก็ตามมีความคลุมเครือจำนวนมากและบางคำตอบที่ให้ ... รวมถึงการอ้างอิง jar ซ้ำในการกำหนดค่า jars / executor / driver หรือตัวเลือก

รายละเอียดที่ไม่ชัดเจนและ / หรือละเว้น

ควรอธิบายรายละเอียดที่คลุมเครือไม่ชัดเจนและ / หรือละเว้นสำหรับแต่ละตัวเลือก:

  • ClassPath ได้รับผลกระทบอย่างไร
    • คนขับรถ
    • ผู้บริหาร (สำหรับงานที่กำลังทำงาน)
    • ทั้งสอง
    • ไม่ใช่เลย
  • อักขระการแยก: จุลภาคเครื่องหมายโคลอนอัฒภาค
  • หากมีการแจกจ่ายไฟล์โดยอัตโนมัติ
    • สำหรับงาน (สำหรับผู้บริหารแต่ละคน)
    • สำหรับไดรเวอร์ระยะไกล (หากทำงานในโหมดคลัสเตอร์)
  • ประเภทของ URI ที่ยอมรับ: ไฟล์โลคอล, hdfs, http และอื่น ๆ
  • หากคัดลอกไปยังตำแหน่งทั่วไปตำแหน่งนั้นอยู่ที่ไหน (hdfs, local?)

ตัวเลือกที่มีผลต่อ:

  1. --jars
  2. SparkContext.addJar(...) วิธี
  3. SparkContext.addFile(...) วิธี
  4. --conf spark.driver.extraClassPath=... หรือ --driver-class-path ...
  5. --conf spark.driver.extraLibraryPath=..., หรือ --driver-library-path ...
  6. --conf spark.executor.extraClassPath=...
  7. --conf spark.executor.extraLibraryPath=...
  8. อย่าลืมพารามิเตอร์สุดท้ายของ spark-submit ก็เป็นไฟล์. jar เช่นกัน

ฉันรู้ว่าฉันสามารถหาเอกสารประกายหลักและโดยเฉพาะเกี่ยวกับวิธีการส่งที่ตัวเลือกที่มีอยู่และยังJavaDoc อย่างไรก็ตามที่เหลือสำหรับฉันยังค่อนข้างบางหลุมแม้ว่ามันจะตอบบางส่วนเกินไป

ฉันหวังว่ามันจะไม่ซับซ้อนทั้งหมดและใครบางคนสามารถให้คำตอบที่ชัดเจนและกระชับ

ถ้าฉันจะคาดเดาจากเอกสารมันก็ดูเหมือนว่า--jarsและSparkContext addJarและaddFileวิธีการเป็นคนที่จะแจกจ่ายแฟ้มในขณะที่ตัวเลือกอื่น ๆ เพียงแค่ปรับเปลี่ยนคลาสพา ธ

มันจะปลอดภัยหรือไม่ที่จะสมมติว่าเพื่อความง่ายฉันสามารถเพิ่มไฟล์ jar เพิ่มเติมโดยใช้ตัวเลือกหลัก 3 ตัวพร้อมกัน:

spark-submit --jar additional1.jar,additional2.jar \
  --driver-library-path additional1.jar:additional2.jar \
  --conf spark.executor.extraLibraryPath=additional1.jar:additional2.jar \
  --class MyClass main-application.jar

พบบทความที่ดีในคำตอบที่จะโพสต์อีก อย่างไรก็ตามไม่มีอะไรใหม่ที่ได้เรียนรู้ ผู้โพสต์พูดถึงความแตกต่างระหว่าง Local driver (yarn-client) และ Remote Driver (yarn-cluster) สิ่งสำคัญที่ควรทราบ


1
คุณจัดการคลัสเตอร์ใดอยู่ภายใต้ แบบสแตนด์อโลน / เส้นด้าย / Mesos?
Yuval Itzchakov

ใด ฉันตั้งใจจะทำเช่นนี้เพื่ออธิบายเอกสารต้นฉบับ ฉันส่วนใหญ่ใช้คลัสเตอร์สแตนด์อะโลนอินสแตนซ์เดียวไคลเอนต์ของเส้นด้าย คนอื่นอาจใช้ Mesos ดูเหมือนว่าคุณจะทำการค้นคว้าต้นฉบับที่ดีในบล็อกของคุณในเรื่องนี้ ในที่สุดฉันก็ทำเช่นเดียวกันกับคุณโดยใช้ shader เพื่อสร้างโถ Uber เพื่อทำให้กระบวนการปรับใช้ของฉันง่ายขึ้น
YoYo

1
ฉันจะโพสต์คำตอบเกี่ยวกับวิธีที่เราปรับใช้ Spark Standalone ซึ่งอาจล้างบางสิ่ง
Yuval Itzchakov

6
ฉันพยายามตอบทุกคำถามของคุณแล้ว หวังว่ามันจะช่วยให้ :)
Yuval Itzchakov

@Yuval Itzchakov เช่นเดียวกับ Yoyo ที่กล่าวถึงฉันใช้ jar สีเทาเพื่อรวมการอ้างอิงทั้งหมดของฉันไว้เช่นคลาสเคสและขวดอื่น ๆ ที่ฉันอาจใช้ ฉันพยายามที่จะเข้าใจว่าเมื่อไรที่ฉันต้องเจอสถานการณ์ที่ฉันต้องการขวดหลายใบ ฉันหมายถึงฉันสามารถรวมไหหลาย ๆ ขวดไว้ในเหยือกขนาด 1 uber ได้ เหตุใดฉันจึงไม่สามารถใช้ชีวิตร่วมกับเหยือกสีเทาของฉันรวมการอ้างอิงทั้งหมดของฉันได้
Sheel Pancholi

คำตอบ:


177

CLASSPATH:

ClassPath ได้รับผลกระทบขึ้นอยู่กับสิ่งที่คุณให้ มีสองวิธีในการตั้งค่าบางอย่างบน classpath:

  • spark.driver.extraClassPathหรือเป็นนามแฝง--driver-class-pathในการตั้งค่า classpaths พิเศษบนโหนดที่เรียกใช้ไดรเวอร์
  • spark.executor.extraClassPath เพื่อตั้งค่าคลาสพา ธ พิเศษบนโหนดผู้ทำงาน

หากคุณต้องการให้ JAR บางตัวมีผลกับทั้ง Master และ Worker คุณต้องระบุแยกต่างหากในแฟล็ก BOTH

อักขระแยก:

ปฏิบัติตามกฎเดียวกันกับ JVM :

  • Linux: ลำไส้ใหญ่ :
    • เช่น: --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar:/opt/prog/aws-java-sdk-1.10.50.jar"
  • Windows: อัฒภาค ;
    • เช่น: --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar;/opt/prog/aws-java-sdk-1.10.50.jar"

การกระจายไฟล์:

ขึ้นอยู่กับโหมดที่คุณทำงานภายใต้:

  1. โหมดไคลเอนต์ - ประกายไฟเซิร์ฟเวอร์ Netty HTTP ซึ่งกระจายไฟล์เมื่อเริ่มทำงานสำหรับแต่ละโหนดผู้ปฏิบัติงาน คุณจะเห็นว่าเมื่อคุณเริ่มงาน Spark ของคุณ:

    16/05/08 17:29:12 INFO HttpFileServer: HTTP File server directory is /tmp/spark-48911afa-db63-4ffc-a298-015e8b96bc55/httpd-84ae312b-5863-4f4c-a1ea-537bfca2bc2b
    16/05/08 17:29:12 INFO HttpServer: Starting HTTP Server
    16/05/08 17:29:12 INFO Utils: Successfully started service 'HTTP file server' on port 58922.
    16/05/08 17:29:12 INFO SparkContext: Added JAR /opt/foo.jar at http://***:58922/jars/com.mycode.jar with timestamp 1462728552732
    16/05/08 17:29:12 INFO SparkContext: Added JAR /opt/aws-java-sdk-1.10.50.jar at http://***:58922/jars/aws-java-sdk-1.10.50.jar with timestamp 1462728552767
  2. โหมด Cluster - ในโหมดคลัสเตอร์ spark เลือกโหนด Leadererer เพื่อเรียกใช้กระบวนการของไดรเวอร์ หมายความว่างานไม่ได้ทำงานโดยตรงจากโหนดมาสเตอร์ ในที่นี้ Spark จะไม่ตั้งค่าเซิร์ฟเวอร์ HTTP คุณต้องทำให้ JARS ของคุณพร้อมใช้งานกับโหนดงานทั้งหมดด้วยตนเองผ่าน HDFS / S3 / แหล่งอื่น ๆ ซึ่งมีอยู่ในทุกโหนด

ยอมรับ URI's สำหรับไฟล์

ใน"การส่งแอปพลิเคชัน"เอกสาร Spark ทำงานได้ดีในการอธิบายคำนำหน้าที่ยอมรับสำหรับไฟล์:

เมื่อใช้ spark-submit, ขวดแอ็พพลิเคชันพร้อมกับขวดใด ๆ ที่รวมอยู่ในตัวเลือก --jars จะถูกโอนไปยังคลัสเตอร์โดยอัตโนมัติ Spark ใช้รูปแบบ URL ต่อไปนี้เพื่อให้กลยุทธ์ที่แตกต่างกันสำหรับการกระจายไห:

  • ไฟล์: - เส้นทางที่แน่นอนและไฟล์: / URIs ให้บริการโดยไฟล์เซิร์ฟเวอร์ HTTP ของไดรเวอร์และผู้ปฏิบัติการทุกรายจะดึงไฟล์จากเซิร์ฟเวอร์ HTTP ของไดรเวอร์
  • hdfs :, http :, https :, ftp: - ไฟล์แบบดึงลงและ JAR จาก URI ดังที่คาดไว้
  • ท้องถิ่น: - URI เริ่มต้นด้วยท้องถิ่น: / คาดว่าจะมีอยู่เป็นไฟล์ท้องถิ่นในแต่ละโหนดผู้ปฏิบัติงาน ซึ่งหมายความว่าจะไม่มีเครือข่าย IO เกิดขึ้นและทำงานได้ดีสำหรับไฟล์ / JAR ขนาดใหญ่ที่ส่งไปยังผู้ปฏิบัติงานแต่ละคนหรือแชร์ผ่าน NFS, GlusterFS ฯลฯ

โปรดทราบว่า JARs และไฟล์จะถูกคัดลอกไปยังไดเรกทอรีการทำงานสำหรับแต่ละ SparkContext บนโหนดตัวจัดการ

ตามที่ระบุไว้ JARs จะถูกคัดลอกไปยังไดเร็กทอรีการทำงานสำหรับแต่ละโหนดผู้ทำงาน ตรงไหนล่ะ มันเป็นมักจะอยู่ภายใต้/var/run/spark/workคุณจะเห็นพวกเขาเช่นนี้

drwxr-xr-x    3 spark spark   4096 May 15 06:16 app-20160515061614-0027
drwxr-xr-x    3 spark spark   4096 May 15 07:04 app-20160515070442-0028
drwxr-xr-x    3 spark spark   4096 May 15 07:18 app-20160515071819-0029
drwxr-xr-x    3 spark spark   4096 May 15 07:38 app-20160515073852-0030
drwxr-xr-x    3 spark spark   4096 May 15 08:13 app-20160515081350-0031
drwxr-xr-x    3 spark spark   4096 May 18 17:20 app-20160518172020-0032
drwxr-xr-x    3 spark spark   4096 May 18 17:20 app-20160518172045-0033

และเมื่อคุณมองเข้าไปข้างในคุณจะเห็น JAR ทั้งหมดที่คุณปรับใช้พร้อม:

[*@*]$ cd /var/run/spark/work/app-20160508173423-0014/1/
[*@*]$ ll
total 89988
-rwxr-xr-x 1 spark spark   801117 May  8 17:34 awscala_2.10-0.5.5.jar
-rwxr-xr-x 1 spark spark 29558264 May  8 17:34 aws-java-sdk-1.10.50.jar
-rwxr-xr-x 1 spark spark 59466931 May  8 17:34 com.mycode.code.jar
-rwxr-xr-x 1 spark spark  2308517 May  8 17:34 guava-19.0.jar
-rw-r--r-- 1 spark spark      457 May  8 17:34 stderr
-rw-r--r-- 1 spark spark        0 May  8 17:34 stdout

ตัวเลือกที่ได้รับผลกระทบ:

สิ่งที่สำคัญที่สุดที่จะเข้าใจความสำคัญ ถ้าคุณผ่านทรัพย์สินใด ๆ รหัสผ่านก็จะมีความสำคัญมากกว่าตัวเลือกใด ๆ spark-submitที่คุณระบุผ่านทาง สิ่งนี้ถูกกล่าวถึงในเอกสารของ Spark:

ค่าใด ๆ ที่ระบุเป็นแฟล็กหรือในไฟล์คุณสมบัติจะถูกส่งต่อไปยังแอปพลิเคชันและผสานกับค่าที่ระบุผ่าน SparkConf คุณสมบัติที่ตั้งค่าโดยตรงบน SparkConf มีความสำคัญสูงสุดจากนั้นแฟล็กที่ส่งไปยัง spark-submit หรือ spark-shell จากนั้นตัวเลือกในไฟล์ spark-defaults.conf

ดังนั้นให้แน่ใจว่าคุณตั้งค่าเหล่านั้นในสถานที่ที่เหมาะสมดังนั้นคุณจะไม่แปลกใจเมื่อหนึ่งจะมีความสำคัญมากกว่าที่อื่น

ให้วิเคราะห์แต่ละตัวเลือกในคำถาม:

  • --jarsvs SparkContext.addJar: สิ่งเหล่านี้เหมือนกันมีเพียงหนึ่งรายการเท่านั้นที่ตั้งค่าผ่านการส่งประกายและอีกหนึ่งรหัสผ่าน เลือกห้องสวีทที่คุณดีกว่า สิ่งสำคัญประการหนึ่งที่ควรทราบก็คือการใช้ตัวเลือกใดตัวเลือกหนึ่งเหล่านี้ไม่ได้เพิ่ม JAR ให้กับ driver / executor classpath ของคุณคุณจะต้องเพิ่มอย่างชัดเจนโดยใช้extraClassPathconfig ในทั้งคู่
  • SparkContext.addJarvs SparkContext.addFile: ใช้ชื่อเดิมเมื่อคุณมีการอ้างอิงที่ต้องใช้กับรหัสของคุณ ใช้หลังเมื่อคุณเพียงต้องการส่งไฟล์โดยพลการไปยังโหนดผู้ปฏิบัติงานของคุณซึ่งไม่ใช่การพึ่งพาเวลาทำงานในโค้ดของคุณ
  • --conf spark.driver.extraClassPath=...หรือ--driver-class-path: เหล่านี้เป็นชื่อแทนไม่สำคัญว่าคุณจะเลือกแบบใด
  • --conf spark.driver.extraLibraryPath=..., or --driver-library-path ... เหมือนกับชื่อข้างต้น
  • --conf spark.executor.extraClassPath=...: ใช้สิ่งนี้เมื่อคุณมีการพึ่งพาซึ่งไม่สามารถรวมอยู่ใน uber JAR (ตัวอย่างเช่นเนื่องจากมีการรวบรวมเวลาขัดแย้งกันระหว่างเวอร์ชันไลบรารี) และที่คุณต้องโหลดตอนรันไทม์
  • --conf spark.executor.extraLibraryPath=...สิ่งนี้ถูกส่งผ่านเป็นjava.library.pathตัวเลือกสำหรับ JVM ใช้สิ่งนี้เมื่อคุณต้องการพา ธ ไลบรารีที่มองเห็นได้สำหรับ JVM

มันจะปลอดภัยหรือไม่ที่จะสมมติว่าเพื่อความง่ายฉันสามารถเพิ่มไฟล์ jar เพิ่มเติมโดยใช้ตัวเลือกหลัก 3 ตัวพร้อมกัน:

คุณสามารถสันนิษฐานได้ว่าปลอดภัยสำหรับโหมดไคลเอนต์เท่านั้นไม่ใช่โหมดคลัสเตอร์ อย่างที่ฉันเคยพูดไป ตัวอย่างที่คุณให้ไว้มีข้อโต้แย้งที่ซ้ำซ้อน ตัวอย่างเช่นการส่ง JAR ไป--driver-library-pathนั้นไร้ประโยชน์คุณจะต้องผ่านมันไปextraClassPathหากคุณต้องการให้พวกเขาอยู่ใน classpath ของคุณ ในที่สุดสิ่งที่คุณต้องการทำเมื่อคุณปรับใช้ JAR ภายนอกทั้งไดรเวอร์และผู้ปฏิบัติงานคือ:

spark-submit --jars additional1.jar,additional2.jar \
  --driver-class-path additional1.jar:additional2.jar \
  --conf spark.executor.extraClassPath=additional1.jar:additional2.jar \
  --class MyClass main-application.jar

4
คำตอบที่ยอดเยี่ยมและครอบคลุม ขอบคุณ. คุณสามารถบอกเพิ่มเติมเกี่ยวกับแนวปฏิบัติที่ดีที่สุดในการปรับใช้กับuber JARเทียบกับการพึ่งพานอก JAR (libs ในโฟลเดอร์ภายนอกและแสดงอยู่ในMANIFEST.MFไฟล์)
jsosnowski

2
@jsosnowski โดยปกติฉันเพียง แต่ชอบที่จะใช้ไหภายนอกเมื่อมีข้อขัดแย้งที่ซับซ้อนมากในการแก้ปัญหาด้วย uber JAR ของฉัน ฉันมักจะได้รับเพียงแค่ใช้ SBTs assemblyMergeStrategyและเลือกชั้นเรียนที่ฉันต้องการหากมีข้อขัดแย้ง ฉันมักจะแนะนำเหมือนกัน
Yuval Itzchakov

9
@ yuval-itzchakov ขอบคุณสำหรับคำตอบที่ดีมีประโยชน์มาก มีอยู่ช่วงหนึ่งที่ฉันต้องการเน้นที่จะช่วยเหลือผู้อื่นที่อาจทำผิดพลาดแบบเดียวกับที่ฉันทำ อาร์กิวเมนต์ --jars ส่ง jars ไปยังเครื่องแต่ละเครื่องในคลัสเตอร์เท่านั้น มันไม่ได้บอกประกายที่จะใช้พวกมันในการค้นหาพา ธ ของคลาส --driver-class-path (หรืออาร์กิวเมนต์ที่คล้ายกันหรือพารามิเตอร์การตั้งค่า) จะต้องใช้ ตอนแรกฉันคิดว่าพวกเขาเป็นทางเลือกในการทำสิ่งเดียวกัน
ทิมไรอัน

1
@ TimRyan แน่นอน หากคุณดูที่ส่วนสุดท้ายของคำตอบฉันจะส่งไหทั้งสองไปที่--jarsค่าสถานะและเส้นทางคลาสไดรเวอร์ / ผู้ปฏิบัติการ
Yuval Itzchakov

1
ในที่สุดผมพบว่าวิธีการฉีดตัวแปรสภาพแวดล้อมเข้าzeppelin-env.shและเพิ่มการ--jars SPARK_SUBMIT_OPTIONSที่ได้ผล URI --jars=local:///mnt/dir/file.jarใช้รูปแบบที่ฉันเป็น
Mike

4

อีกวิธีหนึ่งspark 2.1.0คือการใช้--conf spark.driver.userClassPathFirst=trueในระหว่างการส่งประกายไฟซึ่งเปลี่ยนลำดับความสำคัญของโหลดอ้างอิงและพฤติกรรมของงานประกายโดยให้ความสำคัญกับขวดที่ผู้ใช้จะเพิ่มไปยังเส้นทางชั้นที่มี--jarsตัวเลือก


2
คุณจะต้องระมัดระวังด้วย - เพราะเป็นไปได้ที่จะทำให้เกิดประกายไฟ นี่ควรเป็นทางเลือกสุดท้าย อาจเป็นไปได้ว่ามันอาจรบกวนเลเยอร์ที่เชื่อมต่อกับไหมพรมได้เช่นกันเมื่อใช้ในโหมดไคลเอนต์เส้นด้ายแม้ว่าฉันไม่แน่ใจ
YoYo

ขอบคุณสำหรับหัวขึ้น มีวิธีใดที่จะจัดลำดับความสำคัญเพียง 1 jar ซึ่งมีอยู่ในเซิร์ฟเวอร์ในเวอร์ชันที่เก่ากว่า แต่คุณไม่สามารถแทนที่ได้จริงและคุณรู้ว่าคุณไม่ต้องการใช้งานหรือไม่?
Stanislav

1
ฉันเดาว่าในกรณีนี้คุณสามารถลองได้อย่างที่คุณแนะนำ ไม่ได้บอกว่ามันไม่ใช่อย่างแน่นอน นอกจากนี้โปรดทราบว่าตัวเลือกนั้นถูกทำเครื่องหมายเป็น 'ทดลอง' - คำเตือนที่ต้องระวัง! ไม่มีวิธีที่ปลอดภัยในการจัดลำดับความสำคัญของห้องสมุดรุ่นหนึ่งไปยังอีก ในการใช้งานบางอย่างสิ่งนี้จะถูกแก้ไขโดยการย้ายหนึ่งในห้องสมุดในเนมสเปซที่แตกต่างกันดังนั้นคุณสามารถใช้ทั้งสองเวอร์ชันในเวลาเดียวกัน
YoYo

1

ตัวเลือก Spark ที่กำหนดค่าอื่น ๆ ที่เกี่ยวข้องกับไหและ classpath ในกรณีที่yarnเป็นโหมดการปรับใช้มีดังนี้
จากเอกสาร Spark,

spark.yarn.jars

รายการไลบรารีที่มีรหัส Spark เพื่อแจกจ่ายไปยังคอนเทนเนอร์ YARN โดยค่าเริ่มต้น Spark on YARN จะใช้ Spark jars ที่ติดตั้งภายในเครื่อง แต่ Spark jars สามารถอยู่ในตำแหน่งที่สามารถอ่านได้บน HDFS สิ่งนี้อนุญาตให้ YARN ทำการแคชบนโหนดเพื่อไม่ให้ถูกแจกจ่ายทุกครั้งที่แอปพลิเคชันทำงาน หากต้องการชี้ไปที่ไหบน HDFS ตัวอย่างเช่นตั้งค่าการกำหนดค่านี้เป็น hdfs: /// some / path อนุญาตให้มี Globs

spark.yarn.archive

ไฟล์เก็บถาวรที่มี Spark jars ที่จำเป็นสำหรับการแจกจ่ายไปยังแคช YARN หากตั้งค่าการกำหนดค่านี้จะแทนที่ spark.yarn.jars และไฟล์เก็บถาวรจะใช้ในคอนเทนเนอร์ของแอปพลิเคชันทั้งหมด ไฟล์เก็บถาวรควรมีไฟล์ jar ในไดเร็กทอรีรูท เช่นเดียวกับตัวเลือกก่อนหน้าไฟล์เก็บถาวรสามารถโฮสต์บน HDFS เพื่อเร่งการกระจายไฟล์

ผู้ใช้สามารถกำหนดค่าพารามิเตอร์นี้เพื่อระบุขวดของพวกเขาซึ่งจะได้รับการผนวกเข้าใน classpath ของโปรแกรมควบคุม Spark


1

เมื่อใช้ spark-submit กับ --master yarn-cluster ขวดแอ็พพลิเคชันพร้อมกับขวดใด ๆ ที่รวมอยู่ในตัวเลือก --jars จะถูกโอนไปยังคลัสเตอร์โดยอัตโนมัติ URL ที่ระบุหลังจาก - ขวดต้องคั่นด้วยเครื่องหมายจุลภาค รายการนั้นจะรวมอยู่ใน classpaths ของไดรเวอร์และตัวจัดการ

ตัวอย่าง:

spark-submit - ผู้ดูแลกลุ่มคลัสเตอร์ --jars ../lib/misc.jar, ../lib/test.jar - คลาส MainClass MainApp.jar หลัก

https://spark.apache.org/docs/latest/submitting-applications.html


0

มีข้อ จำกัด ในการใช้--jars: หากคุณต้องการระบุไดเรกทอรีสำหรับตำแหน่งที่ตั้งของjar/xmlไฟล์มันไม่อนุญาตให้มีการขยายไดเรกทอรี หมายความว่าถ้าคุณต้องการระบุพา ธ สัมบูรณ์สำหรับแต่ละ jar

หากคุณระบุ--driver-class-pathและคุณกำลังดำเนินการในโหมดกลุ่มเส้นด้ายแล้วคลาสไดรเวอร์จะไม่ได้รับการอัพเดต เราสามารถตรวจสอบได้ว่าคลาสพา ธ นั้นได้รับการปรับปรุงหรือไม่ภายใต้ spark ui หรือเซิร์ฟเวอร์ประวัติ spark ภายใต้สภาพแวดล้อมของแท็บ

ตัวเลือกที่ทำงานสำหรับฉันที่จะผ่านไหซึ่งมีการขยายไดเรกทอรีและที่ทำงานในโหมดคลัสเตอร์เส้นด้ายเป็น--confตัวเลือก เป็นการดีกว่าที่จะส่งผ่านคลาสพา ธ ของไดรเวอร์และตัวจัดการ--confซึ่งจะเพิ่มพวกเขาให้กับวัตถุเซสชันของตัวเองและเส้นทางเหล่านั้นจะถูกสะท้อนใน Spark Configuration แต่โปรดตรวจสอบให้แน่ใจว่าได้วางไหบนเส้นทางเดียวกันทั่วทั้งคลัสเตอร์

spark-submit \
  --master yarn \
  --queue spark_queue \
  --deploy-mode cluster    \
  --num-executors 12 \
  --executor-memory 4g \
  --driver-memory 8g \
  --executor-cores 4 \
  --conf spark.ui.enabled=False \
  --conf spark.driver.extraClassPath=/usr/hdp/current/hbase-master/lib/hbase-server.jar:/usr/hdp/current/hbase-master/lib/hbase-common.jar:/usr/hdp/current/hbase-master/lib/hbase-client.jar:/usr/hdp/current/hbase-master/lib/zookeeper.jar:/usr/hdp/current/hbase-master/lib/hbase-protocol.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/scopt_2.11-3.3.0.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/spark-examples_2.10-1.1.0.jar:/etc/hbase/conf \
  --conf spark.hadoop.mapred.output.dir=/tmp \
  --conf spark.executor.extraClassPath=/usr/hdp/current/hbase-master/lib/hbase-server.jar:/usr/hdp/current/hbase-master/lib/hbase-common.jar:/usr/hdp/current/hbase-master/lib/hbase-client.jar:/usr/hdp/current/hbase-master/lib/zookeeper.jar:/usr/hdp/current/hbase-master/lib/hbase-protocol.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/scopt_2.11-3.3.0.jar:/usr/hdp/current/spark2-thriftserver/examples/jars/spark-examples_2.10-1.1.0.jar:/etc/hbase/conf \
  --conf spark.hadoop.mapreduce.output.fileoutputformat.outputdir=/tmp

สวัสดีปีใหม่!
YoYo

สวัสดีปีใหม่ YoYo
Tanveer

0

--jarsในขณะที่เราส่งงานจุดประกายโดยใช้จุดประกายส่งยูทิลิตี้มีตัวเลือก ใช้ตัวเลือกนี้เราสามารถส่งไฟล์ jar เพื่อจุดประกายแอปพลิเคชัน


ว่ามี—jarตัวเลือกนี้ถูกกล่าวถึงโดยผู้โพสต์ต้นฉบับรวมทั้งกล่าวถึงในรายละเอียดมากขึ้นโดยมากกว่าหนึ่งคำตอบ ไม่ปรากฏว่าคุณกำลังให้อะไรใหม่ ๆ ?
YoYo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.