Spark编译(使用阿里云maven仓库)

我以近十天的编译Spark的痛苦经历,来分享一下如何在国内快速的完成Spark编译。

其实,唯一的任务就是将Spark中的默认maven中央仓库地址,替换成国内的maven仓库地址(我用的是阿里云的)。如果你能翻墙,那就不用浪费时间看下去了。

以下提及的spark均为2.11版本。

修改如下:

  1. 采用maven编译spark:
build/mvn  -DskipTests clean package

那么,spark会默认下载apache-maven-3.3.9的maven版本来下载依赖包。
修改maven的配置文件spark/build/apache-maven-3.3.9/conf/settings.xml,添加阿里云仓库镜像地址:

<mirror>
  <id>central</id>
  <name>Nexus aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>
  1. 采用sbt编译spark:
build/sbt package

那么,spark会默认下载0.13.16的sbt版本(spark/project/build.properties中配置版本号)

并且,会在用户目录下,创建.sbt/目录。
进入该目录,创建repositories文件,添加以下内容:

[repositories]
local
central: http://maven.aliyun.com/nexus/content/groups/public/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
sonatype-oss-snapshots

注意: maven地址对应的名称,一定要是central!!!否则,sbt依旧会使用默认的中央仓库的地址

  1. 修改IsolatedClientLoader#downloadVersion中maven仓库地址
    打开IsolatedClientLoader.scala文件,找到downloadVersion()函数:
···
val classpath = quietly {
      SparkSubmitUtils.resolveMavenCoordinates(
        hiveArtifacts.mkString(","),
        SparkSubmitUtils.buildIvySettings(
          Some("http://www.datanucleus.org/downloads/maven2"),
          ivyPath),
        exclusions = version.exclusions)
    }
···

把some()里面的url地址替换为阿里云仓库地址。

这个问题在[SPARK-19836]以及pr#16803中有提出,但最终都没有给出好的解决方案。所以,这个问题遗留至今。

  1. 修改SparkSubmit#createRepoResolvers的中maven仓库地址
    打开SparkSubmit.scala文件,找到createRepoResolvers()函数:
// the biblio resolver resolves POM declared dependencies
    val br: IBiblioResolver = new IBiblioResolver
    br.setM2compatible(true)
    br.setUsepoms(true)
    br.setName("central")
    cr.add(br)

    val sp: IBiblioResolver = new IBiblioResolver
    sp.setM2compatible(true)
    sp.setUsepoms(true)
    sp.setRoot("http://dl.bintray.com/spark-packages/maven")
    sp.setName("spark-packages")
    cr.add(sp)

添加:

br.setRoot("http://maven.aliyun.com/nexus/content/groups/public/
")

以及,替换sp.setRoot()中的地址为阿里云的仓库地址。
在build test的过程,VersionSuite会用到这几个地址。在我使用阿里云的地址之前,曾N多次一整个晚上阻塞在这个Suite上,最终放弃。

5.修改SparkBuild#L218的maven仓库地址

// Override SBT's default resolvers:
    resolvers := Seq(
      DefaultMavenRepository,
      Resolver.mavenLocal,
      Resolver.file("local", file(Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)
    ),

替换DefaultMavenRepository为:

Resolver.url("central", url("http://maven.aliyun.com/nexus/content/groups/public/")),

同样的,url的名称必须为central

备注:

  1. 在上述修改完成之后,在dev/run-tests执行过程中,到了'Detecting binary incompatibilities with MiMa'的步骤,可能还有问题,例如:
[error] (mllib-local/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: org.scala-lang#scala-reflect;2.11.4: not found
[error] (mllib/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: org.scala-lang#scalap;2.11.0: not found
[error] (streaming-kafka-0-10/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: log4j#log4j;1.2.15: not found
[error] (core/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: org.scala-lang#scalap;2.11.0: not found
[error] (sql/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: org.scala-lang#scalap;2.11.0: not found
[error] (streaming/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: org.scala-lang#scalap;2.11.0: not found
[error] (graphx/*:mimaPreviousClassfiles) sbt.ResolveException: unresolved dependency: org.scala-lang#scalap;2.11.0: not found
[error] Total time: 114 s, completed 2018-1-7 16:02:17
[error] running /Users/wuyi/workspace/spark/dev/mima -Phadoop-2.6 -Pkubernetes -Phive-thriftserver -Pflume -Pkinesis-asl -Pyarn -Pkafka-0-8 -Phive -Pmesos ; received return code 1

解决办法:手动的下载对应jar包的pom文件,放到.m2/repositroy本地仓库中。

这个可能与第5步的修改有关,目前还不清楚。

  1. 阿里云maven仓库有可能出现没有对应jar包的情况,此时也需要手动把jar包拷贝到本地仓库中。

  2. 如果你需要向spark提交pr,那么,请记得chekout -- 刚刚被修改的几个源码文件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容