SQL இலிருந்து NoSQL தரவுத்தளத்திற்கு தரவை மாற்ற DBInputFormat



இந்த வலைப்பதிவின் குறிக்கோள் என்னவென்றால், SQL தரவுத்தளங்களிலிருந்து தரவை HDFS க்கு எவ்வாறு மாற்றுவது, SQL தரவுத்தளங்களிலிருந்து தரவை NoSQL தரவுத்தளங்களுக்கு எவ்வாறு மாற்றுவது என்பதைக் கற்றுக்கொள்வது.

இந்த வலைப்பதிவில் ஹடூப் தொழில்நுட்பத்தின் மிக முக்கியமான கூறுகளில் ஒன்றான திறன்களையும் சாத்தியங்களையும் ஆராய்வோம், அதாவது மேப்ரூட்.

இன்று, நிறுவனங்கள் பெரிய தரவை திறம்பட கையாளும் திறன்களின் காரணமாக தரவு சேமிப்பிற்கான முதல் தேர்வாக ஹடூப் கட்டமைப்பை ஏற்றுக்கொள்கின்றன. ஆனால் தரவு பல்துறை மற்றும் பல்வேறு கட்டமைப்புகள் மற்றும் வடிவங்களில் உள்ளது என்பதையும் நாங்கள் அறிவோம். இவ்வளவு பெரிய வகையான தரவுகளையும் அதன் வெவ்வேறு வடிவங்களையும் கட்டுப்படுத்த அனைத்து வகைகளுக்கும் இடமளிக்கும் ஒரு பொறிமுறையும் இருக்க வேண்டும், ஆனால் இன்னும் பயனுள்ள மற்றும் நிலையான முடிவைத் தரும்.





ஹடூப் கட்டமைப்பில் மிகவும் சக்திவாய்ந்த கூறு மேப் ரெட்யூஸ் ஆகும், இது தரவு மற்றும் அதன் கட்டமைப்பின் மீதான கட்டுப்பாட்டை அதன் மற்ற சகாக்களை விட சிறப்பாக வழங்க முடியும். இதற்கு கற்றல் வளைவின் மேல்நிலை மற்றும் நிரலாக்க சிக்கலானது தேவைப்பட்டாலும், இந்த சிக்கல்களை நீங்கள் கையாள முடிந்தால், நிச்சயமாக எந்தவொரு தரவையும் ஹடூப் மூலம் கையாள முடியும்.

MapReduce கட்டமைப்பானது அதன் அனைத்து செயலாக்க பணிகளையும் அடிப்படையில் இரண்டு கட்டங்களாக உடைக்கிறது: வரைபடம் மற்றும் குறைத்தல்.



இந்த கட்டங்களுக்கு உங்கள் மூல தரவைத் தயாரிக்க சில அடிப்படை வகுப்புகள் மற்றும் இடைமுகங்களைப் புரிந்து கொள்ள வேண்டும். இந்த மறு செயலாக்கத்திற்கான சூப்பர் வகுப்பு உள்ளீட்டு வடிவமைப்பு.

தி உள்ளீட்டு வடிவமைப்பு ஹடூப் மேப் ரெட்யூஸ் ஏபிஐயின் முக்கிய வகுப்புகளில் ஒன்று வகுப்பு. இரண்டு முக்கிய விஷயங்களை வரையறுக்க இந்த வகுப்பு பொறுப்பு:

  • தரவு பிரிக்கிறது
  • பதிவு வாசகர்

தரவு பிளவு தனிப்பட்ட வரைபட பணிகளின் அளவு மற்றும் அதன் சாத்தியமான செயல்படுத்தல் சேவையகம் இரண்டையும் வரையறுக்கும் ஹடூப் மேப்ரூட் கட்டமைப்பில் உள்ள ஒரு அடிப்படை கருத்து. தி பதிவு வாசகர் உள்ளீட்டு கோப்பிலிருந்து உண்மையான வாசிப்பு பதிவுகள் மற்றும் அவற்றை (விசை / மதிப்பு ஜோடிகளாக) மேப்பருக்கு சமர்ப்பிக்க பொறுப்பு.



பிளவுகளின் எண்ணிக்கையின் அடிப்படையில் மேப்பர்களின் எண்ணிக்கை தீர்மானிக்கப்படுகிறது. பிளவுகளை உருவாக்குவது InputFormat இன் வேலை. பெரும்பாலான நேரம் பிளவு அளவு தொகுதி அளவிற்கு சமம், ஆனால் எப்போதும் HDFS தொகுதி அளவின் அடிப்படையில் பிளவுகள் உருவாக்கப்படும். இது உங்கள் InputFormat இன் getSplits () முறை எவ்வாறு மீறப்பட்டது என்பதைப் பொறுத்தது.

