Java 앱을 사용하여 Azure Data Lake Analytics 관리
중요
Azure Data Lake Analytics 2024년 2월 29일에 사용 중지되었습니다. 이 공지 사항을 통해 자세히 알아봅니다.
데이터 분석의 경우 organization Azure Synapse Analytics 또는 Microsoft Fabric을 사용할 수 있습니다.
이 문서에서는 Azure Java SDK를 사용하여 작성한 앱을 사용하여 Azure Data Lake Analytics 계정, 데이터 원본, 사용자 및 작업을 관리하는 방법을 설명합니다.
필수 구성 요소
- JDK(Java Development Kit) 8(Java 버전 1.8 사용)
- IntelliJ 또는 다른 적절한 Java 개발 환경. 이 문서의 지침에서는 IntelliJ를 사용합니다.
- Microsoft Entra 애플리케이션을 만들고 클라이언트 ID, 테넌트 ID 및 키를 검색합니다. Microsoft Entra 애플리케이션에 대한 자세한 내용과 클라이언트 ID를 가져오는 방법에 대한 지침은 포털을 사용하여 Active Directory 애플리케이션 및 서비스 주체 만들기를 참조하세요. 애플리케이션을 만들고 키를 생성했다면 회신 URI 및 키를 포털에서 사용할 수 있습니다.
Microsoft Entra ID 사용하여 인증
다음 코드 조각은 애플리케이션이 자체 자격 증명을 제공하는 비대화형 인증에 대한 코드를 제공합니다.
Java 애플리케이션 만들기
- 명령줄 앱 템플릿을 사용하여 IntelliJ를 열고 Java 프로젝트를 만듭니다.
- 화면 왼쪽에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 프레임워크 지원 추가를 선택합니다. Maven을 선택하고 확인을 선택합니다.
- 새로 만든 "pom.xml" 파일을 열고 </version> 태그 및 </project> 태그 사이에 다음 텍스트의 코드 조각을 추가합니다.
<dependencies>
<dependency>
<groupId>com.azure.resourcemanager</groupId>
<artifactId>azure-resourcemanager-datalakeanalytics</artifactId>
<version>1.0.0-beta.1</version>
</dependency>
<dependency>
<groupId>com.azure.resourcemanager</groupId>
<artifactId>azure-resourcemanager-datalakestore</artifactId>
<version>1.0.0-beta.1</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-file-datalake</artifactId>
<version>12.7.2</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>
파일 > 설정 > 빌드 > 실행 > 배포로 이동합니다. 빌드 도구 > Maven > 가져오기를 선택합니다. Maven 프로젝트 자동으로 가져오기를 선택합니다.
Main.java
를 열고 기존 코드 블록을 다음 코드로 바꿉니다.
import com.azure.core.credential.TokenCredential;
import com.azure.core.management.AzureEnvironment;
import com.azure.core.management.profile.AzureProfile;
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.resourcemanager.datalakeanalytics.DataLakeAnalyticsManager;
import com.azure.resourcemanager.datalakeanalytics.models.DataLakeAnalyticsAccount;
import com.azure.resourcemanager.datalakestore.DataLakeStoreManager;
import com.azure.resourcemanager.datalakestore.models.DataLakeStoreAccount;
import com.azure.storage.file.datalake.DataLakeFileClient;
import com.azure.storage.file.datalake.DataLakeFileSystemClient;
import com.azure.storage.file.datalake.DataLakeServiceClient;
import com.azure.storage.file.datalake.DataLakeServiceClientBuilder;
import com.azure.storage.file.datalake.models.PathAccessControl;
import com.azure.storage.file.datalake.models.PathPermissions;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Collections;
import java.util.UUID;
public class Main {
private static String adlsAccountName;
private static String adlaAccountName;
private static String resourceGroupName;
private static String location;
private static String tenantId;
private static String subscriptionId;
private static String clientId;
private static String clientSecret;
private static String fileSystemName;
private static String localFolderPath;
private static DataLakeAnalyticsManager analyticsManager;
private static DataLakeStoreManager storeManager;
private static DataLakeStoreAccount storeAccount;
private static DataLakeAnalyticsAccount analyticsAccount;
private static DataLakeServiceClient serviceClient;
private static DataLakeFileSystemClient fileSystemClient;
private static DataLakeFileClient fileClient;
public static void main(String[] args) throws Exception {
adlsAccountName = "<DATA-LAKE-STORE-NAME>";
adlaAccountName = "<DATA-LAKE-ANALYTICS-NAME>";
resourceGroupName = "<RESOURCE-GROUP-NAME>";
location = "East US 2";
tenantId = "<TENANT-ID>";
subscriptionId = "<SUBSCRIPTION-ID>";
clientId = "<CLIENT-ID>";
clientSecret = "<CLIENT-SECRET>";
fileSystemName = "<DATALAKE-FILE-SYSTEM-NAME>";
localFolderPath = "C:\\local_path\\";
// ----------------------------------------
// Authenticate
// ----------------------------------------
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
ClientSecretCredential creds = new ClientSecretCredentialBuilder()
.clientId(clientId).tenantId(tenantId).clientSecret(clientSecret)
.authorityHost("https://login.microsoftonline.com/" + tenantId + "/oauth2/token")
.build();
setupClients(creds, profile);
// ----------------------------------------
// List Data Lake Store and Analytics accounts that this app can access
// ----------------------------------------
System.out.println(String.format("All ADL Store accounts that this app can access in subscription %s:", subscriptionId));
storeManager.accounts().list().forEach(acct -> System.out.println(acct.name()));
System.out.println(String.format("All ADL Analytics accounts that this app can access in subscription %s:", subscriptionId));
analyticsManager.accounts().list().forEach(acct -> System.out.println(acct.name()));
waitForNewline("Accounts displayed.", "Creating files.");
// ----------------------------------------
// Create a file in Data Lake Store: input1.csv
// ----------------------------------------
createFile("input1.csv", "123,abc", true);
waitForNewline("File created.", "Submitting a job.");
// ----------------------------------------
// Submit a job to Data Lake Analytics
// ----------------------------------------
String script = "@input = EXTRACT Row1 string, Row2 string FROM \"/input1.csv\" USING Extractors.Csv(); OUTPUT @input TO @\"/output1.csv\" USING Outputters.Csv();";
UUID jobId = submitJobByScript(script, "testJob", creds);
waitForNewline("Job submitted.", "Getting job status.");
// ----------------------------------------
// Download job output from Data Lake Store
// ----------------------------------------
downloadFile("output1.csv", localFolderPath + "output1.csv");
waitForNewline("Job output downloaded.", "Deleting file.");
deleteFile("output1.csv");
waitForNewline("File deleted.", "Done.");
}
public static void setupClients(TokenCredential creds, AzureProfile profile) {
analyticsManager = DataLakeAnalyticsManager.authenticate(creds, profile);
storeManager = DataLakeStoreManager.authenticate(creds, profile);
createAccounts();
serviceClient = new DataLakeServiceClientBuilder().endpoint(storeAccount.endpoint()).credential(creds).buildClient();
fileSystemClient = serviceClient.createFileSystem(fileSystemName);
}
public static void waitForNewline(String reason, String nextAction) {
if (nextAction == null)
nextAction = "";
System.out.println(reason + "\r\nPress ENTER to continue...");
try {
System.in.read();
} catch (Exception e) {
}
if (!nextAction.isEmpty()) {
System.out.println(nextAction);
}
}
// Create accounts
public static void createAccounts() {
// Create ADLS account
storeAccount = storeManager.accounts().define(adlsAccountName)
.withRegion(location)
.withExistingResourceGroup(resourceGroupName)
.create();
analyticsAccount = analyticsManager.accounts().define(adlaAccountName)
.withRegion(location).withExistingResourceGroup(resourceGroupName)
.withDefaultDataLakeStoreAccount(adlsAccountName)
.withDataLakeStoreAccounts(Collections.EMPTY_LIST)
.create();
}
// Create a file
public static void createFile(String path, String contents, boolean force) {
byte[] bytesContents = contents.getBytes();
DataLakeFileClient fileClient = fileSystemClient.createFile(path,force);
PathAccessControl accessControl = fileClient.getAccessControl();
fileClient.setPermissions(PathPermissions.parseOctal("744"), accessControl.getGroup(), accessControl.getOwner());
fileClient.upload(new ByteArrayInputStream(bytesContents), bytesContents.length);
}
// Delete a file
public static void deleteFile(String filePath) {
fileSystemClient.getFileClient(filePath).delete();
}
// Download a file
private static void downloadFile(String srcPath, String destPath) throws IOException {
fileClient = fileSystemClient.getFileClient(srcPath);
OutputStream outputStream = new FileOutputStream(destPath);
fileClient.read(outputStream);
outputStream.close();
}
}
코드 조각에서 호출되는 매개 변수 값을 제공합니다.
adlsAccountName
adlaAccountName
resourceGroupName
location
tenantId
subscriptionId
clientId
clientSecret
fileSystemName
localFolderPath
다음 단계
- U-SQL에 대해 알아보려면 Azure Data Lake Analytics U-SQL 언어 시작 및 U-SQL 언어 참조를 참조하세요.
- 관리 작업을 보려면 Azure Portal을 사용하여 Azure Data Lake Analytics 관리를 참조하세요.
- 데이터 레이크 분석에 대한 개요를 보려면 Azure 데이터 레이크 분석 개요를 참조하세요.