系统执行排序的过程称为什么
MapReduce确保每个reducer的输入都是按键排序的,系统执行排序的过程称为shuffle。shuffle阶段主要包括map阶段的combine、group、sort、partition以及reducer阶段的合并排序。
本教程操作环境:windows7系统,Dell G3电脑。
MapReduce确保每个reducer的输入都是按键排序的,系统执行排序的过程称为shuffle。我们可以理解为map产生输出到reduce的消化输入的整个工程。
Map端:每个mapperTask有一个环形内存缓冲区,用于存储map任务的输出,一旦达到阈值,一个后台线程把内容写到磁盘的指定目录下的新建的一个溢出写文件,写磁盘前要经过partition、sort、Combiner。等最后记录写完,合并全部溢出写文件为一个分区且排序的文件。
Reduce端:可以分为复制阶段、排序阶段、reduce阶段
复制阶段:map输出文件位于运行map任务的tasktracker的本地磁盘上,reduce通过http的方式获取输出文件的分区,tasktracker为分区文件运行reduce任务,只要有一个map任务完成,reduce任务就开始复制输出。
排序阶段:更恰当的说法是合并阶段,因为排序是在map端进行的。这个阶段将合并map输出,维持其顺序排序,循环进行。
最后阶段就是reduce阶段,对已排序输出中的每个键调用reduce函数,此阶段的输出直接写到输出文件系统,一般为hdfs。、
Shuffle阶段说明
shuffle阶段主要包括map阶段的combine、group、sort、partition以及reducer阶段的合并排序。Map阶段通过shuffle后会将输出数据按照reduce的分区分文件的保存,文件内容是按照定义的sort进行排序好的。Map阶段完成后会通知ApplicationMaster,然后AM会通知Reduce进行数据的拉取,在拉取过程中进行reduce端的shuffle过程。
注意:Map阶段的输出数据是存在运行Map节点的磁盘上,是个临时文件,不是存在HDFS上,在Reduce拉取数据后,那个临时文件会删除,若是存在hdfs上,会造成存储空间的浪费(会产生三个副本)。
-
用户自定义Combiner
Combiner可以减少Map阶段的中间输出结果数,降低网络开销。默认情况下是没有Combiner的。用户自定义的Combiner要求是Reducer的子类,以Map的输出
作为Combiner的输入 和输出 ,也就是说Combiner的输入和输出必须是一样的。 可以通过job.setCombinerClass设置combiner的处理类,MapReduce框架不保证一定会调用该类的方法。
注意:如果reduce的输入和输出一样,则可以直接用reduce类作为combiner
-
用户自定义Partitioner
Partitioner是用于确定map输出的
对应的处理reducer是那个节点。默认MapReduce任务reduce个数为1个,此时Partitioner其实没有什么效果,但是当我们将reduce个数修改为多个的时候,partitioner就会决定key所对应reduce的节点序号(从0开始)。 可以通过job.setPartitionerClass方法指定Partitioner类,默认情况下使用HashPartitioner(默认调用key的hashCode方法)。
-
用户自定义Group
GroupingComparator是用于将Map输出的
进行分组组合成 >的关键类,直白来讲就是用于确定key1和key2是否属于同一组,如果是同一组,就将map的输出value进行组合。 要求我们自定义的类实现自接口RawComparator,可以通过job.setGroupingComparatorClass方法指定比较类。默认情况下使用WritableComparator,但是最终调用key的compareTo方法进行比较。
-
用户自定义Sort
SortComparator是用于将Map输出的
进行key排序的关键类, 直白来讲就是用于确定key1所属组和key2所属组那个在前,那个在后。 要求我们自定义的类实现自接口RawComparator,可以通过job.setSortComparatorClass方法指定比较类。默认情况下使用WritableComparator,但是最终调用key的compareTo方法进行比较。
-
用户自定义Reducer的Shuffle
在reduce端拉取map的输出数据的时候,会进行shuffle(合并排序),MapReduce框架以插件模式提供了一个自定义的方式,我们可以通过实现接口ShuffleConsumerPlugin,并指定参数mapreduce.job.reduce.shuffle.consumer.plugin.class来指定自定义的shuffle规则,但是一般情况下,直接采用默认的类org.apache.hadoop.mapreduce.task.reduce.Shuffle。
更多编程相关知识,请访问:编程视频!!
Atas ialah kandungan terperinci 系统执行排序的过程称为什么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Ralat Java: Ralat Hadoop, Cara Mengendalikan dan Mengelak Apabila menggunakan Hadoop untuk memproses data besar, anda sering menghadapi beberapa ralat pengecualian Java, yang mungkin menjejaskan pelaksanaan tugas dan menyebabkan pemprosesan data gagal. Artikel ini akan memperkenalkan beberapa ralat Hadoop biasa dan menyediakan cara untuk menangani dan mengelakkannya. Java.lang.OutOfMemoryErrorOutOfMemoryError ialah ralat yang disebabkan oleh memori mesin maya Java yang tidak mencukupi. Apabila Hadoop adalah

