上一篇博客我向你們介紹瞭如何快速地搭建spark run on standalone,下面我將介紹saprk sql 如何對接 hdfsjava
咱們知道,在spark shell 中操做hdfs 上的數據是很方便的,可是操做也未免過於繁瑣,幸虧spark 還想用戶提供另外兩種操做 spark sql 的方式sql
一 spark-sqlshell
啓動方式也比較簡單數據庫
若是不添加 hive.metastore.warehouse.dir hiveconf 這個參數,則啓動的spark sql 是基於本地文件的,默認爲 file:/user/hive/warehouse(這種模式我我的是不大建議的)ubuntu
/opt/spark-1.3.1-bin-hadoop2.6/bin/spark-sql --master spark://ubuntu1:7800 --driver-cores 1 --driver-java-options "-Dspark.driver.port=4050"
--master 這個是必須的,不然後面執行的sql 都只會在當前一個進程計算,性能很是差,簡單測試測試sql 語句倒還行jvm
後面填寫spark master 的URLoop
--driver-cores 這個參數是指定運行是CPU的最大核數性能
--driver-java-options 這個是啓動sparak sql 服務時,須要添加的jvm 參數, spark.driver.port 是指定一個端口,具體什麼用途,我還不是很是瞭解,望告知!測試
啓動的spark sql 基於hdfs 的方法ui
bin/spark-sql --master spark://ubuntu1:7800 --driver-cores 1 --driver-java-options "-Dspark.driver.port=4050" --hiveconf "hive.metastore.warehouse.dir=hdfs://ubuntu1:9000/user/hive/warehouse"
--hiveconf 參數是添加加載hive 模塊時,須要調整的參數 , hive.metastore.warehouse 則是通知hive 模塊,後面spark sql 的數據都是存儲在HDFS 中。其中hdfs://ubuntu1:9000 是HDFS 的URL
注意:
在spark 2.0.1 中,--hiveconf "hive.metastore.warehouse" 參數已經再也不生效,用戶應該使用
--conf spark.sql.warehouse.dir=hdfs://HOSTNAME:9000/user/hive/warehouse 命令進行代替
正確登錄spark-sql 後,就能像在hive 中執行那樣,直接輸入sql 語句便可
測試一下
spark-sql> create table test (id int , name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE ;
向表中導入本地文件
LOAD DATA LOCAL INPATH '/opt/spark-1.3.1-bin-hadoop2.6/test.csv' INTO TABLE test;
向表中導入HDFS 文件
LOAD DATA INPATH 'hdfs://ubuntu1:9000/user/hive/warehouse/test.csv' INTO TABLE test;
兩個test.csv 文件都是
1|chen 2|fool
查詢
select * from test;
而後它就打一大堆的執行信息,最後它會顯示執行成功了。
我我的以爲這個方法還不夠贊,由於spark 還提供了另外一種更犀利操做sql 的方法
二 thriftserver
因爲如今hive 的metastore 並無使用第三方數據庫,因此只能支持一個用戶操做元數據,在退出剛纔的spark-sql 後,咱們啓動thriftserver
/opt/test_spark/spark-1.3.1-bin-hadoop2.6/sbin/start-thriftserver.sh --master spark://ubuntu1:7800 --driver-java-options "-Dspark.driver.port=4050" --hiveconf "hive.server2.thrift.port=11000" --hiveconf "hive.metastore.warehouse.dir=hdfs://ubuntu1:9000/user/hive/warehouse"
參數和上面的相同,我就再也不一一解釋了,只有
--hiveconf hive.server2.thrift.port=11000 與上面不一樣,這個參數是指定thriftserver 端口,默認是10000
啓動thriftserver 後,咱們能夠經過netstat 查看端口是否被正常啓動了
netstat -nap |grep 11000 netstat -nap |grep 4050
而後咱們在登錄 beeline 界面
/opt/test_spark/spark-1.3.1-bin-hadoop2.6/bin/beeline --hiveconf hive.server2.thrift.port=11000 --hiveconf "hive.metastore.warehouse.dir=hdfs://ubuntu1:9000/user/hive/warehouse"
登錄後,咱們須要先鏈接上 thriftserver
!connect jdbc:hive2://localhost:11000
鏈接後,咱們就能自由操做數據了
show tables;
+------------+--------------+
| tableName | isTemporary |
+------------+--------------+
| test | false |
+------------+--------------+
這個是剛纔在spark-sql 上創建的表,而且剛纔的數據也在,咱們利用它來測試一下
select * from test;
+-----+-------+
| id | name |
+-----+-------+
| 1 | chen |
| 2 | fool |
| 1 | chen |
| 2 | fool |
+-----+-------+
輸入很是正常,而且操做界面也很是的清爽。
退出這個beeline 界面,命令比較奇怪
!quit
你們也能夠經過下面命令得到幫助信息
!help