在Notebook中使用Hadoop命令操作OSS/OSS-HDFS

在使用阿里云EMR Serverless SparkNotebook时,您可以通过Hadoop命令直接访问OSSOSS-HDFS数据源。本文将详细介绍如何通过Hadoop命令操作OSS/OSS-HDFS。

前提条件

  • EMR Serverless Spark环境准备:

  • OSS服务准备:

  • 权限配置:

    如需跨账号访问OSS/OSS-HDFS,必须配置相应的权限,具体操作请参见如何跨账号访问阿里云OSS

    说明

    本文示例中,在OSS控制台配置的授权操作读/写,您可以根据实际情况进行相应的授权操作。

使用限制

仅以下引擎版本支持本文操作:

  • esr-4.x:esr-4.1.1及之后版本。

  • esr-3.x:esr-3.1.1及之后版本。

  • esr-2.x:esr-2.5.1及之后版本。

支持的操作类型

在当前版本中,您可以对OSS/OSS-HDFS进行以下操作,包括但不限于:

  • ls:列出指定OSS/OSS-HDFS路径下的文件和目录。

  • mv:移动文件或目录。

  • cp:复制文件或目录。

  • stat:获取指定文件或目录的元数据。

您可以执行!hadoop fs -help命令,查看相关帮助信息。

访问路径格式

OSS/OSS-HDFS的访问路径如下所示:

  • OSS路径格式:oss://<bucketName>/<object-path>

  • OSS-HDFS路径格式:oss://<bucketName>.<region>.oss-dls.aliyuncs.com/<object-path>

其中,涉及参数说明如下:

  • <bucketName>:OSS Bucket名称。例如:my-bucket

  • <region>:OSS Bucket所在的地域,例如: cn-hangzhou

  • <object-path>:OSS Bucket中的文件路径。例如:spark/file.txt 或 logs/

使用方法

Notebook开发中,您可以通过 !hadoop fs 命令直接执行以下操作。

列出OSS路径内容(ls)

使用 -ls 参数列出指定路径下的文件和目录。

!hadoop fs -ls oss://<bucketName>/<object-path>
  • 示例1:列出spark路径下的所有文件和目录。

    !hadoop fs -ls oss://my-bucket/spark/

    返回信息如下所示。

    image

  • 示例2:结合 -lsgrep 命令查找所有包含 “user” 的文件和目录。

    !hadoop fs -ls oss://my-bucket/spark/ | grep user

    返回信息如下所示。

    image

移动文件或目录(mv)

使用 -mv 参数将文件或目录移动到目标路径。

!hadoop fs -mv oss://<bucketName>/<object-path>/source  oss://<bucketName>/<object-path>/destination

例如,移动sr路径下的file.txtuser路径下。如果目标路径已存在,文件将被覆盖。

!hadoop fs -mv oss://my-bucket/sr/file.txt oss://my-bucket/user/file.txt

复制文件或目录(cp)

使用 -cp 参数将文件或目录从源路径复制到目标路径。

!hadoop fs -cp oss://<bucketName>/<object-path>/source oss://<bucketName>/<object-path>/destination

例如,复制spark路径下的file.txtspark2路径下。如果目标路径已存在,文件将被覆盖。

!hadoop fs -cp oss://my-bucket/spark/file.txt oss://my-bucket/spark2/file.txt

查看文件或目录的元数据(stat)

使用 -stat 和合适的参数查看指定文件或目录的详细信息。

!hadoop fs -stat oss://<bucketName>/<object-path>/to/file

例如,查看file.txt文件的基本元数据。

!hadoop fs -stat oss://my-bucket/spark/file.txt