একটি স্পার্ক চাকরিতে জার যুক্ত করুন - স্পার্ক জমা দিন


158

সত্য ... এটি নিয়ে অনেক আলোচনা হয়েছে।

তবে এখানে অনেক অস্পষ্টতা এবং জবাবগুলি সরবরাহকারী / ড্রাইভার কনফিগারেশন বা বিকল্পগুলির নকলকরণ জারের রেফারেন্স সহ ... সরবরাহ করা কয়েকটি উত্তর রয়েছে।

অস্পষ্ট এবং / অথবা বাদ দেওয়া বিশদ

নিম্নলিখিত অস্পষ্টতা, অস্পষ্ট এবং / অথবা বাদ দেওয়া বিশদ প্রতিটি বিকল্পের জন্য স্পষ্ট করা উচিত:

  • ক্লাসপাথ কীভাবে প্রভাবিত হয়
    • চালক
    • নির্বাহক (চলমান কার্যগুলির জন্য)
    • উভয়
    • একেবারেই না
  • পৃথকীকরণের চরিত্র: কমা, কোলন, সেমিকোলন
  • সরবরাহ করা ফাইল স্বয়ংক্রিয়ভাবে বিতরণ করা হয়
    • কাজের জন্য (প্রতিটি নির্বাহকের কাছে)
    • দূরবর্তী ড্রাইভারের জন্য (যদি ক্লাস্টার মোডে চালিত হয়)
  • ইউআরআই টাইপ গৃহীত: স্থানীয় ফাইল, এইচডিএফএস, এইচপি, ইত্যাদি
  • যদি কোনও সাধারণ স্থানে অনুলিপি করা হয় , তবে সেই অবস্থানটি কোথায় (এইচডিএফএস, স্থানীয়?)

এটি যে বিকল্পগুলিকে প্রভাবিত করে:

  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. ভুলে যাবেন না, স্পার্ক-জমা দেওয়ার শেষ প্যারামিটারটি একটি .jar ফাইলও।

আমি যেখানে স্পার্কের মূল ডকুমেন্টেশন এবং বিশেষত কীভাবে জমা দিতে হয় সেগুলি সম্পর্কে উপলভ্য বিকল্পগুলি এবং জাভাক ডকটি কোথায় পেতে পারি সে সম্পর্কে আমি সচেতন । তবে এটি আমার জন্য এখনও বেশ কিছু গর্ত ছেড়ে গেছে, যদিও এটি আংশিকভাবে উত্তরও দিয়েছে।

আমি আশা করি যে এটি এত জটিল নয় এবং কেউ আমাকে একটি পরিষ্কার এবং সংক্ষিপ্ত উত্তর দিতে পারে give

যদি আমি নথিপত্র থেকে অনুমান করা ছিল, এটা মনে হচ্ছে যে --jars, এবং SparkContext addJarএবং addFileপদ্ধতি বেশী যে স্বয়ংক্রিয়ভাবে ফাইলগুলি বিতরণ করবে, যখন অন্যান্য অপশন নিছক ক্লাসপাথ সংশোধন হয়।

এটা কি নিরাপদ বলে ধরে নেওয়া নিরাপদ হবে যে আমি একই সাথে 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

অন্য একটি পোস্টের উত্তরের জন্য একটি দুর্দান্ত নিবন্ধ পেয়েছি । তবে নতুন কিছু শেখেনি। স্থানীয় ড্রাইভার (সুতা-ক্লায়েন্ট) এবং রিমোট ড্রাইভার (সুতা-গুচ্ছ) এর মধ্যে পার্থক্য সম্পর্কে পোস্টারটি ভাল মন্তব্য করেছে। অবশ্যই মনে রাখা গুরুত্বপূর্ণ।


1
আপনি কোন ক্লাস্টার ম্যানেজারের অধীনে চলছে? স্বতন্ত্র / সুতো / পূর্বে?
ইউভাল ইতজকভ

কোন। আসল ডকুমেন্টেশনের স্পষ্টতা হিসাবে আমি এটিকে উদ্দেশ্য করি। আমি বেশিরভাগ স্ট্যান্ডেলোন ক্লাস্টার, একক উদাহরণ, সুতা-ক্লায়েন্ট, সুতা-গুচ্ছ ব্যবহার করছি। অন্যরা মেসোস ব্যবহার করতে পারে। দেখে মনে হচ্ছে আপনি এটির জন্য নিজের ব্লগে কিছু ভাল মূল গবেষণা করেছেন । আমি বেশিরভাগই আপনার মতোই শেষ করেছি - আমার স্থাপনার প্রক্রিয়াটি সহজ করার জন্য একটি উবার জার তৈরি করতে শেডার ব্যবহার করে।
YoYo

