SparkSQL与Hive的集成实践(69)

1、准备

    安装hive,配置hive-env.sh 和hive-site.xml文件。将hive-site.xml文件拷贝到spark安装目录下,也可以在spark-sumit提交时指定hive-sitte.xml位置。(确保Mysql的jar包已在hive的lib文件夹中,或者在spark-sumit提交时指定)

2、实例

package org.apache.spark.sql



import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext


/**   
* @Title : SparkSQL2Hive.scala 
* @Package org.apache.spark.sql 
* @Description: TODO(SparkSQL与Hive的集成实践) 
* @author 涛哥  
* @date 2016年4月13日 下午1:08:13 
* @version V1.0   
*/
object SparkSQL2Hive {
  def main(args: Array[String]): Unit = {
     val conf = new SparkConf().setAppName("SparkSQL2Hive").setMaster("spark://192.168.59.128:7077")
     val sc = new SparkContext(conf) //创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
     /**
     * 第一:在目前企业级大数据Spark开发的时候绝大多数情况下是采用Hive作为数据仓库的;
     * Spark提供了Hive的支持功能,Spark通过HiveContext可以直接操作Hive中的数据;
     * 基于HiveContext我们可以使用sql/hql两种方式才编写SQL语句对Hive进行操作,包括
     * 创建表、删除表、往表里导入数据以及用SQL语法构造各种SQL语句对表中的数据进行CRUD操作
     * 第二:我们也可以直接通过saveAsTable的方式把DataFrame中的数据保存到Hive数据仓库中;
     * 第三:可以直接通过HiveContext.table方法来直接加载Hive中的表而生成DataFrame 
     */
     val hiveContext = new HiveContext(sc)
     hiveContext.sql("use hive") //使用Hive数据仓库中的hive数据库
     hiveContext.sql("DROP TABLE IF EXISTS people") //删除同名的Table
     hiveContext.sql("CREATE TABLE IF NOT EXISTS people(name STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'" )  //创建自定义的Table,此时指明导入方式
     hiveContext.sql("LOAD DATA LOCAL INPATH '/home/soft/people.txt' INTO TABLE people")
     hiveContext.sql("DROP TABLE IF EXISTS peoplescores")
     hiveContext.sql("CREATE TABLE IF NOT EXISTS peoplescores(name STRING, score INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'")
     hiveContext.sql("LOAD DATA LOCAL INPATH '/home/soft/peoplescore.txt' INTO TABLE peoplescores")
     /**
       * 通过HiveContext使用join直接基于Hive中的两张表进行操作获得大于90分的人的name、age、score
     */
     val resultDF = hiveContext.sql("SELECT  pi.name, pi.age, ps.score " 
        + "FROM people pi JOIN peoplescores ps ON pi.name=ps.name WHERE ps.score>90")
      hiveContext.sql("DROP TABLE IF EXISTS peopleinformationresult")
     /**
    * 通过saveAsTable创建一张Hive Managed Table, 当删除该表的时候,数据也会一起被删除(磁盘上的数据不再存在)
      */
      resultDF.saveAsTable("peopleinformationresult")
      
      /**
       * 使用HiveContext的table方法可以直接去读Hive数据仓库中的Table并生成DataFrame,接下来就可以
       * 进行机器学习、图计算、各种复杂ETL等操作;
       */
      val dataFromHive = hiveContext.table("peopleinformationresult")
      dataFromHive.show()  
   }

}

注:将项目打成jar包,上传到安装spark的机器,执行以下命令

  ./bin/spark-submit --class org.apache.spark.sql.SparkSQL2Hive --file /hom--driver-class-path /home/soft/hive-1.2.1/lib/mysql-connector-java-5.1.21.jar  --master spark://192.168.59.128:7077 /home/soft/spark-1.6.1-bin-hadoop2.4/SparkSQL2Hive .jar 

转载于:https://my.oschina.net/u/1439539/blog/658074

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值