从零开始使用Spark SQL
Spark提供类似SQL的Spark SQL语言操作结构化数据,本章节提供从零开始使用Spark SQL,创建一个名称为src_data的表,然后在src_data表中每行写入一条数据,最后将数据存储在“mrs_20160907”集群中。再使用SQL语句查询src_data表中的数据,最后可将src_data表删除。
前提条件
- 登录管理控制台。
- 单击用户名,在下拉列表中单击“我的凭证”。
- 单击“访问密钥”。
- 单击“新增访问密钥”,进入“新增访问密钥”页面。
- 输入登录密码和短信验证码,单击“确定”,下载密钥,请妥善保。
操作步骤
- 准备使用Spark SQL分析的数据源。
样例txt文件如下:
abcd3ghji efgh658ko 1234jjyu9 7h8kodfg1 kk99icxz3
- 上传数据至OBS。
- 登录OBS控制台。
- 单击“并行文件系统 > 创建并行文件系统”,创建一个名称为sparksql的文件系统。
sparksql仅为示例,文件系统名称必须全局唯一,否则会创建并行文件系统失败。
- 单击sparksql文件系统名称,并选择“文件”。
- 单击“新建文件夹”,创建input文件夹。
- 进入input文件夹,单击“上传文件 > 添加文件”,选择本地的txt文件,然后单击“上传”。
- 登录MRS控制台,在左侧导航栏选择 ,单击集群名称。
- 将OBS中的txt文件导入至HDFS中。
- 选择“文件管理”。
- 在“HDFS文件列表”页签中单击“新建”,创建一个名称为userinput的文件夹。
- 进入userinput文件夹,单击“导入数据”。
- 选择OBS和HDFS路径,单击“确定”。
OBS路径:obs://sparksql/input/sparksql-test.txt
HDFS路径:/user/userinput
图1 从OBS导入数据至HDFS
- 提交Spark SQL语句。
- 在MRS控制台选择“作业管理”,具体请参见运行Spark作业。
只有“mrs_20160907”集群处于“运行中”状态时才能提交Spark SQL语句。
- 输入创建表的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到新建的表中。
- 方式一:创建一个src_data表,将数据源中的数据一行一行写入src_data表中。
- 输入查询表的Spark SQL语句。
SELECT col_name FROM table_name;
查询表样例,查询src_data表中的所有数据:
select * from src_data;
- 输入删除表的Spark SQL语句。
DROP TABLE [IF EXISTS] table_name;
删除表样例:
drop table src_data;
- 单击“检查”,检查输入语句的语法是否正确。
- 单击“确定”。
Spark SQL语句提交后,是否执行成功会在“执行结果”列中展示。
- 在MRS控制台选择“作业管理”,具体请参见运行Spark作业。
- 删除集群。