எம்.ஆர் பிளவுக்கும் எச்.டி.எஃப்.எஸ் தொகுதிக்கும் ஒரு அடிப்படை வேறுபாடு உள்ளது. ஒரு தொகுதி என்பது தரவின் இயல்பான துண்டாகும், ஒரு பிளவு என்பது ஒரு மேப்பர் படிக்கும் ஒரு தர்க்கரீதியான துண்டாகும். ஒரு பிளவு உள்ளீட்டுத் தரவைக் கொண்டிருக்கவில்லை, அது தரவின் குறிப்பு அல்லது முகவரியைக் கொண்டுள்ளது. ஒரு பிளவு அடிப்படையில் இரண்டு விஷயங்களைக் கொண்டுள்ளது: பைட்டுகளில் நீளம் மற்றும் சேமிப்பிட இருப்பிடங்களின் தொகுப்பு, அவை வெறும் சரங்களாகும்.

இதை நன்கு புரிந்துகொள்ள, ஒரு எடுத்துக்காட்டு எடுத்துக்கொள்வோம்: MR ஐப் பயன்படுத்தி உங்கள் MySQL இல் சேமிக்கப்பட்ட தரவை செயலாக்குதல். இந்த விஷயத்தில் தொகுதிகள் பற்றிய கருத்து எதுவும் இல்லை என்பதால், கோட்பாடு: “எச்.டி.எஃப்.எஸ் தொகுதியின் அடிப்படையில் பிளவுகள் எப்போதும் உருவாக்கப்படுகின்றன”,தோல்வியுற்றது. உங்கள் MySQL அட்டவணையில் வரிசைகளின் வரம்புகளின் அடிப்படையில் பிளவுகளை உருவாக்குவது ஒரு சாத்தியமாகும் (மேலும் இது ஒரு தொடர்புடைய தரவுத்தளங்களிலிருந்து தரவைப் படிப்பதற்கான உள்ளீட்டு வடிவமான DBInputFormat செய்கிறது). நாம் n வரிசைகளைக் கொண்ட k எண்ணிக்கையிலான பிளவுகளைக் கொண்டிருக்கலாம்.

FileInputFormat ஐ அடிப்படையாகக் கொண்ட InputFormats க்கு மட்டுமே (கோப்புகளில் சேமிக்கப்பட்ட தரவைக் கையாளுவதற்கான ஒரு InputFormat) உள்ளீட்டு கோப்புகளின் மொத்த அளவு, பைட்டுகளில், பிளவுகள் உருவாக்கப்படுகின்றன. இருப்பினும், உள்ளீட்டு கோப்புகளின் கோப்பு முறைமை தடுப்பு உள்ளீடு பிளவுகளுக்கு மேல் வரம்பாக கருதப்படுகிறது. உங்களிடம் HDFS தொகுதி அளவை விட சிறிய கோப்பு இருந்தால், அந்த கோப்பிற்கு 1 மேப்பரை மட்டுமே பெறுவீர்கள். நீங்கள் வேறுபட்ட நடத்தைகளைக் கொண்டிருக்க விரும்பினால், நீங்கள் mapred.min.split.size ஐப் பயன்படுத்தலாம். ஆனால் அது மீண்டும் உங்கள் InputFormat இன் getSplits () ஐ மட்டுமே சார்ந்துள்ளது.

Org.apache.hadoop.mapreduce.lib.input தொகுப்பின் கீழ் முன்பே இருக்கும் பல உள்ளீட்டு வடிவங்கள் எங்களிடம் உள்ளன.

CombineFileInputFormat.html

ஜாவாவில் ஒரு நிரலை எப்படி முடிப்பது

CombineFileRecordReader.html

CombineFileRecordReaderWrapper.html

CombineFileSplit.html

CombineSequenceFileInputFormat.html

CombineTextInputFormat.html

FileInputFormat.html

FileInputFormatCounter.html

FileSplit.html

நிலையான நீளம்இன்புட்ஃபார்மட்.ஹெச்.எம்

தவறான InputException.html

KeyValueLineRecordReader.html

KeyValueTextInputFormat.html

மல்டிபிள்இன்புட்ஸ். Html

NLineInputFormat.html

SequenceFileAsBinaryInputFormat.html

SequenceFileAsTextInputFormat.html

SequenceFileAsTextRecordReader.html

SequenceFileInputFilter.html

SequenceFileInputFormat.html

