2015-03-04 1 views
2

Вот мои настройки:Как использовать хранилище Azure blob от моего клиента Hadoop на базе Linux?

  1. HDInsights Hadoop кластера с wasb://mybucket установить в качестве ФС по умолчанию.
  2. Виртуальная машина CentOS с установленными пакетами RPP 2.2 RPM. (Назовем его client1)

То, что я хочу сделать, это:

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

Я скопировал следующие ключи к /etc/hadoop/conf/core-site.xml из колонкового site.xml на узле hdinsights головки:

  • fs.defaultFs - wasb: // ...
  • fs.azure.account.key.mybucket.blob.core.windows.net - случайная последовательность
  • fs.azure.account.keyprovider.mybucket.blob.core.windows.net - ...ShellDecryptionKeyProvider

К сожалению, это требует ShellDecryptionKeyProvider окликнуть. В окнах это исполняемый файл командной строки. Я не знаю, как это сделать для Linux.

Вот результат:

[[email protected] 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 

Кто-нибудь удалось поговорить с хранения больших двоичных объектов с Linux машины на Azure? Как мне его настроить?

ответ

1

Вместо того, чтобы пытаться использовать команды Hadoop fs, будет ли он работать только для доступа к хранилищу напрямую? Если вы посмотрите на https://www.npmjs.com/package/azure-storage, вы обнаружите, что вы можете получить доступ к хранилищу blob напрямую через узел, а не полагаться на классы Hadoop. Следующий пример должен перечислить всех л файлов/сгустков в контейнере для хранения:

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), что может быть лучше подходит в зависимости от того, как вам нужно взаимодействовать с хранилищем.

Если вы действительно хотите использовать функции Hadoop fs от client1, вы можете попробовать удалить свойство fs.azure.account.keyprovider.mybucket.blob.core.windows.net из файла настроек client1, а затем просто поместить ключ незашифрованного доступа к хранилищу в fs.azure.account.key.mybucket.blob.core.windows.net. Если keyprovider не указан, ключ доступа должен использоваться как есть.

+0

Интересное предложение, но полностью не отвечает на вопрос. –

+0

Почему вы так думаете? Я объяснил причины, по которым зашифрованный ключ (полагающийся на ShellDecryptionKeyProvider) не будет работать напрямую, при условии альтернативы для доступа к хранилищу blob, не проходя через реализацию Hadoop wasb, а затем также предоставил способ получить реализацию Hadoop wasb, работающую на client1, используя незашифрованный ключ. – RickH

+0

ha, пропустил этот пункт об использовании незашифрованного ключа. Возможно, это должно было быть наверху. –

 Смежные вопросы

  • Нет связанных вопросов^_^