CDH5.1.0编译spark-assembly包来支持hive

原生的spark assembly jar是不依赖hive的,如果要使用spark hql必须将hive相关的依赖包打到spark assembly jar中来。打包方法:

假设已经装好了maven,

1添加环境变量,如果jvm的这些配置太小的话,可能导致在编译过程中出现OOM,因此放大一些:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"


2 cd到spark-1.0.0-cdh5.1.0/assembly/源码目录,执行:

mvn -Pyarn -Dhadoop.version=2.3.0-cdh5.1.0 -Phive -DskipTests clean package

maven的配置文件apache-maven-3.2.5/conf/settings.xml (部分配置)

    <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <name>central</name>
<!--      <url>http://mvnrepo.kuaipan.cn/nexus/content/repositories/central</url>   -->
        <url>http://123.57.64.213:8081/nexus/content/groups/public</url>
    </mirror>

第一个地址编译的时候总是卡主,后来用第二个就没问题了,是因为第一个缺少jar包,只要配置的私服中jar包是全的就可以



注意hadoop.version和scala的版本设置成对应的版本

经过漫长的编译过程(我编译了2个半小时),最终成功了,在assembly/target/scala-2.10目录下面有spark-assembly-1.0.0-cdh5.1.0-hadoop2.3.0-cdh5.1.0.jar文件,用rar打开看看hive jdbc package有没有包含在里面,有的话说明编译成功了。

-------------------------------------------------------------------

测试代码如下:

//spark-submit --class com.kingsoft.sparksql.TestSparkSql --jars /home/hadoop/sparkSqlTest/lib/spark-catalyst_2.10-1.0.0-cdh5.1.0.jar,/home/hadoop/sparkSqlTest/lib/spark-hive_2.10-1.0.0-cdh5.1.0.jar,/home/hadoop/sparkSqlTest/lib/spark-sql_2.10-1.0.0-cdh5.1.0.jar  /home/hadoop/sparkSqlTest/lib/SparkStreaming-0.0.1-SNAPSHOT.jar
	public static void main(String[] args) {
		SparkConf conf = new SparkConf().setAppName("SparkSql");//.setMaster("spark://hz01-cs-app022015.ksc.com:7077");
		JavaSparkContext sc = new JavaSparkContext(conf);
		JavaHiveContext sqlContext = new org.apache.spark.sql.hive.api.java.JavaHiveContext(sc);
//		sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)");
//		sqlContext.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src");
//		
//		// Queries are expressed in HiveQL.
//		 List<Row> results = sqlContext.sql("FROM src SELECT key, value").collect();
		 
		 
		 List<Row> tables = sqlContext.hql("show tables").collect();
		 for(Row row:tables){
			 System.out.println(row.getString(0));//这样才能取出表名
		 }
		 
	}


你可能感兴趣的:(CDH5.1.0编译spark-assembly包来支持hive)