এসকিউএল থেকে নোএসকিউএল ডাটাবেসে ডেটা স্থানান্তর করতে ডিবিআইএনপুটফর্ম্যাট

এই ব্লগের উদ্দেশ্য হ'ল এসকিউএল ডাটাবেসগুলি থেকে এইচডিএফএসে ডেটা স্থানান্তর করার পদ্ধতি, এসকিউএল ডাটাবেসগুলি থেকে নোএসকিউএল ডাটাবেসে ডেটা স্থানান্তর কীভাবে করা যায় তা শিখতে হবে।

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



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



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

মানচিত্রের ফ্রেমওয়ার্কটি তার সমস্ত প্রক্রিয়াজাতকরণের কাজগুলি মূলত দুটি পর্যায়ে বিভক্ত করে: মানচিত্র এবং হ্রাস।



এই পর্যায়গুলির জন্য আপনার কাঁচা ডেটা প্রস্তুত করার জন্য কিছু বেসিক ক্লাস এবং ইন্টারফেস বোঝা প্রয়োজন। এই পুনঃপ্রসারণের জন্য সুপার ক্লাস ছক পূরণ করা.

দ্য ছক পূরণ করা ক্লাস হ্যাডোপ ম্যাপ্রেডিউস এপিআই-এর অন্যতম মূল শ্রেণি। এই শ্রেণিটি দুটি প্রধান বিষয় সংজ্ঞায়িত করার জন্য দায়বদ্ধ:

  • ডেটা বিভক্ত হয়
  • রেকর্ড রিডার

ডেটা বিভক্ত হ্যাডোপ ম্যাপ্রেইডুস ফ্রেমওয়ার্কের একটি মৌলিক ধারণা যা পৃথক মানচিত্র কাজের আকার এবং এর সম্ভাব্য এক্সিকিউশন সার্ভার উভয়কেই সংজ্ঞায়িত করে। দ্য রেকর্ড রিডার ইনপুট ফাইল থেকে প্রকৃত পড়ার রেকর্ডগুলির জন্য এবং সেগুলি ম্যাপারে (কী / মান জোড় হিসাবে) জমা দেওয়ার জন্য দায়ী।



বিভাজনের সংখ্যার ভিত্তিতে ম্যাপারগুলির সংখ্যা নির্ধারিত হয়। বিভাজন তৈরি করা ইনপুটফর্ম্যাট এর কাজ। বেশিরভাগ সময় বিভাজনের আকার ব্লক আকারের সমতুল্য তবে এইচডিএফএস ব্লক আকারের উপর ভিত্তি করে বিভাজনগুলি তৈরি করা সর্বদা নয়। এটি সম্পূর্ণরূপে নির্ভর করে যে কীভাবে আপনার ইনপুটফর্ম্যাটটির getSplits () পদ্ধতিটি ওভাররাইড করা হয়েছে।

এমআর স্প্লিট এবং এইচডিএফএস ব্লকের মধ্যে একটি মৌলিক পার্থক্য রয়েছে। একটি ব্লক হ'ল ডেটার দৈহিক অংশ, যখন বিভাজনটি কেবল একটি যৌক্তিক অংশ যা ম্যাপার পড়ে। একটি বিভক্ত ইনপুট ডেটা থাকে না, এটি কেবল তথ্য একটি রেফারেন্স বা ঠিকানা ধারণ করে। একটি বিভক্তিতে মূলত দুটি জিনিস থাকে: একটি দৈর্ঘ্য বাইটে এবং সঞ্চয় স্থানগুলির একটি সেট, যা কেবল স্ট্রিং।

এটি আরও ভালভাবে বুঝতে, আসুন একটি উদাহরণ নেওয়া যাক: এমআর ব্যবহার করে আপনার মাইএসকিউএলে সঞ্চিত ডেটা প্রক্রিয়াকরণ। যেহেতু এই ক্ষেত্রে ব্লকের কোনও ধারণা নেই, তত্ত্বটি: 'এইচডিএফএস ব্লকের ভিত্তিতে বিভাজনগুলি সর্বদা তৈরি করা হয়',ব্যর্থ। একটি সম্ভাবনা হ'ল আপনার মাইএসকিউএল টেবিলের সারিগুলির সীমাগুলির উপর ভিত্তি করে বিভাজন তৈরি করা (এবং এটি ডিবিআইএনপুট ফর্ম্যাটটি করে যা কোনও সম্পর্কিত ডেটাবেসগুলি থেকে ডেটা পড়ার জন্য একটি ইনপুট ফর্ম্যাট)। আমাদের কাছে n সারি সমন্বিত k সংখ্যা রয়েছে।

