更新时间:2024-05-28 GMT+08:00

从零开始使用Spark SQL

Spark提供类似SQL的Spark SQL语言操作结构化数据,本章节提供从零开始使用Spark SQL,创建一个名称为src_data的表,然后在src_data表中每行写入一条数据,最后将数据存储在“mrs_20160907”集群中。再使用SQL语句查询src_data表中的数据,最后可将src_data表删除。

前提条件

将OBS数据源中的数据写入Spark SQL表中时,需要先获取AK/SK。获取方法如下:
  1. 登录管理控制台。
  2. 单击用户名,在下拉列表中单击“我的凭证”
  3. 单击“访问密钥”
  4. 单击“新增访问密钥”,进入“新增访问密钥”页面。
  5. 输入登录密码和短信验证码,单击“确定”,下载密钥,请妥善保。

操作步骤

  1. 准备使用Spark SQL分析的数据源。

    样例txt文件如下:

    abcd3ghji
    efgh658ko
    1234jjyu9
    7h8kodfg1
    kk99icxz3

  2. 上传数据至OBS。

    1. 登录OBS控制台。
    2. 单击“并行文件系统 > 创建并行文件系统”,创建一个名称为sparksql的文件系统。

      sparksql仅为示例,文件系统名称必须全局唯一,否则会创建并行文件系统失败。

    3. 单击sparksql文件系统名称,并选择“文件”。
    4. 单击“新建文件夹”,创建input文件夹。
    5. 进入input文件夹,单击“上传文件 > 添加文件”,选择本地的txt文件,然后单击“上传”

  3. 登录MRS控制台,在左侧导航栏选择现有集群,单击集群名称。
  4. 将OBS中的txt文件导入至HDFS中。

    1. 选择“文件管理”
    2. “HDFS文件列表”页签中单击“新建”,创建一个名称为userinput的文件夹。
    3. 进入userinput文件夹,单击“导入数据”
    4. 选择OBS和HDFS路径,单击“确定”

      OBS路径:obs://sparksql/input/sparksql-test.txt

      HDFS路径:/user/userinput

      图1 从OBS导入数据至HDFS

  5. 提交Spark SQL语句。

    1. 在MRS控制台选择“作业管理”,具体请参见运行Spark作业

      只有“mrs_20160907”集群处于“运行中”状态时才能提交Spark SQL语句。

    2. 输入创建表的Spark SQL语句。

      输入Spark SQL语句时,总字符数应当小于或等于10000字符,否则会提交语句失败。

      语法格式:

      CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path];

      创建表样例存在以下两种方式。

      • 方式一:创建一个src_data表,将数据源中的数据一行一行写入src_data表中。
        • 数据源存储在HDFS的“/user/omm/userinput”文件夹下:create external table src_data(line string) row format delimited fields terminated by '\\n' stored as textfile location '/user/omm/userinput';
        • 数据源存储在OBS的“/sparksql/input”文件夹下:create external table src_data(line string) row format delimited fields terminated by '\\n' stored as textfile location 'obs://AK:SK@sparksql/input';

          AK/SK获取方法,请参见前提条件

      • 方式二:创建一个表src_data1,将数据源中的数据批量load到src_data1表中。

        create table src_data1 (line string) row format delimited fields terminated by ',' ;

        load data inpath '/user/omm/userinput/sparksql-test.txt' into table src_data1;

      采用方式二时,只能将HDFS上的数据load到新建的表中,OBS上的数据不支持直接load到新建的表中。

    3. 输入查询表的Spark SQL语句。

      语法格式:

      SELECT col_name FROM table_name;

      查询表样例,查询src_data表中的所有数据:

      select * from src_data;

    4. 输入删除表的Spark SQL语句。

      语法格式:

      DROP TABLE [IF EXISTS] table_name;

      删除表样例:

      drop table src_data;

    5. 单击“检查”,检查输入语句的语法是否正确。
    6. 单击“确定”

      Spark SQL语句提交后,是否执行成功会在“执行结果”列中展示。

  6. 删除集群。