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. 执行如下命令启动:
[[email protected] ~]# nohup hive --service metastore &
成功启动后, 会出现一个 RunJar 的进程, 同时会监听端口 9083(hive metastore 的默认端口).
先来看 CLI, 通过 spark-sql 脚本来使用 CLI. 执行如下命令:
[[email protected] spark]# $SPARK_HOME/bin/spark-sql --master yarn
上述命令执行后会启动一个 yarn client 模式的 Spark 程序, 如下图所示:
同时它会连接到 hive metastore, 可以在随后出现的 spark-sql > 提示符下运行 hive sql 语句, 比如:
其中每输入并执行一个 SQL 语句相当于执行了一个 Spark 的 Job, 如图所示:
也就是说执行 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:
[[email protected] spark]# $SPARK_HOME/sbin/start-thriftserver.sh --master yarn
执行上面的命令后, 会生成一个 SparkSubmit 进程, 实际上是启动一个 yarn client 模式的 Spark Application, 如下图所示:
而且它提供一个 JDBC/ODBC 接口, 用户可以通过 JDBC/ODBC 接口连接 ThriftServer 来访问 Spark SQL 的数据. 具体可以通过 Spark 提供的 beeline 或者在程序中使用 JDBC 连接 ThriftServer. 例如在启动 Spark ThriftServer 后, 可以通过如下命令使用 beeline 来访问 Spark SQL 的数据.
[[email protected] spark]# $SPARK_HOME/bin/beeline -n root -u jdbc:hive2://BruceCentOS4.Hadoop:10003
上述 beeline 连接到了 BruceCentOS4 上的 10003 端口, 也就是 Spark ThriftServer. 所有连接到 ThriftServer 的客户端 beeline 或者 JDBC 程序共享同一个 Spark Application, 通过 beeline 或者 JDBC 程序执行 SQL 相当于向这个 Application 提交并执行一个 Job. 在提示符下输入 "!exit" 命令可以退出 beeline.
最后, 如果要停止 ThriftServer(即停止 Spark Application), 需要执行如下命令:
[[email protected] spark]# $SPARK_HOME/sbin/stop-thriftserver.sh
综上所述, 在 Spark SQL 的 CLI 和 ThriftServer 中, 比较推荐使用后者, 因为后者更加轻量, 只需要启动一个 ThriftServer(对应一个 Spark Application)就可以给多个 beeline 客户端或者 JDBC 程序客户端使用 SQL, 而前者启动一个 CLI 就启动了一个 Spark Application, 它只能给一个用户使用.
来源: http://www.bubuko.com/infodetail-3296823.html