tencent cloud

Cloud HDFS

製品の説明
購入ガイド
クイックスタート
操作ガイド
CHDFSの作成
権限グループの作成
権限ルールの作成
マウントポイントの作成
CHDFSのマウント
CAMを使用してアクセス権限を付与します
Javaコードを介してCHDFSにアクセスします
ファイルシステムの削除
プラクティスチュートリアル
DruidのDeep storageとしてCHDFSを使用します
ネイティブHDFSデータをTencent Cloud CHDFSに移行します
DataXを使用してCHDFSをインポートまたはエクスポートします
CDHのCHDFS設定ガイドライン
CHDFS Ranger権限システムソリューション
API リファレンス
History
Introduction
API Category
Making API Requests
Restoration task APIs
Permission rule APIs
Permission group APIs
Other APIs
Mount point APIs
Lifecycle rule APIs
File system APIs
Data Types
Error Codes
よくあるご質問
用語集
Related Protocol
Privacy Policy
Data Processing And Security Agreement
ドキュメントCloud HDFS操作ガイドJavaコードを介してCHDFSにアクセスします

Javaコードを介してCHDFSにアクセスします

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-01-19 16:58:09

操作シナリオ

Cloud HDFS(CHDFS)のJARパッケージをデプロイすると、コマンドラインやビッグデータコンポーネントなどを使用してCHDFSを操作するだけでなく、Javaコードを介してCHDFSにアクセスすることもできます。ここでは、Javaコードを介してCHDFSにアクセスする方法についてご説明します。

前提条件

CHDFSに関連するJARパッケージがデプロイされていることを確認します。詳細については、CHDFSのマウントをご参照ください。
Javaプログラムを実行しているマシンが、マウントポイント権限グループによりアクセスを許可されているVPC内にあることを確認します。

操作手順

1. mavenプロジェクトを新規作成し、mavenのpom.xmlに次の依存項目を追加します(実際のhadoop環境に応じてhadoop-commonパッケージのバージョンを設定してください)。
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. 以下を参照して、Hadoopを操作するためのコードを変更します。設定項目とその説明については、CHDFSのマウントをご参照ください。 以下に、一般的なファイルシステム操作インターフェースの一部を示します。その他のインターフェースについては、Hadoop FileSystemインターフェースドキュメントをご参照ください。
package com.qcloud.chdfs.demo;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;
import java.nio.ByteBuffer;

