Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Java tabanlı mapreduce uygulaması oluşturmak için Apache Maven'ı kullanmayı ve ardından Azure HDInsight'ta Apache Hadoop ile çalıştırmayı öğrenin.
Önkoşullar
Apache Maven , Apache'ye göre düzgün bir şekilde yüklendi . Maven, Java projeleri için bir proje derleme sistemidir.
Geliştirme ortamını yapılandırma
Bu makale için kullanılan ortam, Windows 10 çalıştıran bir bilgisayardı. Komutlar bir komut isteminde yürütüldü ve çeşitli dosyalar Not Defteri ile düzenlendi. Ortamınız için uygun şekilde değiştirin.
Bir komut isteminden, çalışma ortamı oluşturmak için aşağıdaki komutları girin:
IF NOT EXIST C:\HDI MKDIR C:\HDI
cd C:\HDI
Maven projesi oluşturma
Wordcountjava adlı bir Maven projesi oluşturmak için aşağıdaki komutu girin:
mvn archetype:generate -DgroupId=org.apache.hadoop.examples -DartifactId=wordcountjava -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=falseBu komut, parametresi tarafından
artifactIDbelirtilen ada sahip bir dizin oluşturur (bu örnekte wordcountjava .) Bu dizin aşağıdaki öğeleri içerir:-
pom.xml- Projeyi oluşturmak için kullanılan bilgileri ve yapılandırma ayrıntılarını içeren Proje Nesne Modeli (POM ). - src\main\java\org\apache\hadoop\examples: Uygulama kodunuzu içerir.
- src\test\java\org\apache\hadoop\examples: Uygulamanız için testler içerir.
-
Oluşturulan örnek kodu kaldırın. Oluşturulan test ve uygulama dosyalarını
AppTest.javasilin veApp.javaaşağıdaki komutları girin:cd wordcountjava DEL src\main\java\org\apache\hadoop\examples\App.java DEL src\test\java\org\apache\hadoop\examples\AppTest.java
Proje Nesne Modelini Güncelleştirme
pom.xml dosyasının tam referansı için bkz https://maven.apache.org/pom.html. Aşağıdaki komutu girerek açın pom.xml :
notepad pom.xml
Bağımlılık ekleme
pom.xml içinde, <dependencies> bölümüne aşağıdaki metni ekleyin:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-examples</artifactId>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
Bu, gerekli kitaplıkları (artifactId < içinde > listelenir) ve belirli bir sürümü (version < içinde > listelenir) tanımlar. Derleme zamanında, bu bağımlılıklar varsayılan Maven deposundan indirilir. Daha fazlasını görüntülemek için Maven depo aramasını kullanabilirsiniz.
Maven'a <scope>provided</scope> bu bağımlılıkların çalışma zamanında HDInsight kümesi tarafından sağlandığından uygulamayla birlikte paketlenmemesi gerektiğini bildirir.
Önemli
Kullanılan sürüm, kümenizde bulunan Hadoop sürümüyle eşleşmelidir. Sürümler hakkında daha fazla bilgi için HDInsight bileşeni sürüm oluşturma belgesine bakın.
Derleme yapılandırması
Maven eklentileri, projenin derleme aşamalarını özelleştirmenize olanak sağlar. Bu bölüm eklentiler, kaynaklar ve diğer derleme yapılandırma seçeneklerini eklemek için kullanılır.
Dosyaya pom.xml aşağıdaki kodu ekleyin ve dosyayı kaydedip kapatın. Bu metin dosyada, örneğin </dependencies> ve </project> arasında olduğu gibi, <project>...</project> etiketinin içinde olmalıdır.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Bu bölümde Apache Maven Derleyici Eklentisi ve Apache Maven Gölge eklentisi yapılandırılır. Derleyici eklentisi topolojiyi derlemek için kullanılır. Gölge eklentisi, Maven tarafından oluşturulan JAR paketinde lisans yinelemesini önlemek için kullanılır. Bu eklenti, HDInsight kümesinde çalışma zamanında "yinelenen lisans dosyaları" hatasını önlemek için kullanılır. Maven-shade-plugin'i ApacheLicenseResourceTransformer uygulamasıyla kullanmak hatayı önler.
Maven-shade-plugin ayrıca uygulamanın gerektirdiği tüm bağımlılıkları içeren bir uber jar dosyası oluşturur.
pom.xml dosyasını kaydedin.
MapReduce uygulamasını oluşturma
Yeni bir dosya
WordCount.javaoluşturmak ve açmak için aşağıdaki komutu girin. Yeni bir dosya oluşturmak için istemde Evet'i seçin.notepad src\main\java\org\apache\hadoop\examples\WordCount.javaArdından aşağıdaki Java kodunu kopyalayıp yeni dosyaya yapıştırın. Ardından dosyayı kapatın.
package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(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(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }Paket adının ve sınıf adının olduğuna
org.apache.hadoop.examplesWordCountdikkat edin. MapReduce işini gönderirken bu adları kullanırsınız.
Uygulamayı derleme ve paketleme
Dizinden wordcountjava aşağıdaki komutu kullanarak uygulamayı içeren bir JAR dosyası oluşturun:
mvn clean package
Bu komut önceki derleme yapıtlarını temizler, henüz yüklenmemiş bağımlılıkları indirir ve ardından uygulamayı derleyip paketler.
Komut tamamlandıktan sonra dizin wordcountjava/target adlı wordcountjava-1.0-SNAPSHOT.jarbir dosya içerir.
Uyarı
Dosya wordcountjava-1.0-SNAPSHOT.jar , yalnızca WordCount işini değil, aynı zamanda işin çalışma zamanında gerektirdiği bağımlılıkları da içeren bir uberjar dosyasıdır.
JAR'ı yükle ve işleri başlat (SSH)
Aşağıdaki adımlar, JAR'ı HDInsight kümesindeki Apache HBase'inizin birincil baş düğümüne kopyalamak için kullanılır scp . Ardından ssh komutu kümeye bağlanmak ve örneği doğrudan baş düğümde çalıştırmak için kullanılır.
Jar dosyasını kümeye yükleyin.
CLUSTERNAMEdeğerini HDInsight kümenizin adıyla değiştirin ve ardından aşağıdaki komutu girin:scp target/wordcountjava-1.0-SNAPSHOT.jar sshuser@CLUSTERNAME-ssh.azurehdinsight.net:Kümeye bağlanın.
CLUSTERNAMEetiketini kendi HDInsight kümenizin adıyla değiştirin ve ardından aşağıdaki komutu girin:ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netSSH oturumunda aşağıdaki komutu kullanarak MapReduce uygulamasını çalıştırın:
yarn jar wordcountjava-1.0-SNAPSHOT.jar org.apache.hadoop.examples.WordCount /example/data/gutenberg/davinci.txt /example/data/wordcountoutBu komut WordCount MapReduce uygulamasını başlatır. Giriş dosyası ,
/example/data/gutenberg/davinci.txtçıkış dizini ise şeklindedir/example/data/wordcountout. Hem giriş dosyası hem de çıkış, küme için varsayılan depolamada depolanır.İş tamamlandıktan sonra sonuçları görüntülemek için aşağıdaki komutu kullanın:
hdfs dfs -cat /example/data/wordcountout/*Aşağıdaki metne benzer değerler içeren bir sözcük ve sayı listesi almalısınız:
zeal 1 zelus 1 zenith 2
Sonraki adımlar
Bu belgede Java MapReduce işlemi geliştirmeyi öğrendiniz. HDInsight ile çalışmanın diğer yolları için aşağıdaki belgelere bakın.