SequenceFileRecordReader.html

TextInputFormat.html

இயல்புநிலை TextInputFormat.

இதேபோல், எங்களிடம் பல வெளியீட்டு வடிவங்கள் உள்ளன, அவை குறைப்பவர்களிடமிருந்து தரவைப் படித்து அதை HDFS இல் சேமிக்கின்றன:

FileOutputCommitter.html

FileOutputFormat.html

FileOutputFormatCounter.html

FilterOutputFormat.html

LazyOutputFormat.html

MapFileOutputFormat.html

MultipleOutputs.html

NullOutputFormat.html

PartialFileOutputCommitter.html

PartialOutputCommitter.html

SequenceFileAsBinaryOutputFormat.html

SequenceFileOutputFormat.html

TextOutputFormat.html

இயல்புநிலை TextOutputFormat.

இந்த வலைப்பதிவைப் படித்து முடிக்கும் நேரத்தில், நீங்கள் கற்றுக்கொண்டிருப்பீர்கள்:

  • வரைபடத்தைக் குறைக்கும் நிரலை எவ்வாறு எழுதுவது
  • மேப்ரெடூஸில் கிடைக்கும் பல்வேறு வகையான உள்ளீட்டு வடிவங்களைப் பற்றி
  • InputFormats இன் தேவை என்ன
  • தனிப்பயன் உள்ளீட்டு வடிவங்களை எவ்வாறு எழுதுவது
  • SQL தரவுத்தளங்களிலிருந்து தரவை HDFS க்கு மாற்றுவது எப்படி
  • SQL (இங்கே MySQL) தரவுத்தளங்களிலிருந்து NoSQL தரவுத்தளங்களுக்கு தரவை மாற்றுவது எப்படி (இங்கே Hbase)
  • SQL தரவுத்தளங்களில் ஒரு SQL தரவுத்தளங்களிலிருந்து தரவை எவ்வாறு மாற்றுவது (அதே SQL தரவுத்தளத்தில் இதைச் செய்தால் இது மிகவும் முக்கியமானதாக இருக்காது. இருப்பினும், அதைப் பற்றிய அறிவைப் பெறுவதில் தவறில்லை. உங்களுக்கு ஒருபோதும் தெரியாது அது எவ்வாறு பயன்பாட்டுக்கு வர முடியும்)

முன்நிபந்தனை:

  • ஹடூப் முன்பே நிறுவப்பட்டது
  • SQL முன்பே நிறுவப்பட்டுள்ளது
  • Hbase முன்பே நிறுவப்பட்டது
  • ஜாவா அடிப்படை புரிதல்
  • MapReduce அறிவை
  • ஹடூப் கட்டமைப்பின் அடிப்படை அறிவு

நாங்கள் இங்கே தீர்க்கப் போகும் சிக்கல் அறிக்கையைப் புரிந்துகொள்வோம்:

எங்கள் தொடர்புடைய தரவுத்தள எடுரேகாவில் MySQL DB இல் ஒரு பணியாளர் அட்டவணை உள்ளது. இப்போது வணிகத் தேவைக்கேற்ப, தொடர்புடைய டி.பியில் கிடைக்கும் எல்லா தரவையும் ஹடூப் கோப்பு முறைமைக்கு மாற்ற வேண்டும், அதாவது எச்.டி.எஃப்.எஸ், ஹெஸ்பேஸ் எனப்படும் NoSQL டி.பி.

இந்த பணியைச் செய்ய எங்களுக்கு பல விருப்பங்கள் உள்ளன:

  • ஸ்கூப்
  • ஃப்ளூம்
  • வரைபடம்

இப்போது, ​​இந்த செயல்பாட்டிற்கு வேறு எந்த கருவியையும் நிறுவவும் கட்டமைக்கவும் நீங்கள் விரும்பவில்லை. ஹடூப்பின் செயலாக்க கட்டமைப்பான மேப்ரூட்யூஸ் என்ற ஒரே ஒரு விருப்பம் உங்களிடம் உள்ளது. MapReduce கட்டமைப்பானது பரிமாற்றும்போது தரவின் மீது முழு கட்டுப்பாட்டையும் உங்களுக்கு வழங்கும். நீங்கள் நெடுவரிசைகளை கையாளலாம் மற்றும் இரண்டு இலக்கு இடங்களில் ஏதேனும் ஒன்றை நேரடியாக வைக்கலாம்.