1
আমরা স্পার্ক স্ট্যান্ডেলোন কীভাবে নিযুক্ত করি সে সম্পর্কিত একটি উত্তর পোস্ট করব, যা কিছু জিনিস পরিষ্কার করতে পারে।
ইউভাল ইতজকভ

6
আমি আপনার সমস্ত প্রশ্নের উত্তর একটি চেষ্টা করেছি। আশা করি এটি সাহায্য করবে :)
ইউভাল ইতজচকভ

@ ইউভাল ইতজককভ, যেমন ইয়য়ো উল্লেখ করেছেন, আমিও আমার সমস্ত নির্ভরতা যেমন কেস ক্লাস এবং অন্যান্য জারগুলি ব্যবহার করছি যা বান্ডিল করতে আমি একটি ছায়াময় জার ব্যবহার করি। আমি বুঝতে চেষ্টা করছি যে কখন আমার এমন এক পরিস্থিতিতে পড়তে হবে যেখানে আমার একাধিক জারের দরকার হয়। আমি বোঝাতে চাই যে আমি সবসময় 1 টি উবার জারে এই একাধিক জারকে বান্ডিল করতে পারি। আমি কেন আমার ছায়াময় জারে আমার সমস্ত নির্ভরতা বান্ডিল করে বাঁচতে পারি না?
শীল পাঁচোলি

উত্তর:


177

ক্লাসপাথ:

ক্লাসপথ আপনি যা সরবরাহ করেন তার উপর নির্ভর করে। ক্লাসপথে কিছু সেট করার কয়েকটি উপায় রয়েছে:

  • spark.driver.extraClassPathঅথবা --driver-class-pathড্রাইভারের চলমান নোডে অতিরিক্ত ক্লাসপাথ সেট করা উপনাম ।
  • spark.executor.extraClassPath কর্মী নোডগুলিতে অতিরিক্ত শ্রেণির পথ নির্ধারণ করতে।

আপনি যদি একটি নির্দিষ্ট জেআর মাস্টার এবং কর্মী উভয়ের জন্যই প্রভাবিত হতে চান তবে আপনাকে এটিকে দুটি পতাকাগুলিতে আলাদা করে নির্দিষ্ট করতে হবে।

বিচ্ছেদ চরিত্র:

জেভিএমের মতো একই বিধি অনুসরণ করে :

  • লিনাক্স: একটি কোলন :
    • উদাহরণ: --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar:/opt/prog/aws-java-sdk-1.10.50.jar"
  • উইন্ডোজ: একটি সেমিকোলন ;
    • উদাহরণ: --conf "spark.driver.extraClassPath=/opt/prog/hadoop-aws-2.7.1.jar;/opt/prog/aws-java-sdk-1.10.50.jar"

ফাইল বিতরণ:

এটি যে মোডের অধীনে আপনি নিজের কাজ চালাচ্ছেন তার উপর নির্ভর করে:

  1. ক্লায়েন্ট মোড - স্পার্ক একটি নেটটি এইচটিটিপি সার্ভার জ্বালিয়ে দেয় যা প্রতিটি কর্মী নোডের জন্য শুরুতে ফাইলগুলি বিতরণ করে। আপনি যখন আপনার স্পার্ক কাজ শুরু করবেন তখন আপনি দেখতে পাবেন:

    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. ক্লাস্টার মোড - ক্লাস্টার মোড স্পার্কে ড্রাইভার প্রক্রিয়া চালিয়ে যাওয়ার জন্য একটি নেতা কর্মী নোড নির্বাচন করেছেন। এর অর্থ কাজটি মাস্টার নোড থেকে সরাসরি চলছে না। এখানে, স্পার্ক কোনও এইচটিটিপি সার্ভার সেট করবে না । আপনাকে আপনার জারগুলি ম্যানুয়ালি সমস্ত কর্ম নোডের কাছে এইচডিএফএস / এস 3 / অন্যান্য উত্সগুলির মাধ্যমে উপলব্ধ করতে হবে যা সমস্ত নোডের জন্য উপলব্ধ।

ফাইলগুলির জন্য ইউআরআই স্বীকৃত

ইন "জমা অ্যাপ্লিকেশন" , স্পার্ক ডকুমেন্টেশন ফাইলের জন্য গৃহীত উপসর্গ ব্যাখ্যা একটি ভাল পেশা আছে:

