如何从基于Linux的Hadoop客户端使用Azure blob存储?

时间:2015-03-04 23:16:27

标签: linux azure hadoop

这是我的设置:

  1. wasb://mybucket设置为默认FS的HDInsights Hadoop群集。
  2. 安装了HDP 2.2 RPM软件包的CentOS虚拟机。 (我们称之为client1)
  3. 我想做的是:

    local1 > ssh client1
    client1> hadoop fs -ls / #list contents of blob storage bucket.
    

    我已将以下密钥从hdinsights头节点上的core-site.xml复制到/etc/hadoop/conf/core-site.xml

    • fs.defaultFs - wasb:// ...
    • fs.azure.account.key.mybucket.blob.core.windows.net - 随机字符串
    • fs.azure.account.keyprovider.mybucket.blob.core.windows.net - ...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存储器进行通信?我如何配置它?

1 个答案:

答案 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(JavaPython),或者跨平台的CLI(https://github.com/Azure/azure-xplat-cli)可能更适合使用您需要如何与存储进行交互。

如果您真的想尝试使用client1中的Hadoop fs函数,可以尝试从client1的设置文件中删除fs.azure.account.keyprovider.mybucket.blob.core.windows.net属性,然后将未加密的存储访问密钥放入{{1 }}。如果未指定keyprovider,则应按原样使用访问密钥。