2017-07-10 8 views
1

Azure Blobsに格納されているIP(Weblogs)を持つavroファイルがたくさんあります。 IPを場所にマップしたいと思います。 Azure Data Lake Analytics(ADLA)でそれを行うにはどうすればいいですか?IPアドレスをAzureデータレイク解析でマップする

今私は、このルックアップを行うためにすべてのip-locationデータを含む113MBの.mmdbファイルを読み込むjavaライブラリでMaxmind IPデータベースを使用するスパークジョブを持っています。私は現在、この仕事をADLAに移すことが可能かどうか調査しています

MaxmindはC#ライブラリも提供しているので問題ありません。しかし、この大きなmmdbファイルをどのように扱うべきかは明らかではありません。このファイルを読み込み、次にルックアップに使用する必要があります。明らかに、各IPルックアップのファイルを読むのは速くないでしょう。これはどのようにしてADLAで処理できるのですか?またはADLAはこの種の操作には適していませんか?

私は通常のプログラム実行を持っていた場合、私はこのような検索を行うだろう:

using (var reader = new Reader("GeoIP2-City.mmdb")) 
{ 
    foreach(var ip in ips) 
    { 
     var data = reader.Find<Dictionary<string, object>>(ip); 
     ... 
    } 
} 

maxmind DBはここにあります:https://dev.maxmind.com/geoip/geoip2/downloadable/(私はイムは、現在使用してデータベースを購入したことに注意してください) とC#ライブラリは、ここでそれを読むために:https://github.com/maxmind/MaxMind-DB-Reader-dotnet

+0

正直なところ、これはデータベース操作のように聞こえます。つまり、ルックアップに参加しますが、私はMaxmindデータについて何も知らないのです。もっと教えていただけますか?あなたはそのファイルを支払ってダウンロードしましたか? – wBob

+0

「通常の」コマンドラインプログラムでデータベースをどのように使用するかについて少し答えを広げました – viblo

+0

ADLAテーブルを使用して大きなファイルを保存したとしたら、ルックアップテーブルと同じように使用しましたか?自然キー検索に似たip(同じ形式を持つと仮定)に基づいて、入力ファイルをADLAテーブルに直接結合することができます。 – jatal

答えて

2

(ここではAzureのデータ湖チーム)

をあなたはU-SQLのDEPLOY RESOURCE文と、この目的のためにUDOを使用することができます。

まず、ファイルをdatalakeストアにアップロードする必要があります。次に、DEPLOY RESOURCEを使用して、U-SQLシステムに、スクリプトが実行されている各頂点にそのファイルをコピーするように指示します。次に、スクリプトはC#コードを使用してファイルを読み取ります。

DEPLOY RESOURCE "/helloworld.txt"; 

@departments = 
    SELECT * 
    FROM (VALUES 
     (31, "Sales"), 
     (33, "Engineering"), 
     (34, "Clerical"), 
     (35, "Marketing") 
    ) AS D(DepID, DepName); 


@departments = 
    PROCESS @departments 
    PRODUCE DepID int, 
      DepName string, 
      HelloWorld string 
    USING new Demo.HelloWorldProcessor(); 

OUTPUT @departments 
    TO "/departments.tsv" 
    USING Outputters.Tsv(); 

ここにU-SQLプロセッサUDOがあります。

using Microsoft.Analytics.Interfaces; 
using Microsoft.Analytics.Types.Sql; 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 

namespace Demo 
{ 
    [SqlUserDefinedProcessor] 
    public class HelloWorldProcessor : IProcessor 
    { 
     private string hw; 

     public HelloWorldProcessor() 
     { 
      this.hw = System.IO.File.ReadAllText("helloworld.txt"); 
     } 

     public override IRow Process(IRow input, IUpdatableRow output) 
     { 
      output.Set<int>("DepID", input.Get<int>("DepID")); 
      output.Set<string>("DepName", input.Get<string>("DepName")); 
      output.Set<string>("HelloWorld", hw); 
      return output.AsReadOnly(); 
     } 
    } 
} 
+0

しかし、このコードでは中間部分はそれぞれhelloworld.txt部署? helloworldが100MB以上で、解析すると重くなると非常に高価になりますか? (私はこのgeo ipデータベースに関する詳細を私の質問に更新しました) – viblo

+0

また、配備されたリソースのサイズにはいくつかの制限がありますか? Azure Stream Analyticsで参照されるデータは最大100MBになりますが、これは私の使用例では十分ではありません。 – viblo

+0

@viblo - 私はUDOでより明確になるようにサンプルを修正しました。リーチ行ごとに一度は読み込まず、代わりに頂点ごとに一度読み込むことは明らかです。 – saveenr

関連する問題