spark sql 對接 HDFS


上一篇博客我向大家介紹了如何快速地搭建spark run on standalone,下面我將介紹saprk sql 如何對接 hdfs

 

我們知道,在spark shell 中操作hdfs 上的數據是很方便的,但是操作也未免過於繁瑣,幸好spark 還想用戶提供另外兩種操作 spark sql 的方式

一 spark-sql

啟動方式也比較簡單

如果不添加 hive.metastore.warehouse.dir hiveconf 這個參數,則啟動的spark sql 是基於本地文件的,默認為 file:/user/hive/warehouse(這種模式我個人是不大建議的)

/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 語句倒還行

      后面填寫spark master 的URL

--driver-cores 這個參數是指定運行是CPU的最大核數

--driver-java-options 這個是啟動sparak sql 服務時,需要添加的jvm 參數, spark.driver.port 是指定一個端口,具體什么用途,我還不是非常了解,望告知!

 

啟動的spark sql 基於hdfs 的方法

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM