Anda dapat menggunakan contoh sederhana untuk menggambarkan apa itu MapReduce:
Kami ingin menghitung berapa kali setiap kata muncul dalam file besar. Karena file terlalu besar. Kami membagi file ini menjadi file kecil dan kemudian mengatur banyak orang untuk menghitung. Proses ini adalah "peta". Kemudian gabungkan angka -angka yang dihitung oleh setiap orang, dan ini "kurangi".
Jika Anda melakukan contoh di atas dalam MapReduce, Anda perlu membuat pekerjaan tugas, yang membagi file menjadi beberapa blok data independen dan mendistribusikannya dalam node mesin yang berbeda. Kemudian prosesnya dengan cara yang sepenuhnya paralel melalui tugas peta yang tersebar di node yang berbeda. MapReduce akan mengumpulkan baris output peta, dan kemudian mengirim output hasil untuk mengurangi langkah pemrosesan berikutnya.
Untuk proses eksekusi tertentu dari suatu tugas, akan ada proses yang disebut "JobTracker" yang bertanggung jawab untuk mengoordinasikan semua tugas dalam proses eksekusi MapReduce. Beberapa proses TaskTracker digunakan untuk menjalankan tugas peta terpisah dan melaporkan pelaksanaan tugas kepada JobTracker kapan saja. Jika seorang TaskTracker melaporkan tugas atau gagal melaporkan tugasnya sendiri untuk waktu yang lama, JobTracker akan memulai tasktracker lain untuk mengeksekusi ulang tugas peta yang terpisah.
(1) Buat proyek Maven terkait di bawah Eclipse, mengandalkan paket JAR sebagai berikut (Anda juga dapat merujuk pada konfigurasi POM dari Proyek Hadoop-Mapreduce-Projects di bawah Paket Kode Sumber Hadoop)
Catatan: Untuk mengonfigurasi plugin Maven-jar-plugin dan tentukan Class
<Dependencies> <dependency> <GroupId> junit </groupid> <ArtifactId> junit </arttifactid> <version> 4.11 </version> </dependency> <dependency> <groupid> org.apache.hadoop </groupid> <Artifactid> HAdoop-Mapreduce-core </artifactid> version </version> </version> </version> </version> </version> </version> </version> </version> </version </version> </version </version </version> </version </version> versies 2.5. version </version> </version </version> </version </version> </version </version> </version </version </version> <GroupId> org.apache.hadoop </groupid> <ArTifactId> Hadoop-common </stifactid> <version> 2.5.2 </version> </dependency> </dependencies> <build> <lugin> <sandur> <RoupId> org.apache.maven.plugins </groupins> <RUPTIN> <TROVICID> <Archive> <ifan manifest> <Anterclass> com.xxx.demo.hadoop.wordcount.wordcount </sainclass> </manifest> </archive> </configuration> </plugin> </bougin> </build>
(2) Menurut mekanisme operasi MapReduce, sebuah pekerjaan harus menulis setidaknya tiga kelas untuk menyelesaikan tiga hal: Peta logika, mengurangi logika, dan penjadwalan pekerjaan.
Kode peta dapat mewarisi org.apache.hadoop.mapreduce.mapper kelas
Kelas statis publik TokenizerMapper memperluas mapper <objek, teks, teks, tidak dapat diterapkan> {private final static tidak dapat berkaitan satu = new Intwritable (1); kata teks pribadi = teks baru (); // Karena contoh ini tidak menggunakan parameter kunci, jenis kunci hanya ditentukan sebagai objek peta public void (kunci objek, nilai teks, konteks konteks) melempar ioException, interruptedException {stringTokenizer ITR = stringTokenizer baru (value.toString ()); while (itr.hasmoretokens ()) {word.set (itr.nextToken ()); context.write (word, satu); }}}Kode Kurangi dapat mewarisi org.apache.hadoop.mapreduce.reducer kelas
IntsumReducer kelas publik memperluas peredam <teks, tidak dapat ditrihatkan, teks, tidak dapat diterimanya> {private intrwitable result = new IntWritable (); void public reduksi (kunci teks, nilai -nilai <intwritable>, konteks konteks) melempar ioException, interruptedException {int sum = 0; untuk (val yang tidak dapat dituntun: values) {sum += val.get (); } result.set (sum); context.write (kunci, hasil); }}Tulis metode utama untuk penjadwalan pekerjaan
public static void main (string [] args) melempar Exception {configuration conf = new configuration (); Pekerjaan pekerjaan = job.getInstance (conf, "word count"); job.setjarbyclass (wordcount.class); job.setmapperclass (tokenizermapper.class); job.setCombinerClass (intsumreducer.class); job.setreducerclass (intsumreducer.class); job.setoutputKeyClass (text.class); job.setoutputValueClass (intrwritable.class); FileInputFormat.AddInputPath (Job, New Path (args [0])); FileOutPutFormat.SetOutPutPath (Job, New Path (args [1])); job.waitforcompletion (true); //System.exit(job.waitforCompletion(true)? 0: 1); }Jalankan Instal MVN untuk mengetik proyek ke dalam file jar dan mengunggahnya ke lingkungan Linux Cluster. Gunakan perintah HDFS DFS -MKDIR untuk membuat perintah yang sesuai dalam sistem file HDFS. Gunakan HDFS DFS -Put untuk mengunggah file data yang perlu diproses ke sistem HDFS. Contoh: hdfs dfs -put $ {linux_path/file data} $ {hdfs_path}
Jalankan perintah dalam lingkungan cluster: hadoop jar $ {linux_path} /wordcount.jar $ {hdfs_input_path} $ {hdfs_output_path}
hdfs dfs -cat $ {hdfs_output_path}/output nama file
Metode di atas dijalankan dalam mode lokal ketika lingkungan Hadoop Cluster tidak dimulai. Pada saat ini, baik HDF maupun benang tidak bekerja. Berikut ini adalah pekerjaan yang perlu Anda lakukan saat menjalankan pekerjaan MapReduce dalam mode yang didistribusikan semu. Pertama, kutipan langkah -langkah yang tercantum di situs web resmi:
Konfigurasikan nama host
# vi /etc/sysconfig/network
Misalnya:
Networking = yeshostname = mastervi /etc /hosts
Isi konten berikut
127.0.0.1 localhost
Konfigurasikan ssh tanpa komunikasi kata sandi
ssh-keygen -t rsa
# cat?~/.ssh/id_rsa.pub?>>?~/.ssh/authorized_keys
Konfigurasikan file core-site.xml (terletak di $ {hadoop_home}/etc/hadoop/
<Configuration> <property> <name> fs.defaultfs </name> <value> hdfs: // localhost: 9000 </ value> </property> </configuration>
Konfigurasikan file hdfs-site.xml
<Configuration> <property> <name> dfs.replication </name> <value> 1 </ value> </prop Property> </configuration>
Perintah berikut dapat menjalankan pekerjaan MapReduce dalam mode pseudo-distribusi yang berdiri sendiri
1. Upuskan sistem file:
$ bin/hdfs namenode -format
2. Mulai daemon namenode dan daemon data:
$ sbin/start-dfs.sh
3. Hadoop Daemon Log Output ditulis ke direktori $ hadoop_log_dir (default ke $ hadoop_home/log).4.Browse antarmuka web untuk namenode; Secara default tersedia di:
Namenode - http: // localhost: 50070/
Buat direktori HDFS diperlukan untuk menjalankan pekerjaan MapReduce:
$ bin /hdfs dfs -mkdir /pengguna
$ bin/hdfs dfs -mkdir/user/<username>
5. Menyelesaikan file input ke dalam sistem file terdistribusi:
$ bin/hdfs dfs -put etc/hadoop input
6. Beri beberapa contoh yang disediakan:
$ bin/Hadoop Jar Share/Hadoop/Mapreduce/Hadoop-Mapreduce-Expamples-2.5.2.Jar Grep Input Output 'DFS [AZ.]+'
7. Periksa file output:
Salin file output dari sistem file terdistribusi ke sistem file lokal dan periksa:$ bin/hdfs dfs -get output output
$ output kucing/*
atauLihat file output pada sistem file terdistribusi:
$ bin/hdfs dfs -cat output/*
8. Kapan Anda selesai, hentikan daemon dengan:
$ sbin/stop-dfs.sh
Di atas adalah seluruh konten dari kode instance WordCount dalam artikel ini, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!