স্পার্ক-জমা দেওয়ার সময়, অ্যাপ্লিকেশন জারটি --jars বিকল্পের সাথে অন্তর্ভুক্ত যে কোনও জারগুলি স্বয়ংক্রিয়ভাবে ক্লাস্টারে স্থানান্তরিত হবে। জারগুলি ছড়িয়ে দেওয়ার জন্য বিভিন্ন কৌশলকে মঞ্জুরি দেওয়ার জন্য স্পার্ক নিম্নলিখিত URL টি স্কিম ব্যবহার করে:

  • ফাইল: - সম্পূর্ণ পাথ এবং ফাইল: / ইউআরআই ড্রাইভারের এইচটিটিপি ফাইল সার্ভার দ্বারা পরিবেশন করা হয় এবং প্রতিটি নির্বাহক ড্রাইভার এইচটিটিপি সার্ভার থেকে ফাইলটি টানেন।
  • hdfs :, http :, https :, ftp: - এইগুলি ইউআরআই থেকে প্রত্যাশার মতো ফাইল এবং জেআর নামায়
  • স্থানীয়: - একটি ইউআরআই স্থানীয় দিয়ে শুরু হয়: / প্রতিটি কর্মী নোডে স্থানীয় ফাইল হিসাবে উপস্থিত থাকে বলে আশা করা যায়। এর অর্থ হ'ল কোনও নেটওয়ার্ক আইও ব্যয় করা হবে না, এবং বড় ফাইল / জেআরগুলির জন্য ভাল কাজ করে যা প্রতিটি কর্মীর কাছে চাপানো হয় বা এনএফএস, গ্লাস্টারএফএস ইত্যাদির মাধ্যমে ভাগ করা হয়

নোট করুন যে জারগুলি এবং ফাইলগুলি এক্সিকিউটার নোডগুলিতে প্রতিটি স্পার্ককন্টেক্সট এর জন্য ওয়ার্কিং ডিরেক্টরিতে অনুলিপি করা হয়।

উল্লিখিত হিসাবে, জারগুলি প্রতিটি কর্মী নোডের জন্য ওয়ার্কিং ডিরেক্টরিতে অনুলিপি করা হয় । ঠিক কোথায়? এটি সাধারণত এর অধীনে থাকে /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

এবং যখন আপনি ভিতরে তাকান, আপনি বরাবর মোতায়েন করা সমস্ত জার দেখতে পাবেন:

[*@*]$ 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। স্পার্ক নথিতে এটি উল্লেখ করা হয়েছে:

পতাকা হিসাবে বা বৈশিষ্ট্য ফাইলে নির্দিষ্ট হওয়া কোনও মান অ্যাপ্লিকেশনকে দেওয়া হবে এবং স্পার্ককনফের মাধ্যমে নির্দিষ্ট করাগুলির সাথে মার্জ করা হবে। স্পার্ককনফ-এ সরাসরি নির্ধারিত বৈশিষ্ট্যগুলি সর্বোচ্চ অগ্রাধিকার নেয় , তারপরে পতাকাগুলি স্পার্ক-জমা দেওয়া বা স্পার্ক-শেল হয়ে যায়, তারপরে স্পার্ক- ডিফল্টসকন্ট ফাইলটিতে বিকল্পগুলি

সুতরাং নিশ্চিত হয়ে নিন যে আপনি সেই মানগুলি যথাযথ স্থানে স্থাপন করেছেন, সুতরাং যখন কেউ অন্যটির চেয়ে বেশি অগ্রাধিকার গ্রহণ করবে তখন আপনি অবাক হবেন না।

