spark sql 使用hive作为数据源

本来是很简单的一件事,代码也不复杂,如下:

代码:

public class LocationFromHiveDataSource {

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        // 首先还是创建SparkConf
        SparkConf conf = new SparkConf()
                .setAppName("LocationFromHiveDataSource");
        // 创建JavaSparkContext
        JavaSparkContext sc = new JavaSparkContext(conf);
        // 创建HiveContext,注意,这里,它接收的是SparkContext作为参数,不是JavaSparkContext,其实也可以使用JavaSparkContext,只不过内部也是做了sc.sc()的操作
        HiveContext hiveContext = new HiveContext(sc.sc());
        DataFrame goodStudentsDF = hiveContext.sql("SELECT * FROM student");
        goodStudentsDF.show();
        sc.close();
    }
    
}


打成jar包后,使用spark-submit提交即可,提交脚本如下:

#!/bin/bash
/usr/local/spark/bin/spark-submit --jars /usr/local/spark/lib/mysql-connector-java-5.1.18-bin.jar  --class com.telecom.location.hive.LocationFromHiveDataSource --files /usr/local/hive/conf/hive-site.xml  /usr/local/sparkshell/wingpay.jar

当然你得在hive中创建了表,里面最好有点数据,如果顺利,屏幕上会输出令你觉得很舒心的类似于使用mysql查看数据的结果,但是如果你的spark版本和hadoop版本不一致的话

那你就哭吧,哭完了之后,重新下载一个跟hadoop一致的spark预编译版本或者自己编译一个。因为有些spark版本根本就没有将hive相关的东西打包进spark的编译包,这时就会报各种类找不到,方法找不到。

虽然例子很简单,但是换spark之前我把hive也换成了最新的了,然后还是按照之前一样启动,过程那叫一个曲折,新版本实用hive命令之前得使用schematool初始化metadata之类的,如:

[root@hadoop0 bin]# ./schematool -initSchema -dbType mysql


通过动手来跑这个程序,才发现以前那种看到了这个例子觉得很简单懒得去动手做的习惯真的是太蠢了,平时多流汗,战时少流血是有道理的,如果开始学的时候认认真真的跑一遍,实际上使用的时候就不会忙得手忙脚乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值