MapReduce-ORC、RcFileファイルを読み取ります

I.はじめに

MRタスクが関連するハイブテーブルデータを処理する場合、形式はorcとrcFileです。2つの処理方法を以下に説明します。

2.レイジーバージョンはORC、RcFileファイルを読み取ります

最初はmrに慣れていなかったので、textFormatの入力モードは1つしかありませんでした。そのため、orcとrcFileの形式のハイブデータに遭遇し、mrで読み取る必要がある場合、最初にhdfsテキストデータをから再出力しました。 INSERT OVERWRITE DIRECTORYを使用してハイブテーブルを作成します。次に、mrを使用してテキストファイルを読み取ります。この方法は、怠惰で元のハイブデータが大きくない場合に適しています。元のハイブテーブルデータが大きい場合、変換操作はより多くのリソースを消費します。 。

function insert() {
hive -e"
INSERT OVERWRITE DIRECTORY '$path'
select * from Table where dt='$dt';"
}

この時点で、TextFormatを使用してファイルを読み取り、マッパーを生成するプロセスを実行します。

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class TextMapper extends Mapper<LongWritable, Text, Text, Text> {

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        try {
            String[] s = value.toString().split("\t");
            String _key = s[0];
            String _value = s[1];
            context.write(new Text(_key), new Text(_value));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

3.公式バージョンはORC、RcFileファイルを読み取ります

1.pomの依存関係

主にhadoopmap-reduceおよびorg.orc関連の依存関係

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.3</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>2.7.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.orc</groupId>
            <artifactId>orc-core</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.orc</groupId>
            <artifactId>orc-mapreduce</artifactId>
            <version>1.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive.hcatalog</groupId>
            <artifactId>hive-hcatalog-core</artifactId>
            <version>0.13.1</version>
        </dependency>

2.orcファイルを読みます

Orcファイルを読み取るには、対応するOrcStructとOriInputFormatを選択する必要があります

A.orcファイルを読み取るマッパー

getFiledValue()は、対応する列のコンテンツを選択し、コンテンツをWritableComparableタイプとして直接取得します。これには、toString変換が必要です。

public static class OrcMapper extends Mapper<LongWritable, OrcStruct, Text, Text> {

@Override
protected void map(LongWritable key, OrcStruct value, Context context) throws IOException, InterruptedException {

    String key = value.getFieldValue(0).toString();
    context.write(new Text(key), new Text(value.getFieldValue(1)));
    context.write(new Text(key), new Text(value.getFieldValue(2)));

    }
}

B.マッパーを追加する

import org.apache.hadoop.mapreduce.lib.input.MultipleInputs;

MultipleInputs.addInputPath(job, new Path(input), OrcInputFormat.class, OrcMapper.class);

3.RcFileファイルを読み取ります

A.RcFileファイルを読み書きするためのマッパー

ここで取得される値はBytesRefWritableの形式であり、文字列タイプの文字を取得するには、逆シリアル化して読み取る必要があります。

import org.apache.hadoop.hive.serde2.columnar.BytesRefArrayWritable;
import org.apache.hadoop.hive.serde2.columnar.BytesRefWritable;

public static class RcFileMapper extends Mapper<LongWritable, BytesRefArrayWritable, Text, Text> {

    @Override
    protected void map(LongWritable key, BytesRefArrayWritable value, Context context)
            throws IOException, InterruptedException {

        BytesRefWritable _id = value.get(0);
        BytesRefWritable _value = value.get(1);

        String id = LazyBinaryRCFileUtils.readString(_id).trim();
        String value = LazyBinaryRCFileUtils.readString(_value).trim();
        
        context.write(new Text(id), new Text(value));
    }
}

B.マッパーを追加する

MultipleInputs.addInputPath(job, new Path(input), RcfileCombineFileInputFormat.class, RcFileMapper.class);

4.まとめ

怠惰なバージョンの形成は、最初は適切な学習が不足していたために発生したため、この戦略を採用して、データをさらに一歩進めて変換し、配置します。生徒はこれを警告として受け止め、より多くのより良い方法を学ぶ必要があります。

おすすめ

転載: blog.csdn.net/BIT_666/article/details/124267104