এটি কেবল ফাইলইনপুট ফর্ম্যাট (ফাইলগুলিতে সঞ্চিত ডেটা পরিচালনা করার জন্য একটি ইনপুট ফর্ম্যাট) এর উপর ভিত্তি করে ইনপুট ফর্ম্যাটগুলির জন্য যে স্প্লিটগুলি ইনপুট ফাইলগুলির মোট আকারের উপর ভিত্তি করে তৈরি করা হয়, বাইটে। যাইহোক, ইনপুট ফাইলগুলির ফাইল-সিস্টেম ব্লকসাইজকে ইনপুট বিভাজনের জন্য উপরের সীমা হিসাবে বিবেচনা করা হয়। আপনার যদি এইচডিএফএস ব্লক আকারের চেয়ে ছোট ফাইল থাকে তবে আপনি এই ফাইলটির জন্য কেবল 1 ম্যাপার পাবেন। আপনি যদি কিছু আলাদা আচরণ করতে চান তবে আপনি ম্যাপ্রেড.মিন.স্প্লিট.সাইজ ব্যবহার করতে পারেন। তবে এটি আবার সম্পূর্ণরূপে আপনার ইনপুট ফর্ম্যাটটির getSplits () উপর নির্ভর করে।

Org.apache.hadoop.mapreduce.lib.input এর অধীনে আমাদের প্রচুর প্রাক-বিদ্যমান ইনপুট ফর্ম্যাট রয়েছে।

কম্বাইনফাইলিপুটফর্ম্যাট html

CombineFileRecordReader.html

CombineFileRecordReaderWrapper.html

CombineFileSplit.html

কম্বাইনসেকুয়েন্সফিলি ইনপুটফর্ম্যাট html

কম্বাইনটেক্সট ইনপুটফর্ম্যাট html

ফাইলআইপুটফর্ম্যাট html

ফাইলআইপুটফর্ম্যাটকাউন্ট.এইচটিএমএল

ফাইলস্প্লিট। Html

ফিক্সডলেন্টি ইনপুটফর্ম্যাট html

অবৈধ ইনপুট এক্সেকশন। Html

কীভ্যালিউলাইনরেকর্ডার রিডার এইচটিএমএল

কীভ্যালিউটেক্সট ইনপুট ফর্ম্যাট html

মাল্টিপল ইনপুটস html

এনলাইন ইনপুটফর্ম্যাট html

সিকোয়েন্সফাইএলসাইনারি ইনপুট ফর্ম্যাট এইচটিএমএল

জাভাতে কিউ ডাটা স্ট্রাকচার

সিকোয়েন্সফাইএলসেক্সট ইনপুটফর্ম্যাট html

সিকোয়েন্সফিলএএসটেক্সটরেকর্ডআরেডার html

সিকোয়েন্সফিলি ইনপুটফিল্টার এইচটিএমএল

সিকোয়েন্সফাইলিপুটফর্ম্যাট html

সিকোয়েন্সফাইরেকর্ডার রিডার এইচটিএমএল

টেক্সটইনপুট ফরমেট html

ডিফল্টটি টেক্সটইনপুট ফর্ম্যাট।

একইভাবে, আমাদের অনেক আউটপুট ফর্ম্যাট রয়েছে যা হ্রাসকারীদের থেকে ডেটা পড়ে এবং এটি এইচডিএফএসে সঞ্চয় করে:

ফাইলআউটপুট কমমিটার। Html

ফাইলআউটপুট ফর্ম্যাট এইচটিএমএল

ফাইলআউটপুট ফরম্যাটকাউন্ট.এইচটিএমএল

ফিল্টারআউটপুট ফরমেট html

লাজিআউটপুটফর্ম্যাট html

মানচিত্রের আউটপুটফর্ম্যাট html

মাল্টিপল আউটপুটস html

নালআউটপুটফর্ম্যাট html

আংশিক ফাইলআউটপুট কমমিটার। Html

আংশিকআউটপুট কমমিটার। Html

সিকোয়েন্সফাইএলসাইনারিআউটপুটফর্ম্যাট html

সিকোয়েন্সফিলআউটপুটফর্ম্যাট html

পাঠ্য আউটপুটফর্ম্যাট html

ডিফল্ট টেক্সটআউটপুট ফর্ম্যাট।

