এয়ারফ্লো: এক শটে কয়েক হাজার কাজ শিডিয়ুল করতে কীভাবে ব্যবহার করবেন

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

মূলত, এয়ারফ্লো একাধিক ডিএজি থাকার জন্য ডিজাইন করা হয়েছে এবং সেই ডিএজি-র ভিতরে কয়েকশ বা এক হাজার কাজ থাকতে পারে। সুতরাং, যখন আমরা বড় সংখ্যক কাজের সময়সূচী করতে চাই তখন প্রায় 60000 বা তার চেয়ে বেশি কিছু বলতে পারি? এই আমি এই ব্লগে ব্যাখ্যা করেছি।

আমি আমার কর্মপ্রবাহটি স্বয়ংক্রিয় করতে এয়ারফ্লোতে কাজ করছি। তবে আমার সংস্থায় আমাদের কাছে প্রচুর পরিমাণে ডেটা রয়েছে এবং আমি এয়ারফ্লোর বিভিন্ন সংস্করণ ব্যবহার করে চেষ্টা করেছি এবং সত্যই বিশাল ডেটার কারণে আমার একটি ডিএজে প্রায় 70000 কাজ রয়েছে tasks আমি এয়ারফ্লোর বিভিন্ন সংস্করণ চেষ্টা করেছি এবং সর্বশেষ সংস্করণটি 5000 টি কাজের শিডিয়ুলার করতে পারে তবে আমরা যদি এর চেয়ে বেশি সময় নির্ধারণ করতে চাই তবে শিডিয়ুলার কাজগুলি নির্ধারণ না করে চলমান অবস্থায় চলে যায়। আমি প্রতিটি সমস্যা খুঁজে পেয়েছি এবং এটি নিখুঁত কারণ এবং শেষ পর্যন্ত এই ব্লগটি লেখার পরেও কীভাবে এটি সমাধান করা যায় তা পরীক্ষা করে দেখেছি।

আপনার যখন কোনও ড্যাগের ভিতরে কয়েক হাজার কাজ থাকে তখন এয়ারফ্লোতে এটি অন্যতম ব্যবহারের ঘটনা। এটি শুরু করার জন্য আমাদের এয়ারফ্লো সংস্করণ 1.10.3 সংস্করণটি ব্যবহার করতে হবে তার পরে বড় সংখ্যক কাজে ফোকাস না করা, তাই আমাদের এয়ারফ্লো সংস্করণ 1.10.3 ব্যবহার করতে হবে। এই সংস্করণটি ইনস্টল করতে নীচের পদক্ষেপগুলি অনুসরণ করুন:

  • প্রথমে আমাদের একটি নতুন পরিবেশ তৈরি করতে হবে এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে সেই পরিবেশটি সক্রিয় করতে হবে:
কনডা -আন এয়ারফ্লো তৈরি করুন _3
কনডা এ্যাকটিভেট এয়ারফ্লো _3
  • 1.10.3 এর নির্দিষ্ট সংস্করণ সহ এয়ারফ্লো ইনস্টল করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
কনডা ইনস্টল-সি কনডা-ফোরজ এয়ারফ্লো == 1.10.3
  • এই সংস্করণটি flask to1.0.9 এর সাথে কাজ করে না এমন কিছু নির্দিষ্ট প্রয়োজনীয়তা সম্পর্কে নিশ্চিত করতে হবে, সুতরাং আপনার যদি এই সংস্করণটির চেয়ে বেশি ফ্লাস্ক থাকে তবে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
পাইপ ইনস্টল ফ্লাস্ক == 1.0.4
পিপ ইনস্টল ফানসিগস == 1.0.0 (এটি অন্য প্রয়োজনীয়তা যা ইনস্টল করা প্রয়োজন)
  • এবং আমরা যখন সেলারি এক্সিকিউটরটি ব্যবহার করার পরামর্শ দিই যখন আমরা এই বিশাল পরিমাণে কাজগুলির সাথে কাজ করি, কারণ আমাদের সেই কার্যগুলিকে সমান্তরাল করতে হয় এবং এটি সেলারি এক্সিকিউটর ব্যবহার করে অর্জন করা যায়। সেলারি ইনস্টল করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
পাইপ ইনস্টল সেলারি
  • সেলারি এক্সিকিউটরটি ব্যবহার করার জন্য আপনাকে শ্রমিক ব্যবহার করতে হবে এবং ব্রোকার সেট করতে হবে, আমি রেবটএমকিউকে ব্রোকার হিসাবে ব্যবহার করছি। ব্রোকার ইউআরএল সেটআপ করতে নিম্নলিখিত কাঠামো ব্যবহার করতে পারে:
ব্রোকার_আরএল = amqp: // "ব্যবহারকারীর নাম": "পাসওয়ার্ড" @ "হোস্ট_নাম": "পোর্ট" /

উদাহরণ স্বরূপ

ব্রোকার_আরএল = amqp: // অতিথি: অতিথি @ লোকালহোস্ট: 5672 /
  • সেলারি এক্সিকিউটারের UI দেখতে আমরা নীচের কমান্ডটি ইনস্টল করতে ফুল ব্যবহার করতে পারি:
কনডা-সি কনডা-ফোরজ ফুল ইনস্টল করুন
  • এটি করার পরে আমাদের সমান্তরালভাবে কয়েক হাজার কাজ পরিচালনা করতে এবং একটি শটে কয়েক হাজার কাজ শিডিয়ুল করতে কিছু কনফিগারেশন পরিবর্তন করতে হবে।
