如何在intelhadoop中使用sparkshell读取hdfs?

uxhixvfz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(392)

我无法从sparkshell(spark版本是1.2.1)读取hdfs(intel发行版hadoop,hadoop版本是1.0.3)。我用这个命令建立了spark mvn -Dhadoop.version=1.0.3 clean package ,启动spark shell并使用 sc.textFile() 例外情况是:
warn hdfs.dfsclient:无法连接到/10.xx.xx.xx:50010,添加到deadnodes和continuejava.net.sockettimeoutexception:等待通道准备好读取时超时120000毫秒。ch:java.nio.channels.socketchannel[connected local=/10.xx.xx.xx:44264 remote=/10.xx.xx.xx:50010]。。。error executor.executor:阶段0.0(tid 1)中任务1.0出现异常java.io.ioexception:无法获取块:blk_file=/research/files/readme.md
这里也有同样的问题:http://mail-archives.us.apache.org/mod_mbox/spark-user/201309.mbox/%3cf97adee4fba8f6478453e148fe9e2e8d3cca37a9@hasmsx106.ger.corp.intel.com%3e
这是建议的解决方案:
“除了在./project/sparkbuild.scala文件中指定hadoop\u version=1.0.3之外,还需要指定库依赖项和名称”“spark core”“解析器。否则,sbt将从apache而不是intel获取hadoopcore的1.0.3版本。您可以设置自己指定的本地或远程存储库“
有谁能详细说明一下如何指定sbt从intel获取hadoop内核(可以在我们的内部存储库中找到)?

eufgjt7s

eufgjt7s1#

试着看看这一页的文档
spark正在使用一些我不太了解的sbt/maven集成,但似乎存储库是在中指定的 pom.xml 在根里
如果不起作用,您可以探索sbt文件指定的位置 resolvers .
为了记录在案,这是链接文档的摘录

将应用程序链接到hadoop版本

除了根据正确的版本编译spark本身之外,还需要向运行的任何spark应用程序添加对该版本hadoop客户机的maven依赖,这样它们也可以与集群上的hdfs版本进行通信。如果您使用的是cdh,那么还需要添加clouderamaven存储库。在sbt中如下所示:

libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "<version>"

// If using CDH, also add Cloudera repo
resolvers += "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/"

或者在maven:

<project>
  <dependencies>
    ...
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>[version]</version>
    </dependency>
  </dependencies>

  <!-- If using CDH, also add Cloudera repo -->
  <repositories>
    ...
    <repository>
      <id>Cloudera repository</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
  </repositories>
</project>

相关问题