আপনি এই ব্লগটি পড়া শেষ করার পরে, আপনি শিখতে হবে:

  • কীভাবে একটি মানচিত্র লিখতে হবে প্রোগ্রাম হ্রাস করুন
  • ম্যাপ্রেডুসে বিভিন্ন ধরণের ইনপুটফর্ম্যাট উপলব্ধ
  • ইনপুট ফরমেটের কী দরকার
  • কীভাবে কাস্টম ইনপুটফর্ম্যাট লিখবেন
  • কীভাবে এসকিউএল ডাটাবেসগুলি থেকে এইচডিএফএসে ডেটা স্থানান্তর করবেন
  • কীভাবে এসকিউএল (এখানে মাইএসকিউএল) ডাটাবেসগুলি নোএসকিউএল ডাটাবেসগুলিতে স্থানান্তর করবেন (এখানে এইচবিএস)
  • কীভাবে একটি এসকিউএল ডাটাবেস থেকে এসকিউএল ডাটাবেসে অন্য টেবিলের মধ্যে ডেটা স্থানান্তর করতে হয় (সম্ভবত আমরা এটি একই এসকিউএল ডাটাবেজে এটি করি তবে এটি খুব বেশি গুরুত্বপূর্ণ হতে পারে না However তবে, এর জ্ঞান থাকার ক্ষেত্রে কোনও ভুল নেই You আপনি কখনও জানেন না এটি কীভাবে কাজে লাগতে পারে)

পূর্বশর্ত:

  • হ্যাডোপ প্রাক ইনস্টলড
  • এসকিউএল প্রাক ইনস্টলড
  • Hbase প্রাক ইনস্টল করা
  • জাভা বেসিক বোঝার
  • মানচিত্রের জ্ঞান
  • হাদোপ কাঠামো বেসিক জ্ঞান

আসুন আমরা এখানে সমস্যার সমাধান করতে যাচ্ছি সমস্যার বিবৃতিটি বুঝতে পারি:

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

এই কাজটি করার জন্য আমাদের কাছে অনেক বিকল্প রয়েছে:

  • স্কুওপ
  • ফ্লুম
  • মানচিত্র কমাতে

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

বিঃদ্রঃ:

  • মাইএসকিউএল টেবিল থেকে সারণী আনতে আমাদের মাইএসকিউএল সংযোগকারীটি হ্যাডোপের ক্লাসপথে ডাউনলোড এবং লাগাতে হবে। এটি করার জন্য সংযোগকারী com.mysql.jdbc_5.1.5.jar ডাউনলোড করুন এবং এটি হডোপ_হোম / শেয়ার / হাদোপ / ম্যাপ্রেডুস / লিব ডিরেক্টরিতে রাখুন।
সিপি ডাউনলোডস / com.mysql.jdbc_5.1.5.jar $ হ্যাডোঅপহোম / শেয়ার / হাদুপ / ম্যাপ্রেডুস / লিব /
  • এছাড়াও, আপনার এমআর প্রোগ্রামের অ্যাক্সেসকে এইচবিতে অ্যাক্সেস করার জন্য হডোপ ক্লাসপাথের নীচে সমস্ত Hbase জার রাখুন। এটি করতে, নিম্নলিখিত কমান্ডটি প্রয়োগ করুন :
সিপি $ HBASE_HOME / lib / * $ HADOOP_HOME / শেয়ার / hadoop / mapreduce / lib /

এই কার্য সম্পাদনের জন্য আমি যে সফ্টওয়্যার সংস্করণগুলি ব্যবহার করেছি সেগুলি হ'ল:

  • হাদুপ -২.৩.০
  • HBase 0.98.9-Hadoop2
  • গ্রহন চাঁদ

কোনও সামঞ্জস্যের ইস্যুতে প্রোগ্রামটি এড়ানোর জন্য, আমি আমার পাঠকদের অনুরূপ পরিবেশের সাথে কমান্ড চালানোর জন্য পরামর্শ দিচ্ছি।

কাস্টম ডিবিআইএনপুট রাইটিং:

