spark sql 对接 HDFS

上一篇博客我向你们介绍了如何快速地搭建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
相关文章
相关标签/搜索