1. 程式人生 > >spark SQL(六)效能調整

spark SQL(六)效能調整

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.xmlcore-site.xmlhdfs-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.xmlcore-site.xmlhdfs-site.xml檔案conf/您可以執行./bin/spark-sql --help所有可用選項的完整列表。