Spark读写Hive

环境: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表使用的HiveQL代码是一样的,如下:


查看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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章