প্যাকেজ com.input Format.copy আমদানি java.io.DataInput আমদানি java.io.DataOutput আমদানি java.io.IOException আমদানি java.sql.ResultSet আমদানি java.sql.PreparedStatement আমদানি java.sql.SQLException আমদানি org.apache.hadoop.io .Writable আমদানি org.apache.hadoop.mapreduce.lib.db.DBWritable পাবলিক ক্লাস DBInputWritable প্রয়োগসমূহ লিখনযোগ্য, DBWritable- প্রাইভেট ইন্ট আইডি প্রাইভেট স্ট্রিং নাম, ডিপ্ট পাবলিক শূন্যপদ পড়ুন ফিল্ডস (ডেটা ইনপুট ইন) আইওএক্সেপশন}} পাবলিক শূন্যপদ্ধতি ফোল্ডারস (ফলাফল) এসকিউএলএক্সসেপশন থ্রো করে // রেজাল্ট অবজেক্টটি এসকিউএল স্টেটমেন্ট থেকে ফিরে আসা ডেটার প্রতিনিধিত্ব করে {id = rs.getInt (1) নাম = rs.getString (2) ডিপ্ট = আরএস.জেটস্ট্রিং (3)} পাবলিক শূন্য রাইটিং (ডেটাআউটপুট আউট) নিক্ষেপ করে O } পাবলিক শূন্য রাইটিং (প্রিপেইড স্টেটমেন্ট PS) এসকিউএলএক্সেপশন ছুড়ে ফেলেছে {PS.setInt (1, id) ps.setString (2, নাম) PS.setString (3, ডিপ্ট)} পাবলিক ইন্ট getId () {রিটার্ন আইডি} পাবলিক স্ট্রিং getName () {ফেরতের নাম name পাবলিক স্ট্রিং getDept () {রিটার্ন ডিপ্ট}}

কাস্টম DBOutputWritable:

প্যাকেজ com.input Format.copy আমদানি java.io.DataInput আমদানি java.io.DataOutput আমদানি java.io.IOException আমদানি java.sql.ResultSet আমদানি java.sql.PreparedStatement আমদানি java.sql.SQLException আমদানি org.apache.hadoop.io .Writable আমদানি org.apache.hadoop.mapreduce.lib.db.DBWritable পাবলিক ক্লাস DBOutputWritable প্রয়োগসমূহ লিখনযোগ্য, DBWritable- ব্যক্তিগত স্ট্রিং নাম ব্যক্তিগত int আইডি ব্যক্তিগত স্ট্রিং ডিপ্ট পাবলিক DBOutputWritable (স্ট্রিং নাম, আইটি আই, স্ট্রিং ডিপ্ট) {this.name = নামটি এই আইডি = আইডি এই.ডিপট = ডিপ্ট} পাবলিক শূন্যপদ পড়ুন ফিল্ডস (ডেটা ইনপুট ইন) আইওএক্সেপশন th} পাবলিক শূন্যপদ্ধতি পড়ুন ফিল্ডস (রেজাল্টসেট আরএস) নিক্ষেপ করেছে আইওএক্সেপশন Data} পাবলিক অকার্যকর লিখন (ডাটাআউটপুট আউট) ছুড়েছে আইওএক্সেপশন Prep} পাবলিক শূন্য রাইটিং PS) এসকিউএলএক্সেপশনকে ছুড়ে ফেলে {PS.setString (1, নাম) ps.setInt (2, id) ps.setString (3, বিভাগ)}

ইনপুট সারণী:

ডেটাবেস তৈরি করুন
টেবিল এমপ তৈরি করুন (এমিড ইমট নাল নয়, নাম বর্ণচর (30), ডিপ্ট ভারচার (20), প্রাথমিক কী (এমপিড))
এম্প মানগুলিতে প্রবেশ করান (1, 'অভয়', 'বিকাশ'), (2, 'ব্রুঞ্জেশ', 'পরীক্ষা')
এমপ থেকে * নির্বাচন করুন

কেস 1: মাইএসকিউএল থেকে এইচডিএফএসে স্থানান্তর করুন

