我正在努力获得一个使用CDH3的Hadoop和HBase的sbt项目。我正在尝试使用project / build / Project.scala文件来声明对HBase和Hadoop的依赖。 (我承认我对sbt,maven和常春藤的把握有点弱。如果我说或做一些愚蠢的话,请原谅我。)
随着Hadoop的依赖,一切都顺其自然。添加HBase依赖性会导致对Thrift 0.2.0的依赖,因为它似乎没有回购,所以它听起来是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>
答案 0 :(得分:4)
看HBase POM file,Thrift在http://people.apache.org/~rawson/repo的回购中。您可以将它添加到您的项目中,它应该找到Thrift。我认为SBT会想到这一点,但这是SBT,Ivy和Maven的交集,所以谁能真正说出应该发生什么。
如果您确实不需要Thrift,则可以使用内联常春藤XML排除依赖关系,如文档on the SBT wiki所述。
override def ivyXML =
<dependencies>
<exclude module="thrift"/>
</dependencies>
Re:将jar转储到lib目录中,这将是一个短期收益,长期损失。这当然是更加权宜之计,如果这是你下周要扔掉的一些概念证据,那么肯定只是扔掉罐子而忘了它。但对于任何寿命超过几个月的项目,花时间让依赖管理正确是值得的。
虽然所有这些工具都面临挑战,但其好处是:
答案 1 :(得分:0)
我在github上有一个关于Hadoop的sbt项目的一个非常简单的例子:https://github.com/deanwampler/scala-hadoop。
查看project/build/WordCountProject.scala
,我定义了一个名为ClouderaMavenRepo
的变量,它定义了Cloudera存储库位置,以及名为hadoopCore
的变量,它定义了Hadoop jar的特定信息。
如果您在浏览器中转到Cloudera仓库,您应该可以导航到Hive的相应信息。