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