Spark-sql CLI 在运行查询时仅使用 1 个执行程序
Posted
技术标签:
【中文标题】Spark-sql CLI 在运行查询时仅使用 1 个执行程序【英文标题】:Spark-sql CLI use only 1 executor when running query 【发布时间】:2015-01-22 03:10:44 【问题描述】:我将使用 spark-sql cli 替换 hive cli shell,并按照命令运行 spark-sql cli,(我们在 yarn Hadoop 集群上使用,hive-site.xml 已经复制到/conf)
.> 火花-sql 然后shell打开,工作正常,
然后我执行类似的查询,
./spark-sql>select devicetype, count(*) from mytable group by devicetype;
命令执行成功,结果正确。但我注意到性能很慢。
从 Spark 作业 ui http://myhost:4040,我注意到只有 1 个 Executor 标记为已使用,所以这可能是原因。
我尝试修改spark-sql脚本并在exec命令中添加-num-executors 500,但没有帮助。
所以任何人都可以帮助解释为什么?
谢谢。
【问题讨论】:
【参考方案1】:参考文档:http://spark.apache.org/docs/latest/sql-programming-guide.html
spark-sql
是一个只能在本地模式下工作的 SQL CLI 工具,这就是为什么你只能看到一个执行器
如果您想拥有 SQL 的集群版本,您应该启动 thriftserver
并使用 beeline
工具(与 Spark 一起提供)通过 JDBC 连接到它。您可以在官方文档http://spark.apache.org/docs/latest/sql-programming-guide.html
开始:
export HIVE_SERVER2_THRIFT_PORT=<listening-port>
export HIVE_SERVER2_THRIFT_BIND_HOST=<listening-host>
./sbin/start-thriftserver.sh \
--master <master-uri> \
...
连接:
./bin/beeline
beeline> !connect jdbc:hive2://<listening-host>:<listening-port>
【讨论】:
非常感谢您的回答。我尝试看到直线使用 M/R 作业来运行 sql 而不是 spark 作业。我想要的是使用火花来运行这项工作。所以目前没有办法做到这一点? 首先,你确定你已经启动了thrift server来使用Spark吗?start-thriftserver.sh
应该位于 Spark 目录中。其次,你确定你在beeline中指定了正确的端口并且没有连接到Hive吗?可以肯定的是,如果 Hive thriftserver 在同一台机器上运行,我建议您停止它
我们的用户不愿意迁移到使用beeline,他们以前使用hive查询,因为spark-sql很好兼容hive,所以我不得不回到spark-sql。我看到当输入 spark-sql --help 时,它说有像 --num-executors 这样的参数,因为它只能在本地模式下工作,为什么它有这个但不能工作?
你没有抓住重点。 “Spark-sql”工具仅用于调试目的,不用于生产用途。使用 Spark Thrift 服务器,您可以启动类似于 DBMS 引擎的东西 - Spark + JDBC 接口的集群。之后,您的用户可以使用任何工具连接到它(例如 Squirrel),您没有义务使用 Beeline。他们可以在那里直接使用 HiveQL
其实用户可以添加 --master yarn 来启动 yarn 客户端模式【参考方案2】:
直线
\> !connect jdbc:hive2://localhost:10002/default;transportMode=http;httpPath=cliservice
10002 是我的 spark thrift 服务器端口。
把它改成你的。 您可以从您的 thrift 日志中找到您的 thrift 端口。
【讨论】:
以上是关于Spark-sql CLI 在运行查询时仅使用 1 个执行程序的主要内容,如果未能解决你的问题,请参考以下文章
Spark-SQL CLI:未调用 SupportsPushDownFilters.pushFilters
spark-sql(spark sql cli)客户端集成hive