spark SQL 性能调整
对于某些工作负载,可以通过在内存中缓存数据或打开一些实验选项来提高性能。
1,在内存中缓存数据
Spark SQL可以通过调用spark.catalog.cacheTable("tableName")或使用内存中的列格式缓存表dataFrame.cache()。然后,Spark SQL将只扫描所需的列,并自动调整压缩以最大限度地减少内存使用和GC压力。你可以调用spark.catalog.uncacheTable("tableName")从内存中删除表。
内存中缓存的配置可以使用上面的setConf方法SparkSession或SET key=value使用SQL 运行 命令来完成。
属性名称 | 默认 | 含义 |
spark.sql.inMemoryColumnarStorage.compressed | true | 设置为true时,Spark SQL将根据数据的统计信息自动为每列选择压缩编解码器。 |
spark.sql.inMemoryColumnarStorage.batchSize | 10000 | 控制列式高速缓存的批量大小。较大的批量大小可以提高内存利用率和压缩率,但是在缓存数据时会面临OOM风险。 |
2,其他配置选项
以下选项也可用于调整查询执行的性能。在将来的版本中,这些选项可能会被弃用,因为会自动执行更多的优化。
属性名称 | 默认 | 含义 |
spark.sql.files.maxPartitionBytes | 134217728(128 MB) | 读取文件时打包到单个分区的最大字节数。 |
spark.sql.files.openCostInBytes | 4194304(4 MB) | 可以同时扫描以字节数量度量的打开文件的估计成本。将多个文件放入分区时使用。 最好是高估,那么小文件的分区会比大文件的分区快(这是首先安排的)。 |
spark.sql.broadcastTimeout | 300 | 广播连接中的广播等待时间以秒为单位超时 |
spark.sql.autoBroadcastJoinThreshold | 10485760(10 MB) | 配置在执行连接时将广播到所有工作节点的表的最大大小(以字节为单位)。通过将 此值设置为-1,可以禁用广播。请注意,目前只有ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan运行命令的Hive Metastore表才支持统计信息 。 |
spark.sql.shuffle.partitions | 200 | 配置混洗连接或聚合数据时要使用的分区数。 |
3, 分布式SQL引擎
Spark SQL也可以使用其JDBC / ODBC或命令行界面作为分布式查询引擎。在这种模式下,最终用户或应用程序可以直接与Spark SQL进行交互以运行SQL查询,而无需编写任何代码。
4, 运行Thrift JDBC / ODBC服务器
这里实现的Thrift JDBC / ODBC服务器对应HiveServer2
于Hive 1.2.1。您可以使用Spark或Hive 1.2.1附带的beeline脚本测试JDBC服务器。 要启动JDBC / ODBC服务器,请在Spark目录中运行以下命令:
./sbin/start-thriftserver.sh
该脚本接受所有的
bin/spark-submit
命令行选项,还有一个
--hiveconf
选项来指定Hive属性。您可以运行
./sbin/start-thriftserver.sh --help
所有可用选项的完整列表。默认情况下,服务器侦听localhost:10000。你可以通过两个环境变量覆盖这个行为,即:
export HIVE_SERVER2_THRIFT_PORT=<listening-port>
export HIVE_SERVER2_THRIFT_BIND_HOST=<listening-host>
./sbin/start-thriftserver.sh \
--master <master-uri> \
...
或系统属性:
./sbin/start-thriftserver.sh \
--hiveconf hive.server2.thrift.port=<listening-port> \
--hiveconf hive.server2.thrift.bind.host=<listening-host> \
--master <master-uri>
...
现在,您可以使用直线来测试Thrift JDBC / ODBC服务器:
./bin/beeline
使用以下命令直接连接到JDBC / ODBC服务器:
beeline> !connect jdbc:hive2://localhost:10000
直线会问你一个用户名和密码。在非安全模式下,只需在您的机器上输入用户名和密码即可。对于安全模式,请按照直线文档中的 说明进行操作。
hive 的结构是通过将您做hive-site.xml
,core-site.xml
和hdfs-site.xml
文件conf/
。
您也可以使用Hive附带的直线脚本。
Thrift JDBC服务器还支持通过HTTP传输发送节俭的RPC消息。使用以下设置启用HTTP模式作为系统属性或在hive-site.xml
文件中conf/
:
hive.server2.transport.mode - Set this to value: http
hive.server2.thrift.http.port - HTTP port number to listen on; default is 10001
hive.server2.http.endpoint - HTTP endpoint; default is cliservice
要测试,使用直线连接到HTTP模式下的JDBC / ODBC服务器:
beeline> !connect jdbc:hive2://<host>:<port>/<database>?hive.server2.transport.mode=http;hive.server2.thrift.http.path=<http_endpoint>
5, 运行Spark SQL CLI
Spark SQL CLI是一种方便的工具,可以在本地模式下运行Hive Metastore服务,并从命令行执行查询输入。请注意,Spark SQL CLI无法与Thrift JDBC服务器通信。
要启动Spark SQL CLI,请在Spark目录中运行以下命令:
./bin/spark-sql
hive的结构是通过将您做
hive-site.xml
,
core-site.xml
和
hdfs-site.xml
文件
conf/
。您可以运行
./bin/spark-sql --help
所有可用选项的完整列表。