Bu konu, MaxCompute Studio'da MapReduce programının nasıl geliştirileceğini açıklar. Süreç; MapReduce programının yazılmasını, hata ayıklamasını, paketlenmesini, yüklenmesini ve çalıştırılmasını içerir.
Önkoşullar
Aşağıdaki önkoşulları karşılamanız gerekir:
-
Bir MaxCompute projesine bağlandınız.
Daha fazla bilgi için bkz. Proje bağlantılarını yönetme.
-
Bir Java modülü oluşturdunuz.
Daha fazla bilgi için bkz. MaxCompute Java modülü oluşturma.
MapReduce Yazma
Project bölmesinde, modülün kaynak kodu dizinine (yani ) sağ tıklayın ve seçeneğini belirleyin.
-
Bir Name girin, sınıf türü olarak Driver seçin ve Enter tuşuna basın.
Name: MaxCompute Java sınıfının adı. Bir paket oluşturmadıysanız, adı packagename.classname biçiminde girerek otomatik olarak bir paket oluşturabilirsiniz.
-
Sınıf türünü seçin: Driver, Mapper veya Reducer.
NotUygun sınıf türünü seçin:
Driver: MapReduce işi için sürücü sınıfıdır. İşi yapılandırır ve gönderir. Sürücü içinde Mapper ve Reducer sınıflarını ve diğer yapılandırma ayrıntılarını belirtebilirsiniz. İşin giriş noktasıdır.
Mapper: MapReduce veri işlemenin ilk aşamasıdır. Her girdi kaydını işler ve bir ara anahtar-değer çifti oluşturur.
Reducer: Mapper'dan gelen ara anahtar-değer çiftlerini alır, işler ve son çıktıyı üretir. Çıktı daha sonra bir MaxCompute tablosuna kaydedilir.
-
Sınıfı oluşturduktan sonra, düzenleyicide Java kodunuzu yazın.
MaxCompute Studio, Java şablonunu çerçeve koduyla otomatik olarak doldurur. Yalnızca girdi tablosu, çıktı tablosu ve Mapper ile Reducer sınıfları gibi ayarları yapılandırmanız gerekir.
package mymr.myudf; import ... public class HelloDriver { public static void main(String[] args) throws OdpsException { JobConf job = new JobConf(); // TODO: specify map output types job.setMapOutputKeySchema(SchemaUtils.fromString(?)); job.setMapOutputValueSchema(SchemaUtils.fromString(?)); // TODO: specify input and output tables InputUtils.addTable(TableInfo.builder().tableName(?).build(), job); OutputUtils.addTable(TableInfo.builder().tableName(?).build(), job); // TODO: specify a mapper job.setMapperClass(?); // TODO: specify a reducer job.setReducerClass(?); RunningJob rj = JobClient.runJob(job); rj.waitForCompletion(); } }
Yerel Çalıştırma ile Hata Ayıklama
MapReduce programınızı test etmek ve çıktının beklentilerinizi karşıladığını doğrulamak için yerel çalıştırma kullanın.
Tamamlanan Java dosyasına sağ tıklayın ve Run seçeneğini belirleyin.
-
Run/Debug Configurations iletişim kutusunda, bu çalıştırma için MaxCompute projesini seçin.
Run/Debug Configurations iletişim kutusunda, sol bölmede JUnit altındaki WordCountTest seçeneğini belirleyin. Sağ taraftaki yapılandırma bölmesinde Test kind değerini Class olarak ayarlayın, Class alanına
com.aliyun.odps.examples.mr.test.WordCountTestgirin ve Use classpath of module değerini MyFristModule olarak ayarlayın. -
Çalıştırmayı başlatmak için OK düğmesine tıklayın.
NotSistem, yerel çalıştırma sırasında girdi olarak warehouse içindeki belirtilen tablodan verileri okur. Günlük çıktısını konsolda görüntüleyebilirsiniz.
Birim Testi ile Hata Ayıklama
Test senaryoları yazmak için examples dizinindeki WordCount birim testi örneğine bakabilirsiniz.
package com.aliyun.odps.examples.mr.test;
import ...
public class WordCountTest extends M...
// Define the schemas of the input and output tables
private final static String INPUT_...
private final static String OUTPUT_...
private JobConf job;
public WordCountTest() throws Excep...
TestUtil.initWarehouse();
// Configure the job
job = new JobConf();
job.setMapperClass(WordCount_Token...
job.setCombinerClass(WordCount_Sum...
job.setReducerClass(WordCount_SumR...
job.setMapOutputKeySchema(SchemaUti...
job.setMapOutputValueSchema(SchemaU...
InputUtils.addTable(TableInfo.build...
OutputUtils.addTable(TableInfo.buil...
}
@SuppressWarnings("deprecation")
@Test
public void testMap() throws IOExce...
MapUTContext mapContext = new MapUT...
mapContext.setInputSchema(INPUT_SC...
mapContext.setOutputSchema(OUTPUT_...
// Prepare the test data
Record record = mapContext.createIn...
record.set(new Text[] {new Text(...
Paketleme ve Yükleme
Programınızı hata ayıkladıktan sonra bir JAR dosyasında paketleyin ve bir kaynak olarak MaxCompute'a yükleyin. Daha fazla bilgi için bkz. Java programını paketleme, yükleme ve kaydetme.
MapReduce Çalıştırma
MapReduce programını MaxCompute istemcisinde çalıştırın.
Sol gezinme bölmesinde Project Explorer öğesine tıklayın.
Proje adına sağ tıklayın ve Open in Console seçeneğini belirleyin.
-
Console bölmesinde, MapReduce işini çalıştırmak için aşağıdaki komutu çalıştırın.
Komutlar hakkında daha fazla bilgi için bkz. JAR komutları.
jar -resources wordcount.jar -classpath D:\odps\clt\wordcount.jar com.aliyun.odps.examples.mr.WordCount wc_in wc_out;