[মূল]
এক্সিকিউটর = সেলারিএক্সেক্টর সমান্তরালতা = 200000 নন_পুল্ড_টাস্ক_স্লট_কাউন্ট = 100000 ডাগ_কনক্রান্স্সি = 100000 সর্বোচ্চ_অ্যাক্টিভ_আর_স_পার_ডাগ = 2
[নির্ধারণকারী]
সর্বোচ্চ_প্রেম = 10 (আপনার প্রোগ্রাম অনুযায়ী থ্রেডগুলি বৃদ্ধি বা হ্রাস করে ব্যবহার করতে পারে)

আপনি যখন একটি শটে কয়েক হাজার কাজ শিডিউল করতে চান তখন এগুলি প্রধান সেটিংস। সমান্তরালভাবে আপনি কতগুলি সর্বোচ্চ ডিএজি চালাতে চান এবং একটি ডিএজি-র মধ্যে আপনার কতগুলি কার্য সম্পাদন করতে পারেন তা অনুসারে আপনাকে এটিকে সামঞ্জস্য করতে হবে।

প্রধান প্যারামিটারটি হ'ল "নন_পুল্ড_টাস্ক_স্লট_কাউন্ট" যা এয়ারফ্লো সংস্করণ ১.১০.৪ থেকে সরানো হয়েছে তাই আমি ১.১০.৩ ব্যবহার করছি, কারণ এই পরামিতিটি কার্য নির্ধারণে খুব গুরুত্বপূর্ণ ভূমিকা পালন করে।

"নন_পুল্ড_টাস্ক_স্লট_কাউন্ট" অপসারণের পরে মূল পার্থক্য হ'ল এটি ডিফল্ট_পুল ব্যবহার করে যা ডিফল্টরূপে 128 এ সেট করা হয় (এটি প্রয়োজনীয়তার সাথে বাড়িয়ে তুলতে পারে)। “নন_পুল্ড_টাস্ক_স্লট_কাউন্ট” এর প্রধান কাজটি কাজগুলি নির্ধারণ করা এবং এটি ডিফল্ট_পুল বা ডাটাবেস থেকে অন্য কোনও সংযোগের সাথে সংযুক্ত নয় তাই আমরা সেই সংখ্যাটি আপনার পছন্দমতো বাড়িয়ে তুলতে পারি তবে আপনি যদি "ডিফল্ট_পুলে" স্লট সংখ্যা বাড়ান তবে তারপরে এটি আপনার থাকা ডাটাবেস সংযোগগুলির সাথেও সংযুক্ত এবং আপনার সমান্তরালে চলমান সময়ে 100000 ডাটাবেস সংযোগ থাকতে পারে না। মূলত, "ডিফল্ট_পুল" এর পক্ষে "নন_পুল্ড_টাস্ক_স্লট_কাউন্ট" সরানো হয়েছে।

এই পোস্টে এই প্রশ্নের উত্তর রয়েছে যে শিডিউলার কেন বাধা হয়ে দাঁড়ায়, এটি আটকে যায়, এটি প্রচুর সংখ্যক কাজের সময়সূচি দেয় না বা এটি কিছু না করে পুরো দিন ধরে চলছে। এই সমস্ত উত্তরের এয়ারফ্লো সংস্করণ 1.10.3 ব্যবহার করার একটি উত্তর রয়েছে।

আপনি যখন এয়ারফ্লোটি ১.১০.৩ ব্যবহার করছেন তখন আমাদের ডিএজি দ্বারা কোন পুলটি ব্যবহার করা উচিত তা নির্ধারণ করতে হবে কারণ এটি ডিফল্টরূপে "ডিফল্ট_পুল" ব্যবহার করে না, সুতরাং কার্য তৈরি করার সময় আমাদের প্যারা ম্যাটার পুল = 'ডিফল্ট_পুল' পাস করতে হবে। আপনি ইউআই (অ্যাডমিন -> পুল) ব্যবহার করে 'ডিফল্ট_পুল' তৈরি করতে পারেন বা কমান্ড লাইনের মাধ্যমে করা যেতে পারে:

এয়ারফ্লো পুল - ডিফল্ট_পুল 128 'ডিফল্ট পুল'।

নমুনা ডিএজি এর উদাহরণ এখানে:

ডেটটাইম আমদানির তারিখের সময় থেকে ওএস আমদানি করুন, টাইমডেল্টা এয়ারফ্লো থেকে এয়ারফ্লো আমদানি করুন এয়ারফ্লো।
ডিফল্ট_আরগস = owner 'মালিক': 'এয়ারফ্লো', 'নির্ভর_অন_পস্ট': মিথ্যা, 'স্টার্ট_ডেট': এয়ারফ্লো.ইটিস.ডেটস.ডেস_গো (২), 'পুনরায় চেষ্টা': 1, 'পুনরায় চেষ্টা করুন': টাইমডেল্টা (মিনিট = 1),}
ড্যাগ = ডিএজি ('ডামি_ট্রি 1', ডিফল্ট_আর্গস = ডিফল্ট_আরগস, শিডিউল_ইন্টারভাল = কোনও নয়)
আমি সীমার জন্য (50000): টাস্কস = ডামিওপ্রেটার (টাস্ক_আইডি = '{}'। ফর্ম্যাট (i), ডাগ = দাগ, পুল = 'ডিফল্ট_পুল)

আপনি নীচের লিঙ্কে সমস্ত সংস্করণ মধ্যে পার্থক্য পরীক্ষা করতে পারেন:

  • https://github.com/apache/airflow/blob/master/UPDATING.md#airflow-1104