环境: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