私は、Netcat を監視したり、ソースとして Exec を使用してログを追跡したりできる Flume サービスをセットアップしました。メモリをチャネルとして使用し、Avro をシンクとして使用しています (Thrift はドキュメントで指定されていますが、Flume 1.3 または 1.4 では動作しないようです)。
メッセージを受信するように C# ソケット サーバーをセットアップし、バイト ストリームを取得しました。Encoding.UTF8.GetString(buffer) を使用してそれらを読み取ると、次のようになります。
"\0\0\0\0\0\0\0\0\00�����Tt������5\ne\0�����Tt������5\ne\0\0appendBatch\0\0�\0�127.0.0.1 - - [12/Nov/2013:22:42:50 +0000] \"GET /docs/appdev/index.html HTTP/1.1\" 200 7645\0�127.0.0.1 - - [12/Nov/2013:22:44:07 +0000] \"GET /docs/appdev/introduction.html HTTP/1.1\" 200 8619\0�127.0.0.1 - - [12/Nov/2013:22:44:09 +0000] \"GET /docs/appdev/installation.html HTTP/1.1\" 200 9045\0�127.0.0.1 - - [12/Nov/2013:22:44:12 +0000] \"GET /docs/appdev/deployment.html HTTP/1.1\" 200 18800\0�127.0.0.1 - - [12/Nov/2013:22:49:07 +0000] \"GET /docs/appdev/source.html HTTP/1.1\" 200 24554\0�127.0.0.1 - - [12/Nov/2013:22:50:38 +0000] \"GET /docs/appdev/processes.html HTTP/1.1\" 200 30743\0�127.0.0.1 - - [12/Nov/2013:22:51:39 +0000] \"GET /docs/appdev/sample/ HTTP/1.1\" 200 1852\0�0:0:0:0:0:0:0:1 - - [12/Nov/2013:22:51:48 +0000] \"GET /sample HTTP/1.1\" 404 963\0�0:0:0:0:0:0:0:1 - - [12/Nov/2013:22:51:48 +0000] \"GET /favicon.ico HTTP/1.1\" 200 21630\0�0:0:0:0:0:0:0:1 - - [12/Nov/2013:23:02:13 +0000] \"GET /sample HTTP/1.1\" 404 963\0"
したがって、明らかにデータを取得していますが、ある種の正規表現抽出を行うのではなく、適切に逆シリアル化したいと考えています。公式の Avro C# ライブラリがあり、逆シリアル化ライブラリを含む Microsoft Hadoop ライブラリがあることがわかります。逆シリアル化するローカル オブジェクトを作成しました。
[DataContract]
public class AvroEvent
{
[DataMember]
public byte[] Body { get; set; }
}
これでデシリアライズしてみてください:
client = serverSocket.EndAccept(result);
var myNetworkStream = new NetworkStream(client);
myNetworkStream.Read(buffer, 0, size);
var avro = new AvroSerializer(typeof(AvroEvent));
var deser = avro.Deserialize(myNetworkStream);
次に、次のエラーが表示されます。
System.InvalidOperationException was unhandled
HResult=-2146233079
Message=Unexpected number of bytes.
Source=Microsoft.Hadoop.Avro
私はほぼ間違いなくこれらすべてを間違った方法で行っており、C# を使用しないようにと言う人もいると思いますが、Google のソースがほとんどなくなってしまったので、他の誰かが実際にこれを行って、私を正しい方向に向けてください、私は非常に感謝しています
トビー