本地模式

更新时间:
复制为 MD 格式

MaxCompute Spark支持用户使用原生的Spark本地模式,便于用户进行小批量数据验证和任务调试。本文以Spark 3.1为例介绍IDEAShell两种使用方式。

使用IDEA调试

步骤一:下载并解压Spark客户端

  1. 点击链接或在终端输入如下指令下载并解压Spark客户端,示例为Spark3.1.1-odps0.47.0版本。

    wget https://odps-repo.oss-cn-hangzhou.aliyuncs.com/spark/3.1.1-odps0.47.0/spark-3.1.1-odps0.47.0-client.tar.gz
    tar zxvf spark-3.1.1-odps0.47.0-client.tar.gz
  2. 确认文件位置并已正确下载解压

    image

步骤二:创建并修改odps.conf配置文件

spark-3.1.1-odps0.47.0-client/conf下创建odps.conf文件:

touch odps.conf
vim odps.conf

并在文件中添加如下配置:

odps.project.name = [替换为实际project]
odps.end.point = [替换为实际endpoint]
odps.access.id = [替换为实际access id]
odps.access.key = [替换为实际access key]

步骤三:通过IDEA打开示例项目

  1. 在 IntelliJ IDEA 的欢迎界面,单击仓库克隆,输入仓库地址https://github.com/aliyun/MaxCompute-Spark.git

    image

  2. IDEA可能会弹出安全提示,询问是否信任此项目,点击信任即可。

  3. 克隆成功后,IDEA会自动打开这个项目,但它打开的是根目录 MaxCompute-Spark。需要关闭当前项目,然后重新打开正确的子目录。

    1. 关闭当前项目:

      • 点击 IDEA 菜单栏的 File -> Close Project。回到 IDEA 欢迎界面。

    2. 打开子目录项目:

      • 在欢迎界面,点击 Open

      • 在弹出的文件浏览器中,导航至刚刚克隆的文件夹。

      • 进入这个 MaxCompute-Spark 文件夹,然后选择里面的 spark-3.x 子目录,点击 Open

    image

步骤四:添加MaxCompute Spark Jars依赖

  1. 如图所示,进入File > Project Structure

    image

  2. 如图所示,左侧选择Modules,点击+,添加JARs or Directories

    image

  3. 选择步骤一中解压的spark-3.1.1-odps0.47.0-client/jars目录。

    image

  4. IDEA单击OK,确认添加。

步骤五:添加ODPS_CONF_FILE环境变量

  1. 单击IDEA右上角Edit Configurations

    image

  2. 配置环境变量

    image

  3. 添加ODPS_CONF_FILE,NameODPS_CONF_FILE,Value为步骤二创建的odps.conf文件的位置。

    image

    单击OK配置完成。

步骤六:运行任务JavaSparkSQL.java

  1. 在第48行添加如下代码,配置为本地模式

    .config("spark.master","local[*]")

    image

  2. 在第113行添加如下代码,手动添加分区。

    spark.sql("ALTER TABLE " + ptTableName + " ADD IF NOT EXISTS PARTITION (pt1='2018', pt2='0601')");

    image

  3. 注释第118行代码,本地模式暂不支持动态分区覆盖。

    ptDf.write().mode("overwrite").insertInto(ptTableName); 

    image

  4. 单击运行,返回结果如下:

    单击展开查看详情

    +-------+---+
    |   name|num|
    +-------+---+
    | name-0|  0|
    | name-1|  1|
    | name-2|  2|
    | name-3|  3|
    | name-4|  4|
    | name-5|  5|
    | name-6|  6|
    | name-7|  7|
    | name-8|  8|
    | name-9|  9|
    |name-10| 10|
    |name-11| 11|
    |name-12| 12|
    |name-13| 13|
    |name-14| 14|
    |name-15| 15|
    |name-16| 16|
    |name-17| 17|
    |name-18| 18|
    |name-19| 19|
    +-------+---+
    only showing top 20 rows

使用Shell调试