public class Demo {
private static FileSystem initFS() throws IOException {
Configuration conf = new Configuration();
// CHDFSの設定項目については、https://www.tencentcloud.com/document/product/1105/36368?from_cn_redirect=1をご参照ください
// 以下の設定は、入力必須項目です

conf.set("fs.ofs.impl", "com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter");
conf.set("fs.AbstractFileSystem.ofs.impl", "com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter");
conf.set("fs.ofs.tmp.cache.dir", "/data/chdfs_tmp_cache");
conf.set("fs.ofs.user.appid", "1250000000");
// その他のオプションの設定項目については、https://www.tencentcloud.com/document/product/1105/36368?from_cn_redirect=1をご参照ください

String chdfsUrl = "ofs://f4maaabbb-ccdd.chdfs.ap-guangzhou.myqcloud.com/";
return FileSystem.get(URI.create(chdfsUrl), conf);
}

private static void mkdir(FileSystem fs, Path filePath) throws IOException {
fs.mkdirs(filePath);
}

private static void createFile(FileSystem fs, Path filePath) throws IOException {
// ファイルを作成します(存在する場合は上書きします)
// if the parent dir does not exist, fs will create it!
FSDataOutputStream out = fs.create(filePath, true);
try {
// ファイルに書き込みます
String content = "test write file";
out.write(content.getBytes());
} finally {
IOUtils.closeQuietly(out);
}
}

private static void readFile(FileSystem fs, Path filePath) throws IOException {
FSDataInputStream in = fs.open(filePath);
try {
byte[] buf = new byte[4096];
int readLen = -1;
do {
readLen = in.read(buf);
} while (readLen >= 0);
} finally {
IOUtils.closeQuietly(in);
}
}


private static void queryFileOrDirStatus(FileSystem fs, Path path) throws IOException {
FileStatus fileStatus = fs.getFileStatus(path);
if (fileStatus.isDirectory()) {
System.out.printf("path %s is dir\\n", path);
return;
}

long fileLen = fileStatus.getLen();
long accessTime = fileStatus.getAccessTime();
long modifyTime = fileStatus.getModificationTime();
String owner = fileStatus.getOwner();
String group = fileStatus.getGroup();


System.out.printf("path %s is file, fileLen: %d, accessTime: %d, modifyTime: %d, owner: %s, group: %s\\n",
path, fileLen, accessTime, modifyTime, owner, group);
}


// デフォルトのチェックタイプはCOMPOSITE-CRC32Cです
private static void getFileCheckSum(FileSystem fs, Path path) throws IOException {
FileChecksum checksum = fs.getFileChecksum(path);
System.out.printf("path %s, checkSumType: %s, checkSumCrcVal: %d\\n",
path, checksum.getAlgorithmName(), ByteBuffer.wrap(checksum.getBytes()).getInt());
}


private static void copyFileFromLocal(FileSystem fs, Path chdfsPath, Path localPath) throws IOException {
fs.copyFromLocalFile(localPath, chdfsPath);
}


private static void copyFileToLocal(FileSystem fs, Path chdfsPath, Path localPath) throws IOException {
fs.copyToLocalFile(chdfsPath, localPath);
}


private static void renamePath(FileSystem fs, Path oldPath, Path newPath) throws IOException {
fs.rename(oldPath, newPath);
}


private static void listDirPath(FileSystem fs, Path dirPath) throws IOException {
FileStatus[] dirMemberArray = fs.listStatus(dirPath);


for (FileStatus dirMember : dirMemberArray) {
System.out.printf("dirMember path %s, fileLen: %d\\n", dirMember.getPath(), dirMember.getLen());
}
}


// 再帰的削除フラグは、ディレクトリを削除するために用いられます
// 再帰がfalseで、dirが空でない場合、操作は失敗します
private static void deleteFileOrDir(FileSystem fs, Path path, boolean recursive) throws IOException {
fs.delete(path, recursive);
}


private static void closeFileSystem(FileSystem fs) throws IOException {
fs.close();
}


public static void main(String[] args) throws IOException {
// ファイルの初期化
FileSystem fs = initFS();


// ファイルの作成
Path chdfsFilePath = new Path("/folder/exampleobject.txt");
createFile(fs, chdfsFilePath);


// ファイルの読み取り
readFile(fs, chdfsFilePath);


// ファイルまたはディレクトリの照会
queryFileOrDirStatus(fs, chdfsFilePath);


// ファイルのチェックサムの取得
getFileCheckSum(fs, chdfsFilePath);


// ローカルからファイルをコピーする
Path localFilePath = new Path("file:///home/hadoop/ofs_demo/data/exampleobject.txt");
copyFileFromLocal(fs, chdfsFilePath, localFilePath);


// ファイルをローカルで取得する
Path localDownFilePath = new Path("file:///home/hadoop/ofs_demo/data/exampleobject.txt");
copyFileToLocal(fs, chdfsFilePath, localDownFilePath);


// リネーム
Path newPath = new Path("/doc/example.txt");
renamePath(fs, chdfsFilePath, newPath);


// ファイルの削除
deleteFileOrDir(fs, newPath, false);


// ディレクトリの作成
Path dirPath = new Path("/folder");
mkdir(fs, dirPath);


// ディレクトリにファイルを作成する
Path subFilePath = new Path("/folder/exampleobject.txt");
createFile(fs, subFilePath);


// ディレクトリのリストアップ
listDirPath(fs, dirPath);


// ディレクトリの削除
deleteFileOrDir(fs, dirPath, true);


// ファイルシステムを閉じる
closeFileSystem(fs);
}
}
3. コンパイルと実行。
説明:
実行する前に、classpathが正しく設定されていることを確認してください。classpathには、Hadoop commonパッケージとCHDFSパッケージのパスが含まれる必要があります。
EMR環境の場合、CHDFSのマウントを手順に従って操作した場合、Hadoop commonパッケージは通常、/usr/local/service/hadoop/share/hadoop/common/ディレクトリ下にあり、CHDFSパッケージは通常、/usr/local/service/hadoop/share/hadoop/common/lib/ディレクトリ下にあります。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック