本篇文章主要記錄最近在使用spark sql 時遇到的問題已經使用心得。
1 spark 2.0.1 中,啟動thriftserver 或者是spark-sql時,如果希望spark-sql run on hdfs,那樣需要增加參數 "--conf spark.sql.warehouse.dir=hdfs://HOSTNAME:9000/user/hive/warehouse"
例如啟動thriftserver:
bin/start-thriftserver.sh --master spark://HOSTNAME:7077 --conf spark.sql.warehouse.dir=hdfs://HOSTNAME:9000/user/hive/warehouse --driver-memory 2g --executor-memory 35g
說明
spark.sql.warehouse.dir 這個參數如果不指定,spark sql 會自動在SPARK_HOME 建立一個 spark-warehouse 目錄,里面保存對應的數據
driver-memory 參數為執行的app 所能使用的內存大小
executor-memory 參數設置當前任務將占用spark 集群中每個worker的內存
CORE 不指定的話,默認使用每個worker 所有的CPU 數目
2 如果spark sql 是run on hdfs,則用戶在beeline中向其他的表寫入數據時,會發生hfds權限異常錯誤
解決方式是對hdfs 的權限設置進行關閉,在hadoop 2.7.3 版本中,關閉hdfs權限檢查的參數為
hdfs-site.xml
<property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
3 spark sql 使用parquet 壓縮方式,直接在beeline 執行類似sql 命令
CREATE TABLE parquetTable (name string) USING org.apache.spark.sql.parquet OPTIONS ( path "examples/src/main/resources/users.parquet" );
或者
CREATE TABLE parquetTable (name string) USING org.apache.spark.sql.parquet;
另外
如果使用sbin/stop-all.sh 命令,集群中還有一些Worker或者是Master 進程無法退出,一般是環境混亂了導致,kill -15 PID 即可
還有一種情況,如果用戶在sbin/start-all.sh 后,發現spark 集群中莫名其妙多了幾個Worker 或者 Master 進程,同理也是環境混亂了導致,用戶只要 kill -15 PID 即可
徹底解決這種情況,用戶應該首先對spark 集群進行停機
sbin/stop-all.sh
然后對沒法停止的spark 進程進行kill -15 命令殺掉
最后用戶需要手工刪除集群中 /tmp/spark* 所有文件,保證環境干凈。