步骤一:下载并解压Spark客户端

  1. 点击链接或在终端输入如下指令下载并解压Spark客户端,示例为Spark3.1.1-odps0.47.0版本。

    wget https://odps-repo.oss-cn-hangzhou.aliyuncs.com/spark/3.1.1-odps0.47.0/spark-3.1.1-odps0.47.0-client.tar.gz
    tar zxvf spark-3.1.1-odps0.47.0-client.tar.gz
  2. 确认文件位置并已正确下载解压

    image

步骤二:创建并修改odps.conf配置文件

spark-3.1.1-odps0.47.0-client/conf下创建odps.conf文件:

touch odps.conf
vim odps.conf

并在文件中添加如下配置:

odps.project.name = [替换为实际project]
odps.end.point = [替换为实际endpoint]
odps.access.id = [替换为实际access id]
odps.access.key = [替换为实际access key]

步骤三:修改spark-defaults.conf配置文件

spark-3.1.1-odps0.47.0-client/conf下找到spark-defaults.conf文件:

cd spark-3.1.1-odps0.47.0-client/conf
vim spark-defaults.conf

注释掉以下配置
#spark.master = yarn
#spark.submit.deployMode = cluster
#spark.eventLog.enabled = true

添加配置
spark.master = local[*]

步骤四:添加HADOOP_CONF_DIR环境变量

export HADOOP_CONF_DIR=/PATH/TO/spark-3.1.1-odps0.47.0-client/conf

步骤五:打开pyspark shell

cd spark-3.1.1-odps0.47.0-client
./bin/pyspark

执行成功示意图如下:

image

步骤六:执行Spark SQL

查询配置文件中填写的MaxCompute项目内存在的表。

spark.sql("SELECT * FROM xxxx").show(); 

点击展开查看示例查询详情

spark.sql("SELECT * FROM emp").show();

// 返回结果
+-----+------+---------+----+-------------------+-------+-------+------+--------+
|empno| ename|      job| mgr|           hiredate|    sal|   comm|deptno|      ds|
+-----+------+---------+----+-------------------+-------+-------+------+--------+
| 7369| SMITH|    CLERK|7902|1980-12-17 00:00:00| 800.00|   null|    20|20251229|
| 7499| ALLEN| SALESMAN|7698|1981-02-20 00:00:00|1600.00| 300.00|    30|20251229|
| 7521|  WARD| SALESMAN|7698|1981-02-22 00:00:00|1250.00| 500.00|    30|20251229|
| 7566| JONES|  MANAGER|7839|1981-04-02 00:00:00|2975.00|   null|    20|20251229|
| 7654|MARTIN| SALESMAN|7698|1981-09-28 00:00:00|1250.00|1400.00|    30|20251229|
| 7698| BLAKE|  MANAGER|7839|1981-05-01 00:00:00|2850.00|   null|    30|20251229|
| 7782| CLARK|  MANAGER|7839|1981-06-09 00:00:00|2450.00|   null|    10|20251229|
| 7788| SCOTT|  ANALYST|7566|1987-04-19 00:00:00|3000.00|   null|    20|20251229|
| 7839|  KING|PRESIDENT|null|1981-11-17 00:00:00|5000.00|   null|    10|20251229|
| 7844|TURNER| SALESMAN|7698|1981-09-08 00:00:00|1500.00|   0.00|    30|20251229|
| 7876| ADAMS|    CLERK|7788|1987-05-23 00:00:00|1100.00|   null|    20|20251229|
| 7900| JAMES|    CLERK|7698|1981-12-03 00:00:00| 950.00|   null|    30|20251229|
| 7902|  FORD|  ANALYST|7566|1981-12-03 00:00:00|3000.00|   null|    20|20251229|
| 7934|MILLER|    CLERK|7782|1982-01-23 00:00:00|1300.00|   null|    10|20251229|
| 7948|JACCKA|    CLERK|7782|1981-04-12 00:00:00|5000.00|   null|    10|20251229|
| 7956| WELAN|    CLERK|7649|1982-07-20 00:00:00|2450.00|   null|    10|20251229|
| 7957|TEBAGE|    CLERK|7748|1982-12-30 00:00:00|1300.00|   null|    10|20251229|
+-----+------+---------+----+-------------------+-------+-------+------+--------+