প্রশ্নে প্রতিটি বিকল্প বিশ্লেষণ করা যাক:

  • --jarsবনাম SparkContext.addJar: এগুলি অভিন্ন, কেবল একটি স্পার্ক জমা দেওয়ার মাধ্যমে এবং একটি কোডের মাধ্যমে সেট করা হয়। যেটি আপনাকে আরও ভাল করে স্যুট করে এমন একটি চয়ন করুন। একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল এই বিকল্পগুলির যে কোনও একটিটি আপনার ড্রাইভার / নির্বাহক শ্রেণিপথের সাথে জেআর যুক্ত করে না , আপনি extraClassPathউভয়টিতে কনফিগারেশন ব্যবহার করে এগুলি স্পষ্টভাবে যুক্ত করতে হবে ।
  • SparkContext.addJarবনাম SparkContext.addFile: আপনার কোডের সাথে ব্যবহারের প্রয়োজন যখন নির্ভরতা থাকে তখন প্রাক্তনটিকে ব্যবহার করুন । যখন আপনি কেবল নিজের কর্মী নোডের কাছে একটি স্বেচ্ছাসেবী ফাইল পাস করতে চান তখন ব্যবহার করুন যা আপনার কোডটিতে রান-টাইম নির্ভরতা নয়।
  • --conf spark.driver.extraClassPath=...বা --driver-class-path: এগুলি এলিয়াস, আপনি কোনটি চয়ন করেন তা বিবেচ্য নয়
  • --conf spark.driver.extraLibraryPath=..., or --driver-library-path ... উপরের মত একই, উপাধি।
  • --conf spark.executor.extraClassPath=...: আপনার নির্ভরতা থাকলে এটি ব্যবহার করুন যখন একটি উবার জেআর-তে অন্তর্ভুক্ত করা যায় না (উদাহরণস্বরূপ, কারণ গ্রন্থাগারের সংস্করণগুলির মধ্যে সংকলনের সময় বিবাদ রয়েছে) এবং যা আপনাকে রানটাইম সময়ে লোড করতে হবে।
  • --conf spark.executor.extraLibraryPath=...এটি java.library.pathJVM এর বিকল্প হিসাবে পাস করা হয়েছে । আপনি যখন JVM এর কাছে দৃশ্যমান লাইব্রেরির পাথ প্রয়োজন তখন এটি ব্যবহার করুন।

এটা কি নিরাপদ বলে ধরে নেওয়া নিরাপদ হবে যে আমি একই সাথে 3 টি প্রধান বিকল্প ব্যবহার করে অতিরিক্ত অ্যাপ্লিকেশন জার ফাইল যুক্ত করতে পারি:

আপনি এটি ক্লাস্টার মোড নয়, কেবল ক্লায়েন্ট মোডের জন্য নিরাপদে ধরে নিতে পারেন। আমি আগে বলেছি। এছাড়াও, আপনি যে উদাহরণ দিয়েছেন তাতে কিছু বাজে যুক্তি রয়েছে। উদাহরণস্বরূপ, জেআরগুলি পাস --driver-library-pathকরা অকেজো, আপনি extraClassPathযদি সেগুলি আপনার ক্লাসপথে থাকতে চান তবে আপনাকে সেগুলি দিতে হবে। পরিশেষে, আপনি যখন চালক এবং কর্মী উভয়কেই বাহ্যিক জেআর স্থাপন করেন তখন আপনি যা করতে চান তা হ'ল:

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
দুর্দান্ত এবং ব্যাপক উত্তর। ধন্যবাদ. আপনি কি জবারের বাইরে উবার জেআর বনাম নির্ভরতা সহ নির্ভরতার (বাহ্যিক ফোল্ডারে লিবস এবং MANIFEST.MFফাইলে তালিকাভুক্ত ) সাথে স্থাপনার সেরা অনুশীলন সম্পর্কে আরও বলতে পারেন ?
jsosnowski

2
@ জসোসনোস্কি সাধারণত, আমার উবার জেআর দিয়ে সমাধানের জন্য খুব জটিল যে দ্বন্দ্ব রয়েছে তখন আমি কেবলমাত্র বাহ্যিক জারগুলি ব্যবহার করা থেকে পিছিয়ে যাই। আমি সাধারণত এসবিটি ব্যবহার করে assemblyMergeStrategyএবং দ্বন্দ্ব থাকলে আমার প্রয়োজনীয় ক্লাসগুলি নির্বাচন করেই পাই। আমি সাধারণত একই প্রস্তাব করতাম।
যুবাল ইতজককভ

9
@ ইউভাল-ইটজচকভ দুর্দান্ত উত্তরের জন্য ধন্যবাদ, খুব সহায়ক। একটি বিষয় আমি অন্যদের যারা আমার মতো একই ভুল করেছে সম্ভবত তাদের সাহায্য করার জন্য জোর দিতে চাই। --Jars আর্গুমেন্ট কেবল জাস্টগুলি ক্লাস্টারের প্রতিটি মেশিনে স্থানান্তর করে। এটি ক্লাস পাথ অনুসন্ধানে তাদের ব্যবহার করতে স্পার্ককে বলে না। --Driver- শ্রেণি-পাথ (বা অনুরূপ আর্গুমেন্ট বা কনফিগার পরামিতি) প্রয়োজন are আমি প্রথম দিকে ভেবেছিলাম তারা একই কাজ করার বিকল্প উপায় ছিল।
টিম রায়ান

