• 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
  • 相关阅读:
    Android ANR的产生与分析
    The module is an Android project without build variants, and cannot be built
    ExpandableListView使用(三)-ScrollView嵌套ExpandableListView,列表显示不全
    在代码中设置RelativeLayout布局中标签的android:layout_toLeftOf、android:layout_toRightOf等属性
    git报ssh variant 'simple' does not support setting port解决办法
    解决ScrollView嵌套RecyclerView出现item显示不全的问题
    解决ScrollView嵌套RecyclerView的显示及滑动问题
    Android在开发中的使用技巧之解决ScrollView嵌套RecyclerView出现的系列问题
    android listview优化:滑动时颜色错乱问题
    映射的介绍与使用
  • 原文地址:https://www.cnblogs.com/chenfool/p/4502212.html
Copyright © 2020-2023  润新知