【问题标题】:How can I get HBase to play nicely with sbt's dependency management?如何让 HBase 与 sbt 的依赖管理很好地配合使用?
【发布时间】:2011-06-06 21:46:27
【问题描述】:

我正在尝试启动一个使用 CDH3 的 Hadoop 和 HBase 的 sbt 项目。我正在尝试使用 project/build/Project.scala 文件来声明对 HBase 和 Hadoop 的依赖关系。 (我承认我对 sbt、maven 和 ivy 的掌握有点弱。如果我说或做一些愚蠢的事情,请原谅我。)

Hadoop 依赖项一切顺利。添加 HBase 依赖导致对 Thrift 0.2.0 的依赖,似乎没有 repo,或者从这个 SO post. 听起来

所以,真的,我有两个问题: 1. 老实说,我不想依赖 Thrift,因为我不想使用 HBase 的 Thrift 接口。有没有办法告诉 sbt 跳过它? 2. 有没有更好的设置方法?我应该将 HBase jar 转储到 lib 目录中并继续吗?

更新这是完成我想要的 sbt 0.10 build.sbt 文件:

scalaVersion := "2.9.0-1"

resolvers += "ClouderaRepo" at "https://repository.cloudera.com/content/repositories/releases"

libraryDependencies ++= Seq(
  "org.apache.hadoop" % "hadoop-core" % "0.20.2-cdh3u0",
  "org.apache.hbase" % "hbase" % "0.90.1-cdh3u0"
)

ivyXML :=
  <dependencies>
    <exclude module="thrift"/>
  </dependencies>

【问题讨论】:

    标签: scala hadoop hbase thrift sbt


    【解决方案1】:

    查看HBase POM file,Thrift 位于http://people.apache.org/~rawson/repo 的repo 中。您可以将其添加到您的项目中,它应该会找到 Thrift。我以为 SBT 会解决这个问题,但这是 SBT、Ivy 和 Maven 的交集,所以谁能真正说出真正应该发生什么。

    如果您真的不需要 Thrift,您可以使用内联 Ivy XML 排除依赖项,如 on the SBT wiki 所记录的那样。

    override def ivyXML = 
      <dependencies>
        <exclude module="thrift"/>
      </dependencies>
    

    Re: 将 jar 转储到 lib 目录中,这将是短期收益,长期损失。这当然更方便,如果这是你下周要扔掉的一些概念证明,那么肯定只是扔进罐子里然后忘记它。但是对于任何生命周期超过几个月的项目,花时间进行正确的依赖管理是值得的。

    虽然所有这些工具都有其挑战,但好处是:

    1. 依赖关系分析可以告诉您直接依赖关系何时具有冲突的传递依赖关系。在使用这些工具之前,这通常会导致奇怪的运行时行为或方法未找到异常。
    2. 升级非常简单。只需更改版本号、更新即可。
    3. 它避免了将二进制文件提交给版本控制。当需要合并分支时,它们可能会出现问题。
    4. 除非您有明确的政策来说明如何对 lib 目录中的二进制文件进行版本控制,否则很容易忘记您拥有哪些版本。

    【讨论】:

    • 谢谢,@dave! ivyXml 位成功了。我认为 sbt 没有选择 Thrift 的原因是因为 ~rawson repo 不在它的祝福 repo 列表中。
    【解决方案2】:

    我在 github 上有一个非常简单的带有 Hadoop 的 sbt 项目示例:https://github.com/deanwampler/scala-hadoop

    查看project/build/WordCountProject.scala,我在其中定义了一个名为ClouderaMavenRepo 的变量,它定义了Cloudera 存储库的位置,以及一个名为hadoopCore 的变量,它定义了Hadoop jar 的具体信息。

    如果您在浏览器中访问 Cloudera 存储库,您应该能够导航到 Hive 的相应信息。

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2011-07-30
      • 2014-04-07
      • 2019-05-18
      相关资源
      最近更新 更多