குறிப்பு:

  • MySQL அட்டவணையில் இருந்து அட்டவணைகளைப் பெற ஹடூப்பின் வகுப்பறையில் MySQL இணைப்பியை பதிவிறக்கம் செய்து வைக்க வேண்டும். இதைச் செய்ய இணைப்பான் com.mysql.jdbc_5.1.5.jar ஐ பதிவிறக்கம் செய்து அதை Hadoop_home / share / Hadoop / MaPreduce / lib கோப்பகத்தின் கீழ் வைக்கவும்.
cp பதிவிறக்கங்கள் / com.mysql.jdbc_5.1.5.jar $ HADOOP_HOME / share / hadoop / mapreduce / lib /
  • மேலும், உங்கள் எம்.ஆர் நிரல் அணுகல் Hbase ஐ உருவாக்க அனைத்து Hbase ஜாடிகளையும் ஹடூப் வகுப்பின் கீழ் வைக்கவும். இதைச் செய்ய, பின்வரும் கட்டளையை இயக்கவும் :
cp $ HBASE_HOME / lib / * $ HADOOP_HOME / share / hadoop / mapreduce / lib /

இந்த பணியை நிறைவேற்ற நான் பயன்படுத்திய மென்பொருள் பதிப்புகள்:

  • ஹடூப் -2.3.0
  • HBase 0.98.9-Hadoop2
  • கிரகண நிலவு

எந்தவொரு பொருந்தக்கூடிய சிக்கலிலும் நிரலைத் தவிர்ப்பதற்காக, இதேபோன்ற சூழலுடன் கட்டளையை இயக்க எனது வாசகர்களை பரிந்துரைக்கிறேன்.

தனிப்பயன் DBInputWritable:

தொகுப்பு com.inputFormat.copy இறக்குமதி java.io.DataInput இறக்குமதி java.io.DataOutput இறக்குமதி java.io.IOException இறக்குமதி java.sql.ResultSet இறக்குமதி java.sql.PreparedStatement import java.sql.SQLException இறக்குமதி org.apache.hadoop.io. எழுதக்கூடிய இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DB எழுதக்கூடிய, DBWritable {private int id private string string, dept public void readFields (DataInput in) IOException rows} பொது வெற்றிட வாசிப்பு புலங்கள் (ResultSet rs) SQLException ஐ வீசுகிறது // ரிசல்ட் செட் பொருள் ஒரு SQL அறிக்கையிலிருந்து திரும்பிய தரவைக் குறிக்கிறது {id = rs.getInt (1) name = rs.getString (2) dept = rs.getString (3)} பொது வெற்றிட எழுதுதல் (DataOutput out) IOException வீசுகிறது { } பொது வெற்றிட எழுதுதல் (தயாரிக்கப்பட்ட நிலை ps) SQLException ஐ வீசுகிறது {ps.setInt (1, id) ps.setString (2, பெயர்) ps.setString (3, துறை)} public int getId () {return id} public string getName () {பெயர் திரும்ப} பொது சரம் getDept () {திரும்ப துறை}}

தனிப்பயன் DBOutputWritable:

தொகுப்பு com.inputFormat.copy இறக்குமதி java.io.DataInput இறக்குமதி java.io.DataOutput இறக்குமதி java.io.IOException இறக்குமதி java.sql.ResultSet இறக்குமதி java.sql.PreparedStatement import java.sql.SQLException இறக்குமதி org.apache.hadoop.io. எழுதக்கூடிய இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DB எழுதக்கூடிய, DBWritable {தனியார் சரம் பெயர் தனியார் எண்ணாக ஐடி தனியார் சரம் துறை பொது DBOutputWritable (சரம் பெயர், எண்ணாக ஐடி, சரம் துறை) {this.name = name this.id = id this.dept = dept} public void readFields (DataInput in) IOException ஐ வீசுகிறது}} பொது வெற்றிட வாசிப்பு புலங்கள் (ResultSet rs) SQLException ஐ வீசுகிறது}} பொது வெற்றிட எழுதுதல் (DataOutput out) IOException rows} பொது வெற்றிட எழுதுதல் (PreparedStatement ps) SQLException வீசுகிறது {ps.setString (1, பெயர்) ps.setInt (2, id) ps.setString (3, dept)}}

உள்ளீட்டு அட்டவணை:

தரவுத்தள எடுரேகாவை உருவாக்கவும்
அட்டவணை எம்பை உருவாக்கு (empid int not null, name varchar (30), dept varchar (20), முதன்மை விசை (empid))
எம்ப் மதிப்புகளில் செருகவும் (1, 'அபய்', 'டெவலப்மென்ட்'), (2, 'ப்ருண்டேஷ்', 'டெஸ்ட்')
emp இலிருந்து * தேர்ந்தெடுக்கவும்

