Hive ストリーミング ジョブを使用して、HDInsight で C# のデータを処理しています。データを処理するために、スクリプトは次のように Azure に BLOB として保存されている xml ファイルを読み取る必要があります。
OperationContext oc = new OperationContext();
CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials(asvAccount, asvKey), true);
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("myContainer");
CloudBlockBlob blob = container.GetBlockBlobReference("file/f.xml");
MemoryStream stream;
using (stream = new MemoryStream())
{
blob.DownloadToStream(stream);
stream.Seek(0, SeekOrigin.Begin);
string reader = new StreamReader(stream).ReadToEnd();
elem = XElement.Parse(reader);
return elem;
}
コードはローカル マシンで動作します。ストレージ アカウントからファイルを読み取り、elem を正しく返しますが、クラスターで実行しようとすると、Microsoft.WindowsAzure.Storage.dll を介して追加しても Microsoft.WindowsAzure.Storage.dll を見つけるのに問題があります。 fs.put() を /Hive/Resources/ に追加し、Hive ポータルで「ファイルを追加」します。
次のようにファイルにアクセスしようとすると:
XElement.Load("hdinsighttesting.blob.core.windows.net/repexdeema/pr/productGuidMapping.xml");
また
XElement.Load("asv://myContainer@myCluster.blob.core.windows.net/file/f.xml"); then I get the following error:
Could not find a part of the path 'c:\hdfs\mapred\local\taskTracker\admin\jobcache\job_201307200714_0079\attempt_201307200714_0079_m_000000_0\work\storageAccount.blob.core.windows.net\myContainer\pr\productGuidMapping.xml
BLOB ストレージに直接アクセスするのではなく、そのディレクトリを参照することを主張している理由がわかりません。そのディレクトリに移動しようとしましたが、存在しません。
LocalResource を使用することも考えましたが、Hive が hdfs にアップロードしている dll ファイルを見つけることを拒否しているため、私の場合は不可能です。
ありがとう