如何从基于linux的hadoop客户端使用azure blob存储?

tvokkenx  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(518)

以下是我的设置:
hdinsights hadoop群集 wasb://mybucket 设置为默认fs。
安装了hdp2.2rpm软件包的centos虚拟机(我们称之为client1)
我想做的是:

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

我把下列钥匙复制到 /etc/hadoop/conf/core-site.xml 从hdinsights head节点上的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存储对话吗?我需要如何配置它?

6l7fqoea

6l7fqoea1#

与其尝试使用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函数,可以尝试删除 fs.azure.account.keyprovider.mybucket.blob.core.windows.net 属性,然后将未加密的存储访问密钥放入 fs.azure.account.key.mybucket.blob.core.windows.net . 如果未指定密钥提供程序,则应按原样使用访问密钥。

相关问题