1
@ টিমরিয়ান অবশ্যই আপনি যদি উত্তরের শেষ অংশটি দেখেন তবে আমি --jarsপতাকা এবং চালক / নির্বাহক শ্রেণীর উভয় পথেই জারগুলি পাস করি ।
যুবাল ইতজককভ

1
অবশেষে আমি দেখেছি কিভাবে উদ্বুদ্ধ করতে বিভিন্ন পরিবেশের মধ্যে zeppelin-env.shএবং যোগ --jarsকরার জন্য SPARK_SUBMIT_OPTIONS। কাজ করেছে। আমি ইউআরআই ফর্ম্যাটটি ব্যবহার করি --jars=local:///mnt/dir/file.jar
মাইক

4

এর মধ্যে আরেকটি পদ্ধতি spark 2.1.0হ'ল --conf spark.driver.userClassPathFirst=trueস্পার্ক-জমা দেওয়ার সময় ব্যবহার করা যা নির্ভরতা লোডের অগ্রাধিকার পরিবর্তন করে এবং এইভাবে স্পার্ক-জব এর আচরণ, ব্যবহারকারী জারগুলিকে অগ্রাধিকার দিয়ে --jarsবিকল্পের সাথে শ্রেণি পথে যোগ করে ।


2
আপনার এটির সাথে সতর্কতা অবলম্বন করতে হবে - এটি করার ফলে স্পার্ক ভাঙা সম্ভব। এটি একটি শেষ বিকল্প সমাধান হওয়া উচিত। সুতা-ক্লায়েন্ট মোডে ব্যবহার করার সময় এটি সুতার সাথে ইন্টারফেসিংয়ের ক্ষেত্রেও হস্তক্ষেপ করতে পারে, যদিও আমি নিশ্চিত নই।
YoYo

মাথা উত্তলনের জন্য ধন্যবাদ. কেবলমাত্র 1 টি জারকে অগ্রাধিকার দেওয়ার কোনও উপায় কী, এটি অবশ্যই পুরানো সংস্করণে সার্ভারে উপস্থিত রয়েছে তবে আপনি শারীরিকভাবে প্রতিস্থাপন করতে পারবেন না এবং আপনি জানেন যে আপনি ব্যবহার করতে চান না?
স্ট্যানিস্লাভ

1
আমি মনে করি সেক্ষেত্রে আপনি যেমন প্রস্তাব করেছিলেন ঠিক তেমন চেষ্টা করতে পারেন। এটি নিখুঁত নম্বর ছিল না। এছাড়াও মনে রাখবেন যে বিকল্পটি 'পরীক্ষামূলক' হিসাবে চিহ্নিত হয়েছে - সতর্কতা অবলম্বন করা! অন্যটির চেয়ে একটি লাইব্রেরির সংস্করণটিকে প্রাধান্য দেওয়ার কোনও নিরাপদ উপায় নেই। কিছু বাস্তবায়নে, একটি লাইব্রেরি আলাদা আলাদা নেমস্পেসে স্থানান্তরিত করে সমাধান করা হয়, যাতে আপনি একই সাথে উভয় সংস্করণ ব্যবহার করতে পারেন।
YoYo

1

জার এবং ক্লাসপাথ সম্পর্কিত অন্যান্য কনফিগারযোগ্য স্পার্ক বিকল্পটি yarnমোতায়েন মোডের ক্ষেত্রে
স্পার্ক ডকুমেন্টেশন থেকে নিম্নরূপ:

spark.yarn.jars

YARN পাত্রে বিতরণ করার জন্য স্পার্ক কোডযুক্ত লাইব্রেরির তালিকা। ডিফল্টরূপে, স্পার্ক অন ইয়ার্ন স্থানীয়ভাবে ইনস্টল স্পার্ক জারগুলি ব্যবহার করবে তবে স্পার্ক জারগুলি এইচডিএফএসে একটি বিশ্ব-পঠনযোগ্য স্থানেও থাকতে পারে। এটি YARN কে নোডগুলিতে এটি ক্যাশে রাখার অনুমতি দেয় যাতে প্রতিটি অ্যাপ্লিকেশন চলাকালীন এটি বিতরণ করার প্রয়োজন হয় না। উদাহরণস্বরূপ, এইচডিএফএসের জারে নির্দেশ করার জন্য এই কনফিগারেশনটিকে hdfs: /// কিছু / পাথ সেট করুন। গ্লোব অনুমোদিত হয়।

