这是我的设置:
wasb://mybucket
设置为默认FS的HDInsights Hadoop群集。我想做的是:
local1 > ssh client1
client1> hadoop fs -ls / #list contents of blob storage bucket.
我已将以下密钥从hdinsights头节点上的core-site.xml复制到/etc/hadoop/conf/core-site.xml
:
...ShellDecryptionKeyProvider
不幸的是,这需要ShellDecryptionKeyProvider
来呼叫。在Windows上,这是一个命令行可执行文件。我不知道如何为linux提供。
这是输出:
[rathboma@client1 yum.repos.d]$ hadoop fs -ls /
15/03/04 23:02:12 INFO impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
15/03/04 23:02:13 INFO impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
15/03/04 23:02:13 INFO impl.MetricsSystemImpl: azure-file-system metrics system started
ls: org.apache.hadoop.fs.azure.KeyProviderException: Script path is not specified via fs.azure.shellkeyprovider.script
有没有人设法在Azure上的linux机器上与blob存储器进行通信?我如何配置它?
答案 0 :(得分:1)
而不是尝试使用Hadoop fs命令,它是否可以直接访问存储?如果查看https://www.npmjs.com/package/azure-storage,您会发现可以通过Node直接访问blob存储,而不是依赖于Hadoop类。以下示例应列出存储容器中的所有文件/ blob:
var account = 'storaccount' // This is just the first part of the storage account name (the part before the first '.'')
var key = 'BASE64KEYGOESHERE==' // Retrieve the key from the Storage section of the Azure Portal
var container = 'clustercontainer' // this is the container name associated with the cluster
var azure = require('azure-storage');
var blobService = azure.createBlobService(account,key);
var i = 0;
var ct=null;
do {
blobService.listBlobsSegmented(container, ct, function(error, result, response){
if(!error){
i++;
console.log("Result set", i, ":")
for(var blob in result.entries) { console.log(result.entries[blob].name); }
console.log("Continuation? : ", result.continuationToken);
ct = result.continuationToken;
} else {
ct = null;
console.log("Error:");
console.log(error);
}
});
} while(ct);
还有其他一些可用的API(Java,Python),或者跨平台的CLI(https://github.com/Azure/azure-xplat-cli)可能更适合使用您需要如何与存储进行交互。
如果您真的想尝试使用client1中的Hadoop fs函数,可以尝试从client1的设置文件中删除fs.azure.account.keyprovider.mybucket.blob.core.windows.net
属性,然后将未加密的存储访问密钥放入{{1 }}。如果未指定keyprovider,则应按原样使用访问密钥。