使用Beeline提交Spark SQL作业
DLI Beeline简介
DLI Beeline是一个用于连接DLI服务的客户端命令行交互工具,该工具基于DLI JDBC实现,提供SQL命令交互和批量SQL脚本执行的功能。
准备工作
在使用DLI Beeline前,需要进行如下操作:
- 授权。
DLI使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的企业级多租户管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。
通过IAM,您可以在华为云账号中给员工创建IAM用户,并使用策略来控制他们对华为云资源的访问范围。
目前包括角色(粗粒度授权)和策略(细粒度授权)。具体的权限介绍和授权操作请参考《数据湖探索用户指南》。
- 创建队列。在“队列类型”中选择“SQL队列”,即SQL作业的计算资源。
DLI 客户端工具下载
您可以在DLI管理控制台下载DLI客户端工具。
- 登录DLI管理控制台。
- 单击总览页右侧“常用链接”中的“SDK下载”。
- 在“DLI SDK DOWNLOAD”页面,单击“huaweicloud-dli-clientkit-<version>”即可下载DLI客户端工具。
DLI客户端空间命名为“huaweicloud-dli-clientkit-<version>-bin.tar.gz”,支持在Linux环境中使用,且依赖JDK 1.8及以上版本。
使用DLI Beeline连接服务端
使用DLI Beeline的机器安装JDK 1.8或以上版本并配置环境变量,推荐在Linux环境下使用Beeline工具。
- 下载并解压工具包“huaweicloud-dli-clientkit-<version>-bin.tar.gz”,其中version为版本号,以实际版本号为准。
- 进入解压目录,里面有三个子目录bin、conf、lib,分别存放了Beeline相关的执行脚本、配置文件和依赖包。
- 进入配置文件conf目录,将“connection.properties.template”重命名成“connection.properties”,并配置连接参数。
- 进入执行脚本bin目录,启动beeline脚本,执行连接命令即可执行SQL语句,如下所示:
%bin/beeline Start Beeline Welcome to DLI service ! beeline> !connect Connecting from the default connection.properties Connecting to jdbc:dli://dli.cn-north-1.myhuaweicloud.com/8fc20d97a4444cafba3c3a8639380003 Connected to: DLI service jdbc:dli://dli.cn-north-1.myhuaweicloud... (not set)> show databases; +--------------------+ | databaseName | +--------------------+ | bjhk | | db_xd | | dimensions_adgame | | odbc_db | | sdk_db | | tpch_csv_1024 | | tpch_csv_4g_new | | tpchnewtest | | tpchtest | | xunjian | +--------------------+ 10 rows selected (0.338 seconds)
用户也可以在启动beeline脚本时通过命令行选项设置连接参数,如下所示,如果连接参数不全,Beeline会提示补全相关信息。
%bin/beeline -u 'jdbc:dli://dli.cn-north-1.myhuaweicloud.com/8fc20d97a4444cafba3c3a8639380003? authenticationmode=aksk' Start Beeline Connecting to jdbc:dli://dli.cn-north-1.myhuaweicloud.com/8fc20d97a4444cafba3c3a8639380003?usehttpproxy=true;proxyhost=10.186.60.154;proxyport=3128;authenticationmode=aksk Enter region name: cn-north-1 Enter service name: DLI Enter access key(AK): <real access key> Enter secret key(SK): **************************************** Enter queue name: default Connected to: DLI service Welcome to DLI service ! jdbc:dli://dli.cn-north-1.myhuaweicloud... (not set)>
DLI Beeline支持的命令
DLI Beeline支持一系列命令,每个命令以“!” 这个符号开始,例如“!connect”。具体请参考表1。
命令 |
描述 |
---|---|
!connect |
通过输入连接参数的方式连接到DLI服务,若不输入参数,则加载默认的“connection.properties”文件连接。 |
!help |
打印命令行的帮助文档。 |
!history |
展示命令行执行历史。 |
!outputformat |
设置查询结果的输出格式,支持table,vertical,csv2,dsv,tsv2,xmlattr,xmlelements,每一种格式的具体说明详参见查询输出格式。 |
!properties |
通过加载“connection.properties”文件连接到DLI服务。该功能与!connect相同,但是可以指定连接配置文件。 |
!quit |
退出beeline会话。 |
!run |
执行一个SQL脚本。使用方法: !run <scriptfile> |
!save |
将当前的会话属性保存至beeline.properties中,下次开启beeline时会自动加载这些属性。 |
!script |
将执行的命令保存至一个文件中。例如: !script /tmp/mysession.script 执行该语句之后,后续的命令将被保存至“/tmp/mysession.script”。 再次执行!script,结束脚本记录。执行如下语句,将会重新执行记录下来的命令。 !run /tmp/mysession.script |
!set |
设置Beeline变量,例如: !set color true !set后面不接参数则显示所有变量值。 |
!sh |
执行一个Shell脚本。例如: !sh <shellscript> |
!sql |
显性地执行一条SQL语句,beeline中不带命令的语句默认会转换成!sql命令,sql语句必须以分号结尾。例如: !sql <sql> |
!dliconf |
查看DLI 自定义配置。 |
DLI Beeline支持的命令行选项
DLI Beeline支持的启动命令行选项请参考表2。
查询输出格式
DLI Beeline支持多种查询结果输出格式,输出格式可以通过!outputformat指定。DLI Beeline支持的输出格式包括:table,vertical,csv2,dsv,tsv2,xmlattr,xmlelements。
- table
table格式输出的结果以表的形式展示,例如:
!outputformat table
select id, value, comment from test_table;+-----+---------+-----------------+ | id | value | comment | +-----+---------+-----------------+ | 1 | Value1 | Test comment 1 | | 2 | Value2 | Test comment 2 | | 3 | Value3 | Test comment 3 | +-----+---------+-----------------+
- vertical
以行为单元组织数据,每一个属性以key-value的形式展示,例如:
!outputformat vertical
select id, value, comment from test_table;
id 1 value Value1 comment Test comment 1 id 2 value Value2 comment Test comment 2 id 3 value Value3 comment Test comment 3
- csv2
以纯文本形式存储表格数据(数字和文本),使用逗号(,)作为分隔符,例如:
!outputformat csv2
select id, value, comment from test_table;
id,value,comment 1,Value1,Test comment 1 2,Value2,Test comment 2 3,Value3,Test comment 3
- dsv
每一行储存一条记录, 每条记录的各个字段间以制表符作为分隔,例如:
!outputformat dsv
select id, value, comment from test_table;
id|value |comment 1 |Value1|Test comment 1 2 |Value2|Test comment 2 3 |Value3|Test comment 3
- tsv2
每一行储存一条记录, 每条记录的各个字段间以空格作为分隔,例如:
!outputformat tsv2
select id, value, comment from test_table;
id value comment 1 Value1Test comment 1 2 Value2Test comment 2 3 Value3Test comment 3
- xmlattr
用于在SQL查询返回的 XML 元素中设置属性的函数,例如:
!outputformat xmlattr
select id, value, comment from test_table;
<resultset> <result id="1" value="Value1" comment="Test comment 1"/> <result id="2" value="Value2" comment="Test comment 2"/> <result id="3" value="Value3" comment="Test comment 3"/> </resultset>
- xmlelements
将一个关系值转换为XML元素的函数,格式为<elementName>值</elementName>,例如:
!outputformat xmlelements
select id, value, comment from test_table;
<resultset> <result> <id>1</id> <value>Value1</value> <comment>Test comment 1</comment> </result> <result> <id>2</id> <value>Value2</value> <comment>Test comment 2</comment> </result> <result> <id>3</id> <value>Value3</value> <comment>Test comment 3</comment> </result> </resultset>