spark.yarn.archive

YARN ক্যাশে বিতরণ করার জন্য প্রয়োজনীয় স্পার্ক জারযুক্ত একটি সংরক্ষণাগার। যদি সেট করা থাকে তবে এই কনফিগারেশনটি স্পার্ক.ইয়ার্ন.জারগুলি প্রতিস্থাপন করে এবং সংরক্ষণাগারটি সমস্ত অ্যাপ্লিকেশনের পাত্রে ব্যবহৃত হয়। সংরক্ষণাগারটিতে এর মূল ডিরেক্টরিতে জার ফাইল থাকতে হবে। পূর্ববর্তী বিকল্পের মতো, সংরক্ষণাগারটিও ফাইল বিতরণ দ্রুত করার জন্য এইচডিএফএসে হোস্ট করা যায়।

ব্যবহারকারীরা তাদের পাত্রগুলি নির্দিষ্ট করতে এই প্যারামিটারটি কনফিগার করতে পারে যা স্পার্ক ড্রাইভারের ক্লাসপাথে অন্তর্ভুক্ত হয়।


1

- মাস্টার সুতা-ক্লাস্টারের সাথে স্পার্ক-জমা দেওয়ার সময়, অ্যাপ্লিকেশন জারটি --jars বিকল্পের সাথে অন্তর্ভুক্ত যে কোনও জারগুলি স্বয়ংক্রিয়ভাবে ক্লাস্টারে স্থানান্তরিত হবে। - জার্স পরে সরবরাহিত ইউআরএলগুলি অবশ্যই কমা দ্বারা পৃথক করা উচিত। সেই তালিকাটি ড্রাইভার এবং নির্বাহক শ্রেণিপথগুলিতে অন্তর্ভুক্ত রয়েছে

উদাহরণ:

স্পার্ক-জমা - মাস্টার সুতা-গোষ্ঠী - জার্স ../lib/misc.jar, ../lib/test.jar - ক্লাস মেইন ক্লাস মাইন অ্যাপ.জার

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


0

ব্যবহারে নিষেধাজ্ঞা রয়েছে --jars: আপনি যদি jar/xmlফাইলের অবস্থানের জন্য কোনও ডিরেক্টরি নির্দিষ্ট করতে চান তবে এটি ডিরেক্টরি সম্প্রসারণের অনুমতি দেয় না। এর অর্থ যদি প্রতিটি জারের জন্য আপনার নিখুঁত পথ নির্দিষ্ট করতে হয়।

আপনি যদি নির্দিষ্ট করে থাকেন --driver-class-pathএবং আপনি সুতা ক্লাস্টার মোডে চালাচ্ছেন তবে ড্রাইভার ক্লাসটি আপডেট হয় না। আমরা যাচাই করতে পারি শ্রেণীর পাথটি আপডেট হয়েছে কিনা তা স্পার্ক ইউআই এর অধীনে বা ট্যাব পরিবেশের অধীনে স্পার্ক ইতিহাসের সার্ভারে নেই।

ডিরেক্টরিটি বিস্তৃত করে এবং সুতা ক্লাস্টার মোডে কাজ করে এমন জারগুলি পাস করার জন্য যে বিকল্পটি আমার পক্ষে কাজ করেছিল সেটি --confবিকল্প ছিল । ড্রাইভার এবং এক্সিকিউটর শ্রেণীর পাথগুলি যেমন পাস করা ভাল তবে এটি --confতাদের স্পার্ক সেশন অবজেক্টে যুক্ত করে এবং সেগুলি স্পার্ক কনফিগারেশনে প্রতিফলিত হয়। তবে দয়া করে গোষ্ঠী জুড়ে একই পথে জারগুলি রাখার বিষয়টি নিশ্চিত করুন।

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
তানভীর

0

আমরা স্পার্ক-সাবমিট ইউটিলিটি ব্যবহার করে স্পার্ক কাজ জমা দেওয়ার সময় একটি বিকল্প রয়েছে --jars। এই বিকল্পটি ব্যবহার করে, আমরা অ্যাপ্লিকেশনগুলি স্পার্ক করতে জার ফাইলটি পাস করতে পারি।


এই —jarবিকল্পটি মূল পোস্টার দ্বারা উল্লিখিত ছিল, আরও একাধিক উত্তর দ্বারা আরও বিস্তারিতভাবে আলোচিত। আপনি নতুন কিছু সরবরাহ করছেন বলে মনে হচ্ছে না?
YoYo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.