hadoop分布式集群搭建:hadoop分布式集群搭建
spark分布式集群搭建:spark分布式集群搭建
hive分布式集群搭建:待完善
通过Spark Sql 查询Hive数据库数据
数据库:bi_ods;
表:owms_m_locator
新增一个Mave project工程
package com.lm.hive.SparkHive;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.hive.HiveContext;
/**
* Spark sql获取Hive数据
*
*/
public class App
{
public static void main( String[] args )
{
SparkConf sparkConf = new SparkConf().setAppName("SparkHive").setMaster("local[2]");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
//不要使用SQLContext,部署异常找不到数据库和表
HiveContext hiveContext = new HiveContext(sc);
SQLContext sqlContext = new SQLContext(sc);
//查询表前10条数据
hiveContext.sql("select * from bi_ods.owms_m_locator limit 10").show();
sc.stop();
}
}
4.0.0
com.lm.hive
SparkHive
0.0.1-SNAPSHOT
jar
SparkHive
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
mysql
mysql-connector-java
5.1.39
org.slf4j
slf4j-log4j12
1.7.22
org.apache.hadoop
hadoop-client
2.6.4
org.apache.spark
spark-sql_2.10
1.6.0
org.apache.spark
spark-hive_2.10
1.6.0
org.apache.spark
spark-streaming_2.10
1.6.0
slf4j-log4j12
org.slf4j
org.apache.spark
spark-core_2.10
1.6.0
org.apache.hive
hive-jdbc
2.1.1
org.apache.hive
hive-exec
2.1.1
org.apache.maven.plugins
maven-shade-plugin
package
shade
true
allinone
*:*
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
reference.conf
META-INF/spring.handlers
META-INF/spring.schemas
本文编译成 SparkHive-0.0.1-SNAPSHOT-allinone.jar
通过rz命令上传
命令:
sh bin/spark-submit --class com.lm.hive.SparkHive.App --master yarn --files /home/winit/spark-1.6.0/conf/hive-site.xml java_jar/SparkHive-0.0.1-SNAPSHOT-allinone.jar
结果:
在网上搜索,很多是通过SQLContext实例去查询Hive数据,当本人使用时,出现以下异常
1. Exception in thread "main" org.apache.spark.sql.AnalysisException: Table not found: `bi_ods`.`owms_m_locator`;
解决:
SQLContext sqlContext = new SQLContext(sc);
替换为:
HiveContext hiveContext = new HiveContext(sc);
2. Exception in thread "main" java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
解决:
javax.servlet相关包重复导入引起的
hadoop-client或hadoop-common排除java.servelt等包
org.apache.hadoop
hadoop-client
2.6.4
javax.servlet
*
Spark SQL程序的主入口是SQLContext类或它的子类。创建一个基本的SQLContext,你只需要SparkContext
除了基本的SQLContext,也可以创建HiveContext。SQLContext和HiveContext区别与联系为:
SQLContext现在只支持SQL语法解析器(SQL-92语法)
HiveContext现在支持SQL语法解析器和HiveSQL语法解析器,默认为HiveSQL语法解析器,用户可以通过配置切换成SQL语法解析器,来运行HiveSQL不支持的语法。
使用HiveContext可以使用Hive的UDF,读写Hive表数据等Hive操作。SQLContext不可以对Hive进行操作。
Spark SQL未来的版本会不断丰富SQLContext的功能,做到SQLContext和HiveContext的功能容和,最终可能两者会统一成一个Context
HiveContext包装了Hive的依赖包,把HiveContext单独拿出来,可以在部署基本的Spark的时候就不需要Hive的依赖包,需要使用HiveContext时再把Hive的各种依赖包加进来。
SQL的解析器可以通过配置spark.sql.dialect参数进行配置。在SQLContext中只能使用Spark SQL提供的”sql“解析器。在HiveContext中默认解析器为”hiveql“,也支持”sql“解析器。
详情见:SQLContext和HiveContext区别与联系
代码下载地址:Java + Spark SQL + Hive + Maven简单实例代码