小さなファイルでのHadoopSpark



Hadoop Spark With Small Files



A.ファイルタイプがCombineTextInputFormatに設定されていることを入力してください

hadoop



-D mapreduce.input.fileinputformat.split.minsize=134217728 -D mapreduce.input.fileinputformat.split.maxsize=512000000 -D mapred.linerecordreader.maxlength=32768

スパーク

job.setInputFormatClass(CombineTextInputFormat.class)

(Hadoop2.7以降にはこのクラスがありますが、2.6でもこのクラスを使用できますが、一部のバグと互換性がないため、ミッションが失敗するか、エラークラスが直接見つかりません)



次に、次のパラメーターを再構成します。

(CombineTextInputFormatセグメントサイズなしで構成パラメーターを設定すると、すべての入力が1つのファイルにマージされます。つまり、マップにすぎないデータの量に関係なく、悲劇的なレッスンです!)

1.実行時パラメータと



 val data = sc.newAPIHadoopFile(args(1),  classOf[CombineTextInputFormat], classOf[LongWritable], classOf[Text], hadoopConf) .map { //TODO }

例:hadoop jar xx.jar -D mapreduce.input.fileinputformat.split.minsize = 134217728 -D mapreduce.input.fileinputformat.split.maxsize = 512000000

ランタイムパラメータを追加するこの方法では、最初の行のダイバーのメインプロセスに次のコードを追加する必要があります( 非常に重要 ):

String [] otherArgs = new GenericOptionsParser(conf、args).getRemainingArgs()

それ以外の場合、otherArgs [0]パラメーターが追加された後、操作パラメーターは直接-Dをargs [0]として受け取ります。

ランタイムパラメータに慣れている追加は、デッドダイバークラスに直接書き込むことができますオーバーライドの実行時コードパラメーターの追加

2.タグセットパラメータ

|_+_|

maxsizeおよびminsizeスライスは、上限と下限で配置されます。

(パラメータもあり、通常は-Dにアクセスできません mapred.linerecordreader.maxlength = 32768)各行セットの最大長。

MapReduce 着信hadoopConf時にジョブインスタンスを取得する

 var  hadoopConf  = new Configuration() hadoopConf.set(' mapreduce.input.fileinputformat.split.maxsize ', '512000000') hadoopConf.set(' mapreduce.input.fileinputformat.split.minsize ', '268435456') hadoopConf.set ( 'mapreduce.input.fileinputformat.split.minsize.per.node', '134217728') // The following two parameters can not be set, see details at the end of the article hadoopConf.set('mapreduce.input.fileinputformat.split.minsize.per.rack', '268435456') 

スパーク

Job job = Job.getInstance( hadoopConf ,'MyJob')

完成し、コードを実行するためにパッケージ化されました!

その他:

他の2つのパラメーターhadoopconfは、調べるために提供できません。

  • mapreduce.input.fileinputformat.split.maxsizeが指定されている場合、同じノード上のブロックが結合され、maxsizeを超えると新しいスライスが生成されます。
  • mapreduce.input.fileinputformat.split.minsize.per.nodeの場合、プロセスの残りの部分はブロック1で結合され、minSizeを超える場合は、スライス全体が結合されます。それ以外の場合、ブロックは同じラックラック上のブロックとマージされます。
  • 上記と同じ方法で各ノードを処理し、次にすべてのブロックラック全体について、実施形態1によるプロセス。残りの部分(指定されている場合、mapreduce.input.fileinputformat.split.minsize.per.rack、およびminsizeを超える) .per.rack、フラグメント全体、それ以外の場合はブロックが保持され、残りはラック上のすべてのブロックの集合処理を待機します。


処理モードに応じた各ラック2、3、すべての処理の残りの要約、およびロジック1に従った処理。その後、スライスとして残ります。