প্যাকেজ com.input format.copy আমদানি java.net.URI org.apache.hadoop.fs.FileSystem আমদানি org.apache.hadoop.fs.Path আমদানি org.apache.hadoop.mapreduce আমদানি .জব আমদানি org.apache.hadoop.mapreduce.lib.db.DBC সংজ্ঞা আমদানি org.apache.hadoop.mapreduce.lib.db.DBInput Format আমদানি org.apache.hadoop.mapreduce.lib.output.FileOutput formatmat আমদানি org.apache.oadop .io.Text আমদানি org.apache.hadoop.io.IntWritable পাবলিক ক্লাস MainDbtohdfs {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) ছোঁড়া ব্যতিক্রম {কনফিগারেশন কনফারেন্স = নতুন কনফিগারেশন () DBConfigration.configureDB (কনফার, 'com.mysql.jdbc .ড্রাইভার ', // ড্রাইভার শ্রেণি' জেডিবিসি: মাইএসকিএল: // লোকালহোস্ট: 3306 / এডুরেকা ', // ডিবি ইউআরএল' রুট ', // ব্যবহারকারীর নাম' রুট ') // পাসওয়ার্ড জব জব = নতুন কাজ (কনফিড) কাজ .setJarByClass (MainDbtohdfs.class) job.setMapperClass (Map.class) job.setMapOutputKeyClass (Text.class) job.setMapOutputValueClass (intWritable.class) জব.সেটপুটপ্রেমক্ল্যাশ (ডিবিআইপুটফর্ম্যাটম্যাথ) ফাইলআউটপুটপ্রেট নতুন পাথ (আরোগস [0])) ডিবিআইএনপুটফর্ম্যাট.সেট ইনপুট (চাকরি, ডিবিআইপুটপাট লেখক.ক্লাস, 'এমপ', // ইনপুট টেবিলের নাম নাল, নাল, নতুন স্ট্রিং [] emp 'এমপিড', 'নাম', 'ডিপ্ট'} / / টেবিল কলাম) পাথ পি = নতুন পাথ (আরোগস [0]) ফাইলসিস্টেম fs = ফাইলসিসটেম.জেট (নতুন ইউআরআই (আরগস [0]), কনফারেন্স) fs.delete (p) System.exit (জব.ওইটফোর কমপ্লেশন (সত্য)? 0: 1)}}

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

DBConfigration.configureDB (কনফ, 'com.mysql.jdbc.Driver', // ড্রাইভার শ্রেণি 'jdbc: mysql: // লোকালহস্ত: 3306 / এডুরেকা', // ডিবি url 'রুট', // ব্যবহারকারীর নাম 'রুট') // পাসওয়ার্ড

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

ডিবিআইএনপুটফর্ম্যাট.সেট ইনপুট (জব, ডিবিআইপুটপাট লেখক.ক্লাস, 'এমপ', // ইনপুট টেবিলের নাম নাল, নাল, নতুন স্ট্রিং [] emp 'এমপিড', 'নাম', 'ডিপ্ট'} // টেবিল কলাম)

ম্যাপার

প্যাকেজ com.input Format.copy আমদানি java.io.IOException আমদানি org.apache.hadoop.mapreduce.Mapper আমদানি org.apache.hadoop.io.LongWritable আমদানি org.apache.hadoop.io.Txtxt আমদানি org.apache.hadoop.io .IntWritable পাবলিক ক্লাস ম্যাপ ম্যাপার প্রসারিত {
সুরক্ষিত অকার্যকর মানচিত্র (লং রাইটিংযোগ্য কী, ডিবিআইএনপুটWritable মান, প্রসঙ্গ সিটিএক্স) {চেষ্টা করুন ring স্ট্রিং নাম = মান.getName () ইন্ট্রাইটেবল আইডি = নতুন ইন্ট্রাইটেবল (ভ্যালু.জেটআইডি ()) স্ট্রিং ডিপেট = মান.getDept ()
সিটিএক্স.উইরাইট (নতুন পাঠ্য (নাম + '' + আইডি + '' + বিভাগ), আইডি)
} ক্যাচ (আইওএক্সেপশন ই) {ই.প্রিন্টস্ট্যাকট্রেস ()} ক্যাচ (বাধাপ্রাপ্তি এক্সপ্রেশন ই) {ই.প্রিন্টস্ট্যাকট্রেস ()}}}

রিডুসার: আইডেন্টিটি রিডুসার ব্যবহৃত হয়

কমান্ড চালানোর জন্য:

hadoop jar dbhdfs.jar com.input Format.copy.MainDbtohdfs / dbtohdfs

আউটপুট: মাইএসকিউএল টেবিলটি এইচডিএফএসে স্থানান্তরিত

hadoop dfs -ls / dbtohdfs / *

কেস 2: মাইএসকিউএলের একটি টেবিল থেকে মাইএসকিউএলে অন্যটিতে স্থানান্তর করুন

মাইএসকিউএল আউটপুট টেবিল তৈরি

সারণী কর্মচারী 1 (নাম বারচার (20), আইডি ইনট, ডিপ্ট ভারচর (20%) তৈরি করুন

প্যাকেজ com.input Format.copy আমদানি org.apache.hadoop.conf.Configration আমদানি org.apache.hadoop.mapreduce.Job আমদানি org.apache.hadoop.mapreduce.lib.db.DBConfigration আমদানি org.apache.hadoop.mapreduce.lib .db.DBInput Format আমদানি org.apache.hadoop.mapreduce.lib.db.DBOutput Format আমদানি org.apache.hadoop.io.Txtxt আমদানি org.apache.hadoop.io.IntWritable আমদানি org.apache.hadoop.io. নাল রাইটিংযোগ্য পাবলিক ক্লাস মেনোনেটেবল_ট_অর্ডার_ টেবিল {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) ব্যতিক্রম ছোঁড়ে {কনফিগারেশন কনফারেন্স = নতুন কনফিগারেশন () ডিবিসিফাইগ্রেশন.কমফিগ্রেডিবি (কনফ, 'com.mysql.jdbc.Driver', // ড্রাইভার শ্রেণি 'jdbc: mysql: // লোকালহোস্ট : 3306 / এডুরিকা ', // ডিবি ইউআরএল' রুট ', // ব্যবহারকারীর নাম' রুট ') // পাসওয়ার্ড জব জব = নতুন কাজ (কনফিড) জব.সেটজার জাইক্লাস (মেইননেটেবল_ টু_অর_অর্থ_ টেবিল.ক্লাস) জব.সেটম্যাপারক্লাস (ম্যাপক্লাস) কাজ .setReducerClass (হ্রাস.ক্লাস) জব.সেটম্যাপআউটপুটকিচি ক্লাস (টেক্সট.ক্লাস) জব.সেটম্যাপআউটপুটভ্যালিউক্লাস (ইনট্রাইটেপ্রেস.ক্লাস) জব.সেটআউটপুটকি ক্লাস (ডিবিআউটপুট রাইটিংক্লাস) জব.সেটআউটপুটভ্যালাইক্লাস (নুল lWritable.class) জব.সেট ইনপুটফর্ম্যাটক্লাস (ডিবিআইপুটফর্ম্যাটক্লাস) জব.সেটআউটপুট ফর্ম্যাটক্লাস (ডিবিআউটপুটফর্ম্যাটক্লাস) ডিবিআইপুটফর্ম্যাট.সেটপুট (চাকরি, ডিবিআইপুটপাট লেখক.ক্লাস, 'এমপ', // ইনপুট টেবিলের নাম নাল, নাল, নতুন স্ট্রিং [] emp 'এমিড ',' নাম ',' ডিপ্ট '} // টেবিল কলাম) ডিবিআউটপুট ফরমেট.সেটআউটপুট (কাজ,' কর্মচারী 1 ', // আউটপুট টেবিলের নাম নতুন স্ট্রিং [] name' নাম ',' আইডি ',' ডিপ্ট '} // টেবিল কলাম) System.exit (জব.ওয়েটফর্ম্পলেশন (সত্য)? 0: 1)}}

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

ডিবিআউটপুটফর্ম্যাট.সেটআউটপুট (কাজ, 'কর্মচারী 1', // আউটপুট টেবিলের নাম নতুন স্ট্রিং [] name 'নাম', 'আইডি', 'ডিপ্ট'} // টেবিল কলাম)

ম্যাপার: কেস 1 হিসাবে একই

হ্রাসকারী:

প্যাকেজ com.input Format.copy আমদানি java.io.IOException আমদানি org.apache.hadoop.mapreduce.Reducer আমদানি org.apache.hadoop.io.Txtxt আমদানি org.apache.hadoop.io.IntWritable আমদানি org.apache.hadoop.io .নাল রাইটিংযোগ্য পাবলিক ক্লাস হ্রাস প্রসারিত করে রেডুসার {সুরক্ষিত শূন্যতা হ্রাস (পাঠ্য কী, স্বাদযুক্ত মান, প্রসঙ্গ সিটিএক্স) sum অন্তর্ভুক্ত = 0 স্ট্রিং লাইন [] = কী.টোস্ট্রিং ()। বিভক্ত ('') চেষ্টা করুন t ctx.writ (নতুন ডিবিআউটপুট রাইটেবল (লাইন [0]। টোস্ট্রিং (), পূর্ণসংখ্যা.পার্সইন্ট (লাইন [1]। টু স্ট্রিং ()), লাইন [2]। টোস্ট্রিং ()), নাল রাইটেবল.জেট ())} ক্যাচ (আইওএক্সেপশন ই) {ই.প্রিন্টস্ট্যাকট্রেস ()} ক্যাচ (বাধাপ্রাপ্ত ধারণা) {ই.প্রিন্টস্ট্যাকট্রেস ()}}}

কমান্ড টু রান:

hadoop jar dbhdfs.jar com.input Format.copy.Maneonetable_to_other_table

আউটপুট: মাইএসকিউএল এর ইএমপি টেবিল থেকে মাইএসকিউএলে অন্য টেবিল কর্মচারী 1 এ স্থানান্তরিত ডেটা

কেস 3: মাইএসকিউএলে টেবিল থেকে নোএসকিউএল (এইচবিএস) সারণিতে স্থানান্তর করুন

এসকিউএল টেবিল থেকে আউটপুট সংযুক্ত করতে Hbase টেবিল তৈরি করা:

'কর্মচারী', 'অফিসিয়াল_ইনফো' তৈরি করুন

ড্রাইভার শ্রেণি:

প্যাকেজ Dbtohbase আমদানি org.apache.hadoop.conf.Configration আমদানি org.apache.hadoop.mapreduce.Job আমদানি org.apache.hadoop.mapreduce.lib.db.DBConfigration আমদানি org.apache.hadoop.mapreduce.lib.db.Dn.Bnbig org.apache.hadoop.hbase.mapreduce.TableOutput Format Import আমদানি org.apache.hadoop.hbase.HBaseConigig Import আমদানি org.apache.hadoop.hbase.client.HTable আমদানি org.apache.hadoop.hbase.client.HTableInterface Import আমদানি org.apache.hadoop.hbase.client .hadoop.hbase.io.ImmutableBytesWritable আমদানি org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil আমদানি org.apache.hadoop.io.Text পাবলিক ক্লাস মেইনডিবিটোহবেজ {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) কনফ্রেশন { HBaseConfigration.create () HTableInterface mytable = new HTable (conf, 'emp') DBConfigration.configureDB (কনফারেন্স, 'com.mysql.jdbc.Driver', // ড্রাইভার শ্রেণি 'jdbc: mysql: // লোকালহস্ত: 3306 / edureka' , // ডিবি ইউআরএল 'রুট', // ব্যবহারকারীর নাম 'রুট') // পাসওয়ার্ড জব জব = নতুন কাজ (কনফারেন্স, 'ডিবিটোহ্বেস') জব.সেটজারবারক্লাস (মেইনডিবিটিওএইচবিসিএল) জব.এস #MapperClass (Map.class) job.setMapOutputKeyClass (ImmutableBytesWritable.class) জব.সেটম্যাপআউটপুটভ্যালিউক্লাস (টেক্সট.ক্লাস) টেবিলম্যাপ্রেডসUtil.initTableReducerJob ('কর্মচারী', Reduce.class, চাকরী) কাজ.সেটপুটআউটপ্লেটমেটসক্লাসপ্লেটেমেটসক্লাসপ্লেটেমেটসক্লাসের জন্যআউটপ্লেটমেটসক্লাস বর্গ) ডিবিআইএনপুটফর্ম্যাট.সেট ইনপুট (জব, ডিবিআইপুটপাট লেখক.ক্লাস, 'এমপ', // ইনপুট টেবিলের নাম নাল, নাল, নতুন স্ট্রিং [] emp 'এমপিড', 'নাম', 'ডিপ্ট'} // টেবিল কলাম) System.exit (জব.ওয়েটফর্ম্পলেশন (সত্য) 0: 1)}}

এই কোডের টুকরোটি আপনাকে আউটপুট কী শ্রেণিটি কনফিগার করতে দেয় যা এইচবিএসের ক্ষেত্রে ইমটুটিবাইটস লিখনযোগ্য

জব.সেটম্যাপআউটপুটকিকি ক্লাস (অপরিবর্তনযোগ্য বাইটস লিখনক্লাস) জব.সেটম্যাপআউটপুটভ্যালু ক্লাস (টেক্সট.ক্লাস)

এখানে আমরা টেবিতে অভিনয় করার জন্য এইচবিএস টেবিলের নাম এবং রিডিউসারটি পার করছি।

টেবিলম্যাপ্রেডিউটিল.ইনটিইটেবল-রেডুসারজব ('কর্মচারী', হ্রাস কমানো, কাজ)

ম্যাপার:

প্যাকেজ Dbtohbase আমদানি java.io.IOException আমদানি org.apache.hadoop.mapreduce.Mapper আমদানি org.apache.hadoop.hbase.io.ImmutableBytesWritable আমদানি org.apache.hadoop.hbase.util.Bytes আমদানি org.apache.hadoop.io .লংঘাইরেটেবল আমদানি org.apache.hadoop.io.Txtxt আমদানি org.apache.hadoop.io.IntWritable পাবলিক বর্গ মানচিত্র মেপার-প্রাইভেট ইনট্রাইটেবল এক = নতুন অন্তর্লিখনযোগ্য (1) সুরক্ষিত অকার্যকর মানচিত্র (লং রাইটিং আইডি, ডিবিআইএনপুটWritable মান, প্রসঙ্গ প্রসঙ্গ) {চেষ্টা করুন {স্ট্রিং লাইন = মান.getName () স্ট্রিং সিডি = মান.getId () + '' স্ট্রিং ডিপ্ট = মান.getDept () প্রসঙ্গ w রাইটিং (নতুন ইমট্যাবলবাইটস লিখন (বাইটস.টোবাইটস (সিডি)), নতুন পাঠ্য (লাইন + ' '+ ডিপ্ট))} ক্যাচ (আইওএক্সেপশন ই) {ই.প্রিন্টস্ট্যাকট্রেস ()} ক্যাচ (বাধাপ্রাপ্তি এক্সপ্রেশন ই) {ই.প্রিন্ট স্ট্যাকট্রেস ()}}}

এই কোডের টুকরোতে আমরা ডিবিনপুট্রাইটেবল ক্লাসের প্রাপ্তদের কাছ থেকে মান নিয়ে যাচ্ছি এবং তারপরে এগুলি পাস করছি
ইমট্যুয়েটবাইটস লিখনযোগ্য যাতে তারা বাইট্রিয়েটবল ফর্মের হ্রাসটি পৌঁছে দেয় যা Hbase বুঝতে পারে।

স্ট্রিং লাইন = মান.getName () স্ট্রিং সিডি = মান.getId () + '' স্ট্রিং ডিপ্ট = মান.getDept () প্রসঙ্গ w রাইটিং (নতুন ইমট্যাবলবাইটস লিখন (বাইটস.টোবাইটস (সিডি)), নতুন পাঠ্য (লাইন + '' + ডিপ্ট ))

হ্রাসকারী:

প্যাকেজ Dbtohbase আমদানি java.io.IOException আমদানি org.apache.hadoop.hbase.client.Put আমদানি org.apache.hadoop.hbase.io.ImmutableBytesWritable আমদানি org.apache.hadoop.hbase.mapreduce.TableReducer আমদানি org.apache.had .hbase.util.Bytes আমদানি org.apache.hadoop.io.Text পাবলিক ক্লাস হ্রাস প্রসারিত করে টেবিলরেডুসার {সার্বজনীন শূন্যতা হ্রাস (অপরিবর্তনযোগ্য বাইটস লিখনযোগ্য, মানযোগ্য প্রসঙ্গ) আইওএক্সেপশন, বাধাগ্রস্ত এক্সপ্রেশন {স্ট্রিং [] কারণ = নাল // লুপ মান (পাঠ্য ভাল: মান) জন্য {কারণ = Val.toString ()। বিভক্ত ('') Put // এইচবেস পুট পুট = নতুন পুট (কী.জেট ()) put.add (বাইটস.টোবাইটস ('অফিসিয়াল_ইনফো') ), বাইটস.টোবাইটস ('নাম'), বাইটস.টোবাইটস (কারণ [0])) পুট অ্যাড (বাইটস.টোবাইটস ('অফিসিয়াল_ইনফো'), বাইটস.টোবাইটস ('বিভাগ'), বাইটস.টোবাইটস (কারণ [1 ])) প্রসঙ্গ। রাইট (কী, পুট)}

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

পুট = নতুন পুট (কী.গেট ()) put.add (বাইটস.টোবাইটস ('অফিসিয়াল_ইনফো'), বাইটস.টোবাইটস ('নাম'), বাইটস.টোবাইটস (কারণ [0]) পুট অ্যাড (বাইটস) দিন। টুবাইটস ('অফিসিয়াল_ইনফো'), বাইটস.টোবাইটস ('বিভাগ'), বাইটস.টোবাইটস (কারণ [1])) প্রসঙ্গ.রাইট (কী, পুট)

হেবাসে স্থানান্তরিত ডেটা:

কর্মচারী স্ক্যান

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

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

আপনার মন্তব্য, প্রশ্ন বা কোনও প্রতিক্রিয়া পোস্ট করা। আমি আপনার কাছ থেকে শুনতে চাই.

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা আপনার কাছে ফিরে আসব।

সম্পর্কিত পোস্ট: