小さなファイルでの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に従った処理。その後、スライスとして残ります。