Azure Data Lake Storage Gen1 Java SDK를 사용하여 폴더 만들기, 데이터 파일 업로드 및 다운로드 등의 기본 작업을 수행하는 방법을 알아봅니다. Data Lake Storage Gen1에 대한 자세한 내용은 Azure Data Lake Storage Gen1을 참조하세요.
Azure Data Lake Storage Gen1 Java API 문서에서 Data Lake Storage Gen1용 Java SDK API 문서에 액세스할 수 있습니다.
필수 조건
- Java 개발 키트(JDK 7 이상, Java 버전 1.7 이상 사용)
- Data Lake Storage Gen1 계정. Azure Portal을 사용하여 Azure Data Lake Storage Gen1 시작의 지침을 따릅니다.
- Maven. 이 자습서에서는 빌드 및 프로젝트 종속성을 위해 Maven을 사용합니다. Maven 또는 Gradle과 같은 빌드 시스템을 사용하지 않고 빌드할 수 있지만 이러한 시스템은 종속성을 훨씬 쉽게 관리할 수 있습니다.
- (선택 사항) IntelliJ IDEA 또는 Eclipse 와 유사한 IDE입니다.
Java 애플리케이션 만들기
GitHub에서 사용할 수 있는 코드 샘플은 저장소에서 파일을 만들고, 파일을 연결하고, 파일을 다운로드하고, 저장소의 일부 파일을 삭제하는 프로세스를 안내합니다. 문서의 이 섹션에서는 코드의 주요 부분을 안내합니다.
명령줄에서 mvn 아키타입 을 사용하거나 IDE를 사용하여 Maven 프로젝트를 만듭니다. IntelliJ를 사용하여 Java 프로젝트를 만드는 방법에 대한 지침은 여기를 참조 하세요. Eclipse를 사용하여 프로젝트를 만드는 방법에 대한 지침은 여기를 참조 하세요.
Maven pom.xml 파일에 다음 종속성을 추가합니다. /project> 태그 앞에< 다음 코드 조각을 추가합니다.
<dependencies> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-data-lake-store-sdk</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.21</version> </dependency> </dependencies>첫 번째 종속성은 maven 리포지토리에서 Data Lake Storage Gen1 SDK(
azure-data-lake-store-sdk)를 사용하는 것입니다. 두 번째 종속성은 이 애플리케이션에 사용할 로깅 프레임워크(slf4j-nop)를 지정하는 것입니다. Data Lake Storage Gen1 SDK는 SLF4J 로깅 파사드를 사용하므로 Log4j, Java 로깅, Logback 등과 같은 인기 있는 여러 로깅 프레임워크 중에서 선택하거나 로깅을 사용하지 않을 수도 있습니다. 이 예제에서는 로깅을 사용하지 않도록 설정하므로 slf4j-nop 바인딩을 사용합니다. 앱에서 다른 로깅 옵션을 사용하려면 여기를 참조하세요.애플리케이션에 다음 import 문을 추가합니다.
import com.microsoft.azure.datalake.store.ADLException; import com.microsoft.azure.datalake.store.ADLStoreClient; import com.microsoft.azure.datalake.store.DirectoryEntry; import com.microsoft.azure.datalake.store.IfExists; import com.microsoft.azure.datalake.store.oauth2.AccessTokenProvider; import com.microsoft.azure.datalake.store.oauth2.ClientCredsTokenProvider; import java.io.*; import java.util.Arrays; import java.util.List;
인증
- 애플리케이션에 대한 최종 사용자 인증은 Java를 사용하여 Data Lake Storage Gen1로 최종 사용자 인증을 참조하세요.
- 애플리케이션에 대한 서비스 간 인증은 Java를 사용하여 Data Lake Storage Gen1로 서비스 간 인증을 참조하세요.
Data Lake Storage Gen1 클라이언트 만들기
ADLStoreClient 개체를 만들려면 Data Lake Storage Gen1로 인증할 때 생성한 Data Lake Storage Gen1 계정 이름 및 토큰 공급자를 지정해야 합니다(인증 섹션 참조). Data Lake Storage Gen1 계정 이름은 정규화된 도메인 이름이어야 합니다. 예를 들어 FILL-IN-HERE 를 mydatalakestoragegen1.azuredatalakestore.net 같은 항목으로 대체합니다.
private static String accountFQDN = "FILL-IN-HERE"; // full account FQDN, not just the account name
ADLStoreClient client = ADLStoreClient.createClient(accountFQDN, provider);
다음 섹션의 코드 조각에는 몇 가지 일반적인 파일 시스템 작업의 예가 포함되어 있습니다. ADLStoreClient 개체의 전체 Data Lake Storage Gen1 Java SDK API 문서를 확인하여 다른 작업을 확인할 수 있습니다.
디렉터리 만들기
다음 코드 조각은 지정한 Data Lake Storage Gen1 계정의 루트에 디렉터리 구조를 만듭니다.
// create directory
client.createDirectory("/a/b/w");
System.out.println("Directory created.");
파일 만들기
다음 코드 조각은 디렉터리 구조에 파일(c.txt)을 만들고 일부 데이터를 파일에 씁니다.
// create file and write some content
String filename = "/a/b/c.txt";
OutputStream stream = client.createFile(filename, IfExists.OVERWRITE );
PrintStream out = new PrintStream(stream);
for (int i = 1; i <= 10; i++) {
out.println("This is line #" + i);
out.format("This is the same line (%d), but using formatted output. %n", i);
}
out.close();
System.out.println("File created.");
바이트 배열을 사용하여 파일(d.txt)을 만들 수도 있습니다.
// create file using byte arrays
stream = client.createFile("/a/b/d.txt", IfExists.OVERWRITE);
byte[] buf = getSampleContent();
stream.write(buf);
stream.close();
System.out.println("File created using byte array.");
이전 코드 조각에 사용된 함수에 대한 getSampleContent 정의는 GitHub에서 샘플의 일부로 사용할 수 있습니다.
파일에 추가
다음 코드 조각은 기존 파일에 콘텐츠를 추가합니다.
// append to file
stream = client.getAppendStream(filename);
stream.write(getSampleContent());
stream.close();
System.out.println("File appended.");
이전 코드 조각에 사용된 함수에 대한 getSampleContent 정의는 GitHub에서 샘플의 일부로 사용할 수 있습니다.
파일 읽기
다음 코드 조각은 Data Lake Storage Gen1 계정의 파일에서 콘텐츠를 읽습니다.
// Read File
InputStream in = client.getReadStream(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ( (line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
System.out.println();
System.out.println("File contents read.");
파일 연결
다음 코드 조각은 Data Lake Storage Gen1 계정에 두 개의 파일을 연결합니다. 성공하면 연결된 파일이 두 개의 기존 파일을 대체합니다.
// concatenate the two files into one
List<String> fileList = Arrays.asList("/a/b/c.txt", "/a/b/d.txt");
client.concatenateFiles("/a/b/f.txt", fileList);
System.out.println("Two files concatenated into a new file.");
파일 이름 바꾸기
다음 코드 조각은 Data Lake Storage Gen1 계정의 파일 이름을 바꿉니다.
//rename the file
client.rename("/a/b/f.txt", "/a/b/g.txt");
System.out.println("New file renamed.");
파일에 대한 메타데이터 가져오기
다음 코드 조각은 Data Lake Storage Gen1 계정의 파일에 대한 메타데이터를 검색합니다.
// get file metadata
DirectoryEntry ent = client.getDirectoryEntry(filename);
printDirectoryInfo(ent);
System.out.println("File metadata retrieved.");
파일에 대한 사용 권한 설정
다음 코드 조각은 이전 섹션에서 만든 파일에 대한 사용 권한을 설정합니다.
// set file permission
client.setPermission(filename, "744");
System.out.println("File permission set.");
디렉터리 콘텐츠 나열
다음 코드 조각은 디렉터리의 내용을 재귀적으로 나열합니다.
// list directory contents
List<DirectoryEntry> list = client.enumerateDirectory("/a/b", 2000);
System.out.println("Directory listing for directory /a/b:");
for (DirectoryEntry entry : list) {
printDirectoryInfo(entry);
}
System.out.println("Directory contents listed.");
이전 코드 조각에 사용된 함수에 대한 printDirectoryInfo 정의는 GitHub에서 샘플의 일부로 사용할 수 있습니다.
파일 및 폴더 삭제
다음 코드 조각은 Data Lake Storage Gen1 계정에서 지정된 파일 및 폴더를 재귀적으로 삭제합니다.
// delete directory along with all the subdirectories and files in it
client.deleteRecursive("/a");
System.out.println("All files and folders deleted recursively");
promptEnterKey();
애플리케이션 빌드 및 실행
- IDE 내에서 실행하려면 실행 단추를 찾아 누릅니다. Maven에서 실행하려면 exec:exec를 사용합니다.
- 명령줄에서 실행할 수 있는 독립 실행형 jar을 생성하려면 Maven 어셈블리 플러그 인을 사용하여 모든 종속성이 포함된 jar을 빌드합니다. GitHub의 예제 소스 코드에 있는 pom.xml 예제가 있습니다.