[HADOOP] webhdfs API를 사용하여 Azure datalake에 액세스하는 방법
HADOOPwebhdfs API를 사용하여 Azure datalake에 액세스하는 방법
Azure에서 데이터 수신 서비스를 평가하기 시작했습니다. 우리는 호수를 만들었고 포털을 통해 우리는 서비스에 대한 두 개의 공개 URL을 볼 수 있습니다. (하나는 https : // 구성표이고 다른 하나는 adl : // 구성표입니다.)
datalake 문서에는 실제로 webHDFS REST API와 ADL이라는 두 개의 인터페이스가 있다고 나와 있습니다. 그래서, 나는 https : // 계획이 나에게 wehHDFS 인터페이스를 가져다 줄 것이라고 가정하고있다. 그러나이 인터페이스를 사용하는 것에 대해서는 Azure에서 더 이상 정보를 찾을 수 없습니다.
웹 브라우저와 컬로 주어진 https : // URL을 훑어 보았습니다. 서비스가 응답 중입니다. 응답은 JSON이며 데이터 마킹은 Hadoop의 인스턴스이므로 예상대로입니다. 그러나 나는 내 파일에 접근 할 수 없다. [나는 포털을 통해 우리 호수에 업로드했다.]
예를 들어, "/foo.txt"에 대한 GET을 수행하면 응답은 ResourceNotFound 오류입니다.
일반적인 Hadoop HDFS 구문 인 "/webhdfs/v1/foo.txt"를 사용하여 GET을 수행하면 응답은 AuthenticationFailed 오류입니다. 추가 텍스트는 누락 된 액세스 토큰을 나타냅니다. 이것은 더 유망한 것처럼 보입니다. 그러나 이러한 액세스 토큰을 생성하는 방법에 대해서는 아무 것도 없습니다.
ADL 인터페이스, .NET 및 Visual Studio 사용에 대한 몇 가지 문서가 있지만 처음에 원하는 것은 아닙니다.
어떤 도움을 많이 주셔서 감사합니다!
해결법
-
==============================
1.필자는 Matthew Hicks가 컬을 사용하여이를 수행하는 방법을 설명한이 포럼 게시물에 빚을졌습니다. 나는 그것을 가져 와서 PowerShell로 감쌌다. 이 작업을 수행 할 수있는 방법은 여러 가지가있을 것이라고 확신하지만 작동하는 방법은 다음과 같습니다.
필자는 Matthew Hicks가 컬을 사용하여이를 수행하는 방법을 설명한이 포럼 게시물에 빚을졌습니다. 나는 그것을 가져 와서 PowerShell로 감쌌다. 이 작업을 수행 할 수있는 방법은 여러 가지가있을 것이라고 확신하지만 작동하는 방법은 다음과 같습니다.
먼저 아래에 언급 된 client_id 및 client_secret을 채울 수 있도록 AAD 응용 프로그램을 설정하십시오. 대화 형 로그인을 원한다면 위의 포럼 게시물에이 접근 방식에 대한 링크가 있습니다.
그런 다음 처음 5 줄의 설정을 채우고 다음 PowerShell 스크립트를 실행하십시오.
$client_id = "<client id>"; $client_secret = "<secret>"; $tenant = "<tenant>"; $adlsAccount = "<account>"; cd D:\path\to\curl #authenticate $cmd = { .\curl.exe -X POST https://login.microsoftonline.com/$tenant/oauth2/token -F grant_type=client_credentials -F resource=https://management.core.windows.net/ -F client_id=$client_id -F client_secret=$client_secret }; $responseToken = Invoke-Command -scriptblock $cmd; $accessToken = (ConvertFrom-Json $responseToken).access_token; #list root folders $cmd = {.\curl.exe -X GET -H "Authorization: Bearer $accessToken" https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS }; $foldersResponse = Invoke-Command -scriptblock $cmd; #loop through directories directories (ConvertFrom-Json $foldersResponse).FileStatuses.FileStatus | ForEach-Object { $_.pathSuffix } #list files in one folder $cmd = {.\curl.exe -X GET -H "Authorization: Bearer $accessToken" https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/weather/?op=LISTSTATUS }; $weatherResponse = Invoke-Command -scriptblock $cmd; (ConvertFrom-Json $weatherResponse).FileStatuses.FileStatus | ForEach-Object { $_.pathSuffix } #download one file $cmd = {.\curl.exe -L "https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/weather/2007small.csv?op=OPEN" -H "Authorization: Bearer $accessToken" -o d:\temp\curl\2007small.csv }; Invoke-Command -scriptblock $cmd; #upload one file $cmd = {.\curl.exe -i -X PUT -L "https://$adlsAccount.azuredatalakestore.net/webhdfs/v1/weather/new2007small.csv?op=CREATE" -T "D:\temp\weather\smallcsv\new2007small.csv" -H "Authorization: Bearer $accessToken" }; Invoke-Command -scriptblock $cmd;
from https://stackoverflow.com/questions/36410042/how-to-access-azure-datalake-using-the-webhdfs-api by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 열쇠에 대한 최대 가치 발견 (0) | 2019.06.21 |
---|---|
[HADOOP] 지도 축소의 보조 정렬 (0) | 2019.06.21 |
[HADOOP] Flume - MySQL에서 Hadoop으로 데이터 마이그레이션 (0) | 2019.06.21 |
[HADOOP] Hadoop Map 참조 정적 객체 줄이기 (0) | 2019.06.21 |
[HADOOP] Hadoop : JPS에서 Java가 설치되지 않음 (0) | 2019.06.21 |