欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

理解Spark SQL(一)—— CLI和ThriftServer

程序员文章站 2022-05-27 19:11:43
Spark SQL主要提供了两个工具来访问hive中的数据,即CLI和ThriftServer。前提是需要Spark支持Hive,即编译Spark时需要带上hive和hive-thriftserver选项,同时需要确保在$SPARK_HOME/conf目录下有hive-site.xml配置文件(可以 ......

spark sql主要提供了两个工具来访问hive中的数据,即cli和thriftserver。前提是需要spark支持hive,即编译spark时需要带上hive和hive-thriftserver选项,同时需要确保在$spark_home/conf目录下有hive-site.xml配置文件(可以从hive中拷贝过来)。在该配置文件中主要是配置hive metastore的uri(spark的cli和thriftserver都需要)以及thriftserver相关配置项(如hive.server2.thrift.bind.host、hive.server2.thrift.port等)。注意如果该台机器上同时运行有hive thriftserver和spark thriftserver,则hive中的hive.server2.thrift.port配置的端口与spark中的hive.server2.thrift.port配置的端口要不一样,避免同时启动时发生端口冲突。

启动cli和thriftserver之前都需要先启动hive metastore。执行如下命令启动:

[root@brucecentos ~]# nohup hive --service metastore &

成功启动后,会出现一个runjar的进程,同时会监听端口9083(hive metastore的默认端口)。

理解Spark SQL(一)—— CLI和ThriftServer

 理解Spark SQL(一)—— CLI和ThriftServer

 

 先来看cli,通过spark-sql脚本来使用cli。执行如下命令:

[root@brucecentos4 spark]# $spark_home/bin/spark-sql --master yarn

上述命令执行后会启动一个yarn client模式的spark程序,如下图所示:

理解Spark SQL(一)—— CLI和ThriftServer

  同时它会连接到hive metastore,可以在随后出现的spark-sql>提示符下运行hive sql语句,比如:

理解Spark SQL(一)—— CLI和ThriftServer

  其中每输入并执行一个sql语句相当于执行了一个spark的job,如图所示:

理解Spark SQL(一)—— CLI和ThriftServer

  也就是说执行spark-sql脚本会启动一个yarn clien模式的spark application,而后出现spark-sql>提示符,在提示符下的每个sql语句都会在spark中执行一个job,但是对应的都是同一个application。这个application会一直运行,可以持续输入sql语句执行job,直到输入“quit;”,然后就会退出spark-sql,即spark application执行完毕。

 

另外一种更好地使用spark sql的方法是通过thriftserver,首先需要启动spark的thriftserver,然后通过spark下的beeline或者自行编写程序通过jdbc方式使用spark sql。

通过如下命令启动spark thriftserver:

[root@brucecentos4 spark]# $spark_home/sbin/start-thriftserver.sh --master yarn

执行上面的命令后,会生成一个sparksubmit进程,实际上是启动一个yarn client模式的spark application,如下图所示:

理解Spark SQL(一)—— CLI和ThriftServer

  而且它提供一个jdbc/odbc接口,用户可以通过jdbc/odbc接口连接thriftserver来访问spark sql的数据。具体可以通过spark提供的beeline或者在程序中使用jdbc连接thriftserver。例如在启动spark thriftserver后,可以通过如下命令使用beeline来访问spark sql的数据。

[root@brucecentos3 spark]# $spark_home/bin/beeline -n root -u jdbc:hive2://brucecentos4.hadoop:10003

理解Spark SQL(一)—— CLI和ThriftServer

 上述beeline连接到了brucecentos4上的10003端口,也就是spark thriftserver。所有连接到thriftserver的客户端beeline或者jdbc程序共享同一个spark application,通过beeline或者jdbc程序执行sql相当于向这个application提交并执行一个job。在提示符下输入“!exit”命令可以退出beeline。

最后,如果要停止thriftserver(即停止spark application),需要执行如下命令:

[root@brucecentos4 spark]# $spark_home/sbin/stop-thriftserver.sh

理解Spark SQL(一)—— CLI和ThriftServer

 

 综上所述,在spark sql的cli和thriftserver中,比较推荐使用后者,因为后者更加轻量,只需要启动一个thriftserver(对应一个spark application)就可以给多个beeline客户端或者jdbc程序客户端使用sql,而前者启动一个cli就启动了一个spark application,它只能给一个用户使用。