2016-11-28 1 views
0

シナリオはファイル(Input)を処理する必要があり、レコードごとに入力ファイルの特定のフィールドがHadoopクラスタに格納されているフィールドと一致するかどうかを確認する必要があります。MRJobでHIVEを接続する

MRJobを使用して入力ファイルを処理し、HIVEを使用してhadoopクラスタからデータを取得することを考えています。私は、MRJobモジュールの内部でHIVEを接続することが可能かどうかを知りたいと思います。もしそうなら、それを行う方法?

私の要件を満たすための理想的なアプローチではない場合は、

Hadoop、MRJob、Hiveの新機能です。

いくつかご提案ください。

答えて

0

"Hadoopクラスタに格納されているフィールドに一致します。" - >このフィールドにフィールドが存在するかどうか検索する必要があることを意味しますか?

合計でスキャンする必要のあるファイル数はどれくらいですか?

1つの解決策は、HBaseテーブル内のすべての単一項目をロードし、入力ファイル内のすべてのレコードに対して、テーブルからレコードを取得することです。 GETが成功した場合、レコードはHDFS内の他の場所に存在するか、そうでない場合は存在しません。各HBaseレコードに一意の識別子が必要で、同じ識別子も入力ファイルに存在するはずです。

また、ハイブに接続することもできますが、すべてのHDFSファイルを1つのハイブテーブルにロードできるようにするには、スキーマを厳密にする必要があります。 HBaseは実際に列を気にしません(ColumnFamiliesのみ必要です)。 MapReduceとHiveのもう一つの欠点は、リアルタイムに近いHBaseに比べて速度が遅いことです。

これが役に立ちます。

+0

はい。私は、フィールド「ADD1」の値かどうかを確認する必要が 名、ADD1、ADD2、郵便番号、 マーク、31 Maybush、XXX、WF1 5XY :例 のための私の入力ファイルは、この 入力ファイルのようなものです入力ファイルの "Mark"の "31 Maybush"は同じ名前のclusterのデータと一致します。 – user1703319

+0

すべてのファイルのスキーマは同じですか?はいの場合、Hiveテーブルを作成して、新しいHiveテーブルに保存している数百/数千のファイルをすべて読み込むことができます。その後、MapReduceからHiveクエリを実行するために接続することができます。あなたのHiveクエリは次のようになります:SELECT * FROM huge_hive_table where add1 = '31 Maybush 'AND name =' Mark ';もちろん、各入力ファイルの行が読み込まれるにつれ、MaybushとMarkを動的に変更する必要があります。 – AkashNegi

+0

上記のアプローチの問題は、Hiveの各クエリにMRジョブがあるため、各行を比較しているので、入力ファイルの各行に対してMRジョブが実行されることです。あなたが比較のために2000のラインと2000のMRジョブを持っているならば。 – AkashNegi

関連する問題