通常,有两种方法可以读取 Azure Blob 上次修改的数据,如下所示。
- 通过 Azure Storage REST API 或 Azure Storage SDK for Java 直接读取。在我研究了 Azure Blob 存储 REST API 之后,有两个 REST API可以从响应头中获取属性
Get Blob
。因此,您可以在 Scala 中调用这些 api 来解析 api 响应标头以获取它,或者简单地使用 Scala 中的 Azure Storage SDK for Java 来执行相同的操作。Get Blob Properties
Last-Modified
这是我在 Java 中获取Last-Modified
blob 属性的示例代码。
import java.util.Date;
import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.CloudBlob;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
String StorageConnectionStringTemplate = "DefaultEndpointsProtocol=https;" +
"DefaultEndpointsProtocol=https;" +
"AccountName=%s;" +
"AccountKey=%s";
String accountName = "<your storage account name for HDInsight>";
String accountKey = "<your storage account key for HDInsight>";
String containerName = "<container name for HDFS>";
String blobName = "<blob name>";
String storageConnectionString = String.format(StorageConnectionStringTemplate, accountName, accountKey);
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient client = storageAccount.createCloudBlobClient();
CloudBlobContainer container = client.getContainerReference(containerName);
CloudBlob blob = container.getBlobReferenceFromServer(blobName);
Date lastModifiedDate = blob.getProperties().getLastModified();
考虑到Hadoop Azure是基于 Azure Storage SDK for Java 8.0.0
,而不是最新版本10.0
,所以我上面的示例代码与 Azure Blob Storage for Java 的官方教程不同。
如果要获取Last-Modified
容器的属性,可以使用 REST API [Get Container Properties][5]
或 Java 代码Date lastModifiedDate = container.getProperties().getLastModified();
。
使用 Hadoop Azure Java API 进行wasb://
协议。
import java.util.Date;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FileStatus;
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
Path f = new Path("<blob path on HDFS>");
FileStatus fileStatus = hdfs.getFileStatus(f);
long lastModifiedTime = f.getModificationTime();
Date lastModifiedDate = new Date(lastModifiedTime);