Pyspark df থেকে PostgresSQL এ 50 মিলিয়নেরও বেশি রচনা, সেরা দক্ষ পদ্ধতির


16

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

পোস্টগ্রিসের জন্য এখানে কি অনুরূপ কিছু থাকতে পারে?

আমার চেষ্টা করা কোড এবং প্রক্রিয়াটি চালাতে যে সময়টি লেগেছে তা যোগ করা:

def inserter():
    start = timer()
    sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\
    .option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \
    .option("dbtable", "public.full_load").option("user", "root").option("password", "password").save()
    end = timer()
    print(timedelta(seconds=end-start))
inserter()

সুতরাং আমি 10 মিলিয়ন রেকর্ডের জন্য উপরের পদ্ধতিটি করেছি এবং উল্লিখিত হিসাবে 5 টি সমান্তরাল সংযোগ ছিল numPartitionsএবং 200k এর ব্যাচের আকারের চেষ্টা করেছি

প্রক্রিয়াটির জন্য মোট সময়টি ছিল 0: 14: 05.760926 (চৌদ্দ মিনিট এবং পাঁচ সেকেন্ড)।

সময় হ্রাস করতে পারে যে কোনও কার্যকর পদ্ধতির আছে?

আমি কীভাবে দক্ষ বা অনুকূল ব্যাচের আকারটি ব্যবহার করতে পারি? আমার ব্যাচের আকার বাড়ানো কি দ্রুত কাজটি করবে? বা একাধিক সংযোগ উদ্বোধন অর্থাৎ> 5 টি প্রক্রিয়াটি আরও দ্রুত করতে আমাকে সহায়তা করে?

একটি অন 10 মিলিয়ন রেকর্ডের জন্য গড় 14 মিনিট খারাপ না , কিন্তু কে এই প্রশ্নের সাহায্যের উত্তর আগে এই কাজ করতাম সেখানে আউট মানুষ খুঁজছেন।


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

ডাই, আমার একটি ডিএফ রয়েছে যা ৫২ মিলিমিটার এবং এখন আমি এটি পোস্টগ্র্রেসে লিখছি, এটি একটি নতুন সারণী যা আমি উপরের কোডটির মাধ্যমে তৈরি করছি। আমি পোস্টগ্রিসে টেবিলটি তৈরি করে সেখানে লিখছি না। যদি আমি প্রথমে একটি টেবিল তৈরি করতে পারি এবং পোস্টগ্রিসে সেখানে সূচি তৈরি করতে পারি এবং তারপরে স্পার্ক ডিএফ থেকে ডেটা প্রেরণ করতে পারি তবে এর চেয়ে আরও ভাল সম্ভাবনা কি আছে?
চেতন_ভাসুদেভন

2
(এটি অন্য উপায়ে রয়েছে - সূচিগুলি টেবিলগুলিতে সন্নিবেশ করিয়ে ধীরে ধীরে কমিয়ে দেয়, তবে নির্বাচিত প্রশ্নের গতি
দাই

ডাই, সুতরাং আমি কেবল পোস্টগ্র্রেসে সূচি ছাড়াই টেবিলটি তৈরি করব এবং তারপরে আমার কর্মক্ষমতা সন্নিবেশ করানোর এবং পরিমাপ করার চেষ্টা করব?
চেতন_ভাসুদেভন

উত্তর:


4

আমি আসলে একই ধরণের কাজটি কিছুক্ষণ আগে করেছি কিন্তু অ্যাপাচি স্কুওপ ব্যবহার করে।

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

তবে সাবধান থাকুন, স্পার্কের দিকটি ভুলে যাবেন না। পোস্টগ্রেএসকিউএল সমর্থিত সর্বাধিক সংযোগের সংখ্যার সাথে তুলনা করা পার্টিশনের সংখ্যা তুলনামূলকভাবে বেশি হলে ম্যাপ পার্টিশনগুলি চালিত করার কোনও অর্থ হয় না , যদি আপনার অনেকগুলি পার্টিশন থাকে এবং আপনি প্রতিটিটির জন্য সংযোগ খোলেন, আপনার সম্ভবত নিম্নলিখিত ত্রুটি হবে org.postgresql.util.PSQLException: FATAL: sorry, too many clients already

সন্নিবেশ প্রক্রিয়াটি টিউন করার জন্য আমি পরবর্তী পদক্ষেপগুলি অনুসরণ করে সমস্যার সাথে যোগাযোগ করব:

  • মনে রাখবেন পার্টিশনের সংখ্যাটি গুরুত্বপূর্ণ। পার্টিশনের সংখ্যা পরীক্ষা করে তারপরে আপনার সমান্তরাল সংযোগের সংখ্যার উপর ভিত্তি করে এটিকে সামঞ্জস্য করুন। পার্টিশন অনুযায়ী আপনার একটি সংযোগ থাকতে পারে, সুতরাং আমি এখানেcoalesce যা উল্লেখ করেছি তা পরীক্ষা করার পরামর্শ দেব ।
  • আপনার পোস্টগ্রেএসকিউএল ইনস্ট্যান্স সমর্থন করে এমন সংখ্যার সর্বাধিক সংখ্যা পরীক্ষা করুন এবং আপনি সংখ্যাটি বাড়াতে চান ।
  • PostgreSQL এ ডেটা Forোকানোর জন্য কপি কমান্ড ব্যবহার করার পরামর্শ দেওয়া হয় । পোস্টগ্রিএসএসকিউএল সন্নিবেশকে কীভাবে গতি বাড়ানো যায় সে সম্পর্কে এখানে আরও বিস্তৃত উত্তর।

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


Dbustosp আমি অবশ্যই উপরের টিপসগুলি চেষ্টা করব, ততক্ষণ আপনি নিশ্চিত হয়ে ওঠার যোগ্য।
চেতন_ভাসুদেভন

@ চেতান_বাসুদেওয়ান আপনি যদি ব্যবহার করেন এমন ডেটা, রেকর্ড অনুসারে আকার ইত্যাদি সম্পর্কে আরও বিশদ সরবরাহ করে থাকে তবে ডেটা প্রকাশ্য হলে আমি নিজে থেকে কিছু চেষ্টা করতে পারি এবং সময়ের সাথে তুলনা করতে পারি।
dbustosp

Dbustosp ডেটাতে 80 টি কলাম এবং এর 55 মিলিয়ন রেকর্ড রয়েছে। আপনি আমাকে যে পরামর্শ দিয়েছেন তা নিয়ে কাজ শুরু করেছি।
চেতন_ভাসুদেভান

@ চেতান_ভাসুদেভেন ডেটাসেটের মোট আকার? ইনপুট ডেটা ফর্ম্যাট কি?
dbustosp

@ চেতন_ভাসুদেভন কোন আপডেট?
dbustosp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.