வழக்கு 1: MySQL இலிருந்து HDFS க்கு மாற்றவும்

தொகுப்பு com.inputFormat.copy இறக்குமதி java.net.URI இறக்குமதி org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.FileSystem இறக்குமதி org.apache.hadoop.fs.Path இறக்குமதி org.apache.hadoop.mapreduce .ஜோப் இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DBConfiguration இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DBInputFormat இறக்குமதி org.apache.hadoop.mapreduce.lib.output.FileOutputFormat இறக்குமதி org.apache.hadoop .io.Text இறக்குமதி org.apache.hadoop.io.IntWritable பொது வகுப்பு MainDbtohdfs {public static void main (string [] args) விதிவிலக்கு வீசுகிறது {கட்டமைப்பு conf = புதிய கட்டமைப்பு () DBConfiguration.configureDB (conf, 'com.mysql.jdbc . டிரைவர் ', // இயக்கி வகுப்பு' jdbc: mysql: // localhost: 3306 / edureka ', // db url' root ', // பயனர் பெயர்' root ') // கடவுச்சொல் வேலை வேலை = புதிய வேலை (conf) வேலை .setJarByClass (MainDbtohdfs.class) job.setMapperClass (Map.class) job.setMapOutputKeyClass (Text.class) job.setMapOutputValueClass (IntWritable.class) job.setInputFormatClass (DBInputFormat) புதிய பாதை (args [0])) DBInputFormat.setInput (வேலை, DBInputWritable.class, 'emp', // உள்ளீட்டு அட்டவணை பெயர் பூஜ்ய, பூஜ்ய, புதிய சரம் [] emp 'empid', 'name', 'dept'} / / அட்டவணை நெடுவரிசைகள்) பாதை p = புதிய பாதை (args [0]) FileSystem fs = FileSystem.get (புதிய URI (args [0]), conf) fs.delete (p) System.exit (job.nightForCompletion (true)? 0: 1)}}

எங்கள் மூல SQL DB ஐ அணுக உள்ளீட்டு வடிவமைப்பைத் தயாரிக்க அல்லது உள்ளமைக்க இந்த குறியீடு துண்டு அனுமதிக்கிறது. அளவுருவில் இயக்கி வகுப்பு அடங்கும், URL இல் SQL தரவுத்தளத்தின் முகவரி, அதன் பயனர்பெயர் மற்றும் கடவுச்சொல் உள்ளது.

DBConfiguration.configureDB (conf, 'com.mysql.jdbc.Driver', // இயக்கி வகுப்பு 'jdbc: mysql: // localhost: 3306 / edureka', // db url 'root', // பயனர் பெயர் 'root') //கடவுச்சொல்

இந்த குறியீடு தரவுத்தளத்தில் உள்ள அட்டவணைகளின் விவரங்களை அனுப்பி அதை வேலை பொருளில் அமைக்க உதவுகிறது. அளவுருக்கள் நிச்சயமாக வேலை உதாரணம், தனிப்பயன் எழுதக்கூடிய வகுப்பு, இது DBWritable இடைமுகத்தை செயல்படுத்த வேண்டும், மூல அட்டவணை பெயர், வேறு ஏதேனும் பூஜ்யமாக இருந்தால் நிலை, வேறு எந்த வரிசைப்படுத்தல் அளவுருக்கள் பூஜ்யம், முறையே அட்டவணை நெடுவரிசைகளின் பட்டியல்.

DBInputFormat.setInput (வேலை, DBInputWritable.class, 'emp', // உள்ளீட்டு அட்டவணை பெயர் பூஜ்ய, பூஜ்ய, புதிய சரம் [] {'empid', 'name', 'dept' table // table columns)

மேப்பர்

தொகுப்பு com.inputFormat.copy இறக்குமதி java.io.IOException இறக்குமதி org.apache.hadoop.mapreduce.Mapper இறக்குமதி org.apache.hadoop.io.LongWritable import org.apache.hadoop.io.Text import org.apache.hadoop.io .இன்ரைட்டபிள் பொது வகுப்பு வரைபடம் மேப்பரை நீட்டிக்கிறது {
பாதுகாக்கப்பட்ட வெற்றிட வரைபடம் (LongWritable key, DBInputWritable value, Context ctx) {try {string name = value.getName () IntWritable id = new IntWritable (value.getId ()) string dept = value.getDept ()
ctx.write (புதிய உரை (பெயர் + '' + ஐடி + '' + துறை), ஐடி)
} பிடிக்கவும் (IOException e) {e.printStackTrace ()} catch (InterruptException e) {e.printStackTrace ()}}}

குறைப்பான்: அடையாள குறைப்பான் பயன்படுத்தப்படுகிறது

இயக்க கட்டளை:

hadoop jar dbhdfs.jar com.inputFormat.copy.MainDbtohdfs / dbtohdfs

வெளியீடு: MySQL அட்டவணை HDFS க்கு மாற்றப்பட்டது

hadoop dfs -ls / dbtohdfs / *

வழக்கு 2: MySQL இல் ஒரு அட்டவணையில் இருந்து மற்றொரு அட்டவணையில் MySQL இல் மாற்றவும்

MySQL இல் வெளியீட்டு அட்டவணையை உருவாக்குகிறது

அட்டவணை ஊழியர் 1 ஐ உருவாக்கவும் (பெயர் வார்சார் (20), ஐடி எண்ணாக, துறை வார்சார் (20))

தொகுப்பு com.inputFormat.copy இறக்குமதி org.apache.hadoop.conf.Configuration import org.apache.hadoop.mapreduce.Job இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DBConfiguration இறக்குமதி org.apache.hadoop.mapreduce.lib .db.DBInputFormat இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DBOutputFormat இறக்குமதி org.apache.hadoop.io.Text import org.apache.hadoop.io.IntWritable import org.apache.hadoop.io.NullWritable பொது வகுப்பு Mainonetable_to_other_table {பொது நிலையான வெற்றிட மெயின் (சரம் [] args) விதிவிலக்கு வீசுகிறது {கட்டமைப்பு conf = புதிய கட்டமைப்பு () DBConfiguration.configureDB (conf, 'com.mysql.jdbc.Driver', // இயக்கி வகுப்பு 'jdbc: mysql: // localhost : 3306 / edureka ', // db url' root ', // பயனர் பெயர்' root ') // கடவுச்சொல் வேலை வேலை = புதிய வேலை (conf) job.setJarByClass (Mainonetable_to_other_table.class) job.setMapperClass (Map.class) வேலை .setReducerClass (Reduce.class) job.setMapOutputKeyClass (Text.class) job.setMapOutputValueClass (IntWritable.class) job.setOutputKeyClass (DBOutputWritable.class) job.setOutputValueClass (Nul lWritable.class) job.setInputFormatClass (DBInputFormat.class) job.setOutputFormatClass (DBOutputFormat.class) DBInputFormat.setInput (வேலை, DBInputWritable.class, 'emp', // உள்ளீட்டு அட்டவணை பெயர் பூஜ்யம், பூஜ்ய, புதிய ',' பெயர் ',' dept 'table // அட்டவணை நெடுவரிசைகள்) DBOutputFormat.setOutput (வேலை,' பணியாளர் 1 ', // வெளியீட்டு அட்டவணை பெயர் புதிய சரம் [] {' பெயர் ',' ஐடி ',' துறை '} // அட்டவணை நெடுவரிசைகள்) System.exit (job.nightForCompletion (உண்மை)? 0: 1)}}

இந்த குறியீடு துண்டு வெளியீட்டு அட்டவணை பெயரை SQL DB இல் கட்டமைக்க அனுமதிக்கிறது. அளவுருக்கள் முறையே வேலை நிகழ்வு, வெளியீட்டு அட்டவணை பெயர் மற்றும் வெளியீட்டு நெடுவரிசை பெயர்கள்.

DBOutputFormat.setOutput (வேலை, 'பணியாளர் 1', // வெளியீட்டு அட்டவணை பெயர் புதிய சரம் [] name 'பெயர்', 'ஐடி', 'துறை' table // அட்டவணை நெடுவரிசைகள்)

மேப்பர்: வழக்கு 1 போலவே

குறைப்பவர்:

தொகுப்பு com.inputFormat.copy இறக்குமதி java.io.IOException இறக்குமதி org.apache.hadoop.mapreduce.Reducer import org.apache.hadoop.io.Text import org.apache.hadoop.io.IntWritable import org.apache.hadoop.io .நல்ரைட்டபிள் பொது வகுப்பு குறைத்தல் குறைப்பு {பாதுகாக்கப்பட்ட வெற்றிட குறைப்பு (உரை விசை, மாற்றக்கூடிய மதிப்புகள், சூழல் சி.டி.எக்ஸ்) {int sum = 0 சரம் வரி [] = key.toString (). பிளவு ('') முயற்சிக்கவும் {ctx.write (புதிய DBOutputWritable (வரி [0] .toString (), Integer.parseInt (வரி [1] .toString ()), வரி [2] .toString ()), NullWritable.get ())} பிடிக்கவும் (IOException e) {e.printStackTrace ()} பிடிக்கவும் (குறுக்கீடு எக்ஸ்செப்சன் இ) {e.printStackTrace ()}}}

இயக்க கட்டளை:

hadoop jar dbhdfs.jar com.inputFormat.copy.Mainonetable_to_other_table

வெளியீடு: MySQL இல் உள்ள EMP அட்டவணையில் இருந்து மற்றொரு அட்டவணைக்கு MySQL இல் பணியாளர் 1 க்கு மாற்றப்பட்டது

வழக்கு 3: MySQL இல் உள்ள அட்டவணையில் இருந்து NoSQL (Hbase) அட்டவணைக்கு மாற்றவும்

SQL அட்டவணையிலிருந்து வெளியீட்டைப் பொருத்துவதற்கு Hbase அட்டவணையை உருவாக்குதல்:

'பணியாளர்', 'official_info' ஐ உருவாக்கவும்

டிரைவர் வகுப்பு:

தொகுப்பு Dbtohbase இறக்குமதி org.apache.hadoop.conf.Configuration import org.apache.hadoop.mapreduce.Job இறக்குமதி org.apache.hadoop.mapreduce.lib.db.DBConfiguration import org.apache.hadoop.mapreduce.lib.db.DBInputFormat org.apache.hadoop.hbase.mapreduce.TableOutputFormat இறக்குமதி org.apache.hadoop.hbase.HBaseConfiguration இறக்குமதி org.apache.hadoop.hbase.client.HTable இறக்குமதி org.apache.hadoop.hbase.client.HTableInterface இறக்குமதி இறக்குமதி .hadoop.hbase.io.ImmutableBytesWritable import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil import org.apache.hadoop.io.Text public class MainDbToHbase {public static void main (string [] args) விதிவிலக்கு {கட்டமைப்பு HBaseConfiguration.create () HTableInterface mytable = புதிய HTable (conf, 'emp') DBConfiguration.configureDB (conf, 'com.mysql.jdbc.Driver', // இயக்கி வகுப்பு 'jdbc: mysql: // localhost: 3306 / edureka' , // db url 'root', // பயனர் பெயர் 'root') // கடவுச்சொல் வேலை வேலை = புதிய வேலை (conf, 'dbtohbase') job.setJarByClass (MainDbToHbase.class) job.s etMapperClass (Map.class) job.setMapOutputKeyClass (ImmutableBytesWritable.class) job.setMapOutputValueClass (Text.class) TableMapReduceUtil.initTableReducerJob ('பணியாளர்', Reduse.class (job.Class). வகுப்பு) DBInputFormat.setInput (வேலை, DBInputWritable.class, 'emp', // உள்ளீட்டு அட்டவணை பெயர் பூஜ்ய, பூஜ்ய, புதிய சரம் [] {'empid', 'name', 'dept' table // table columns) System.exit (job.nightForCompletion (உண்மை)? 0: 1)}}

இந்த குறியீடு துண்டு வெளியீட்டு விசை வகுப்பை உள்ளமைக்க உங்களை அனுமதிக்கிறது, இது hbase இன் போது மாறாத பைட்டுகள் எழுதக்கூடியது

job.setMapOutputKeyClass (ImmutableBytesWritable.class) job.setMapOutputValueClass (Text.class)

இங்கே நாம் அட்டவணையில் செயல்பட hbase அட்டவணை பெயரையும் குறைப்பையும் கடந்து செல்கிறோம்.

TableMapReduceUtil.initTableReducerJob ('பணியாளர்', Reduce.class, வேலை)

மேப்பர்:

தொகுப்பு Dbtohbase இறக்குமதி java.io.IOException இறக்குமதி org.apache.hadoop.mapreduce.Mapper இறக்குமதி org.apache.hadoop.hbase.io.ImmutableBytesWritable import org.apache.hadoop.hbase.util.Bytes import org.apache.hadoop.io .நீள இறக்குமதி இறக்குமதி org.apache.hadoop.io.Text இறக்குமதி org.apache.hadoop.io.IntWritable பொது வகுப்பு வரைபடம் மேப்பரை நீட்டிக்கிறது {private IntWritable one = new IntWritable (1) பாதுகாக்கப்பட்ட வெற்றிட வரைபடம் (LongWritable id, DBInputWritable value, Context context) {try {string line = value.getName () string cd = value.getId () + '' string dept = value.getDept () context.write (new ImmutableBytesWritable (Bytes.toBytes (cd)), புதிய உரை (வரி + ' '+ dept))} பிடிக்கவும் (IOException e) {e.printStackTrace ()} catch (InterruptException e) {e.printStackTrace ()}}}

இந்த குறியீட்டில், DBinputwritable வகுப்பைப் பெறுபவர்களிடமிருந்து மதிப்புகளை எடுத்து அவற்றை உள்ளே அனுப்புகிறோம்
மாற்றமுடியாத பைட்டுகள் எழுதக்கூடியவை, இதனால் அவை ஹேபேஸ் புரிந்துகொள்ளும் பைட்ரைட் வடிவத்தில் குறைப்பாளரை அடைகின்றன.

சரம் வரி = value.getName () சரம் cd = value.getId () + '' String dept = value.getDept () context.write (புதிய மாறாத பைட்டுகள் எழுதக்கூடிய (பைட்டுகள்.டோபைட்டுகள் (சி.டி)), புதிய உரை (வரி + '' + துறை ))

குறைப்பவர்:

தொகுப்பு Dbtohbase இறக்குமதி java.io.IOException இறக்குமதி org.apache.hadoop.hbase.client.Put இறக்குமதி org.apache.hadoop.hbase.io.ImmutableBytesWritable import org.apache.hadoop.hbase.mapreduce.TableReducer import org.apache.hadoop .hbase.util.Bytes இறக்குமதி org.apache.hadoop.io.Text பொது வகுப்பு குறைத்தல் TableReducer ஐ நீட்டிக்கிறது {பொது வெற்றிடக் குறைப்பு (மாறாத பைட்டுகள் எழுதக்கூடிய விசை, மாற்றக்கூடிய மதிப்புகள், சூழல் சூழல்) IOException, InterruptException {string [] cause = null // loop மதிப்புகள் for (உரை மதிப்பு: மதிப்புகள்) {காரணம் = val.toString (). பிளவு ('')} // HBase க்கு போடு put put = new put (key.get ()) put.add (Bytes.toBytes ('official_info' ), Bytes.toBytes ('name'), Bytes.toBytes (காரணம் [0])) put.add (Bytes.toBytes ('official_info'), Bytes.toBytes ('department'), Bytes.toBytes (காரணம் [1 ])) context.write (விசை, போடு)}}

இந்த குறியீட்டின் துண்டு துல்லியமான வரிசையையும் நெடுவரிசையையும் தீர்மானிக்க உதவுகிறது. இங்கே நாம் ஒவ்வொரு எம்பிட்டையும் தனித்தனி வரிசையில் சேமித்து வருகிறோம், ஏனெனில் எம்பிட்டை வரிசை விசையாக உருவாக்கியுள்ளோம். ஒவ்வொரு வரிசையிலும் முறையே “பெயர்” மற்றும் “துறை” நெடுவரிசைகளின் கீழ் நெடுவரிசை குடும்ப “அதிகாரப்பூர்வ_இன்ஃபோ” இன் கீழ் பணியாளர்களின் அதிகாரப்பூர்வ தகவல்களை சேமித்து வருகிறோம்.

Put put = new Put (key.get ()) put.add (Bytes.toBytes ('official_info'), Bytes.toBytes ('name'), Bytes.toBytes (காரணம் [0])) put.add (பைட்டுகள். toBytes ('official_info'), Bytes.toBytes ('department'), Bytes.toBytes (காரணம் [1])) context.write (key, put)

Hbase இல் மாற்றப்பட்ட தரவு:

ஸ்கேன் ஊழியர்

எங்கள் வணிகத் தரவை ஒரு தொடர்புடைய SQL DB இலிருந்து NoSQL DB க்கு வெற்றிகரமாக மாற்றுவதற்கான பணியை நாங்கள் முடிக்க முடிந்தது.

அடுத்த வலைப்பதிவில் பிற உள்ளீடு மற்றும் வெளியீட்டு வடிவங்களுக்கான குறியீடுகளை எவ்வாறு எழுதுவது மற்றும் செயல்படுத்துவது என்பதைக் கற்றுக்கொள்வோம்.

உங்கள் கருத்துகள், கேள்விகள் அல்லது ஏதேனும் கருத்துக்களை இடுகையிடுங்கள். உங்களிடமிருந்து நான் கேட்க விரும்புகிறேன்.

எங்களுக்கு ஒரு கேள்வி கிடைத்ததா? கருத்துகள் பிரிவில் இதைக் குறிப்பிடவும், நாங்கள் உங்களைத் தொடர்புகொள்வோம்.

தொடர்புடைய இடுகைகள்: