IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Spark读写Hive

    fansy1990发表于 2016-11-29 22:42:00
    love 0

    环境:CDH5.8,Spark:1.6.0;Hadoop:2.6.0,Intellij IDEA14 ,jdk1.8,sdk:2.10.6 ,maven:3.3.3;

    工程下载地址:https://github.com/fansy1990/spark_hive_source_destination

    1. Spark读取Hive

    Spark读取Hive,使用的是HiveContext,第一步使用sc生成一个HiveContext,然后其他操作就是在HiveContext里面操作了;

    比如使用HiveContext的tables()方法,那么就可以得到Hive中所有表的相关信息,使用工程中的hiveinout.SparkReadHive的测试类,在终端中运行:

    spark-submit --class hiveinout.SparkReadHive --master yarn --deploy-mode cluster --jars /usr/lib/hive/lib/datanucleus-core-3.2.10.jar --files /usr/lib/hive/conf/hive-site.xml spark_hive-1.0-SNAPSHOT.jar

    其中,使用的是Spark On YARN的方式来运行,这里还需要指定第三方jar,也就是datanucleus相关jar以及hive-site.xml文件,这个是根据Spark官网提供的提示,如下:


    运行后,可以在8088端口查看相关输出,如下:


    而在Hive里面查看,也可以看到这几个表:


    2. Spark写入Hive

    Spark写入Hive直接使用HiveContext的sql函数执行一个sql语句,直接传入的就是一个sql语句,具体代码参考hiveinout.SparkWriteHive代码,执行参考:

     spark-submit --class hiveinout.SparkWriteHive --master yarn --deploy-mode cluster --jars /usr/lib/hive/lib/datanucleus-core-3.2.10.jar --files /usr/lib/hive/conf/hive-site.xml spark_hive-1.0-SNAPSHOT.jar "create table tmp2 as select product_id,product_name from products"

    执行后,得到tmp2表,其结果和tmp1的结果一样,而tmp1表使用的代码是一样的,如下:


    查看tmp1和tmp2表的内容:



    3. Spark 写入Hive

    当然,在工程中还提供了一种Spark 写入Hive的方法:1. 通过其他方式处理得到DataFrame后;2. 使用registerTempTable的方式建立一个临时表,然后使用HiveContext的sql方法生成新的Hive表;

    执行参考:

    spark-submit --class hiveinout.SparkReadWriteHive --master yarn --deploy-mode cluster --jars /usr/lib/hive/lib/datanucleus-core-3.2.10.jar --files /usr/lib/hive/conf/hive-site.xml spark_hive-1.0-SNAPSHOT.jar products tmp3

    执行后,得到的结果为:




    如果您觉得lz的文章还行,可以为我投上您宝贵的一票!谢谢!

    http://blog.csdn.net/vote/candidate.html?username=fansy1990





沪ICP备19023445号-2号
友情链接