Java menggunakan fungsi shuffle() kelas Collections untuk mengganggu susunan elemen dalam koleksi Dalam bahasa pengaturcaraan Java, kelas Collections ialah kelas alat yang menyediakan pelbagai kaedah statik untuk mengendalikan koleksi. Salah satunya ialah fungsi shuffle(), yang boleh digunakan untuk mengocok susunan elemen dalam koleksi. Artikel ini menunjukkan cara menggunakan fungsi ini dan menyediakan contoh kod yang sepadan. Pertama, kita perlu mengimport kelas Koleksi dalam pakej java.util,

Dengan kemunculan era data besar, pemprosesan dan penyimpanan data menjadi semakin penting, dan cara mengurus dan menganalisis sejumlah besar data dengan cekap telah menjadi cabaran bagi perusahaan. Hadoop dan HBase, dua projek Yayasan Apache, menyediakan penyelesaian untuk penyimpanan dan analisis data besar. Artikel ini akan memperkenalkan cara menggunakan Hadoop dan HBase dalam Beego untuk storan dan pertanyaan data besar. 1. Pengenalan kepada Hadoop dan HBase Hadoop ialah sistem storan dan pengkomputeran teragih sumber terbuka yang boleh

Memandangkan jumlah data terus meningkat, kaedah pemprosesan data tradisional tidak lagi dapat menangani cabaran yang dibawa oleh era data besar. Hadoop ialah rangka kerja pengkomputeran teragih sumber terbuka yang menyelesaikan masalah kesesakan prestasi yang disebabkan oleh pelayan nod tunggal dalam pemprosesan data besar melalui storan teragih dan pemprosesan sejumlah besar data. PHP adalah bahasa skrip yang digunakan secara meluas dalam pembangunan web dan mempunyai kelebihan pembangunan pesat dan penyelenggaraan yang mudah. Artikel ini akan memperkenalkan cara menggunakan PHP dan Hadoop untuk pemprosesan data besar. Apa itu HadoopHadoop

Timbunan teknologi data besar Java: Fahami aplikasi Java dalam bidang data besar, seperti Hadoop, Spark, Kafka, dll. Apabila jumlah data terus meningkat, teknologi data besar telah menjadi topik hangat dalam era Internet hari ini. Dalam bidang data besar, kita sering mendengar nama Hadoop, Spark, Kafka dan teknologi lain. Teknologi ini memainkan peranan penting, dan Java, sebagai bahasa pengaturcaraan yang digunakan secara meluas, juga memainkan peranan yang besar dalam bidang data besar. Artikel ini akan memberi tumpuan kepada aplikasi Java secara besar-besaran

1: Pasang JDK1. Jalankan arahan berikut untuk memuat turun pakej pemasangan JDK1.8. wget--no-check-certificatehttps://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz2 Jalankan arahan berikut untuk menyahmampat pakej pemasangan JDK1.8 yang dimuat turun . tar-zxvfjdk-8u151-linux-x64.tar.gz3 Alihkan dan namakan semula pakej JDK. mvjdk1.8.0_151//usr/java84. gema'

Terdapat fungsi berikut dalam PHP yang boleh mengocok tatasusunan secara rawak: shuffle() secara langsung mengubah susunan elemen tatasusunan. array_rand() mengembalikan kunci rawak, yang boleh menyusun semula susunan tatasusunan berdasarkan kunci.

Memandangkan jumlah data terus meningkat, pemprosesan data berskala besar telah menjadi masalah yang mesti dihadapi dan diselesaikan oleh perusahaan. Pangkalan data perhubungan tradisional tidak lagi dapat memenuhi permintaan ini Untuk penyimpanan dan analisis data berskala besar, platform pengkomputeran teragih seperti Hadoop, Spark, dan Flink telah menjadi pilihan terbaik. Dalam proses pemilihan alat pemprosesan data, PHP menjadi semakin popular di kalangan pembangun sebagai bahasa yang mudah dibangunkan dan diselenggara. Dalam artikel ini, kami akan meneroka cara memanfaatkan PHP untuk pemprosesan data berskala besar dan bagaimana