Spark 远程读写 Hive (HDFS) 失败

19 篇文章 0 订阅
4 篇文章 0 订阅
[WARN] - I/O error constructing remote block reader.
java.net.ConnectException: Connection timed out: no further information
    
    ...

[WARN] - Connection failure: Failed to connect to /10.0.0.24:9866 for file /user/hive/warehouse/hw_data.db/dws/dws_hw_ltv_detail/date=2019-08-14/part-00000-d037228a-1815-4288-a9ac-10b3062090d8.c000 for block BP-1993280466-192.168.100.45-1566407732189:blk_1075498905_1760462:java.net.ConnectException: Connection timed out: no further information
java.net.ConnectException: Connection timed out: no further information

问题

CDH6.2集群,跟本地电脑不在同一局域网,Spark 读取 Hive 报以上错。

 

检查

1. 本地及远程 HDFS 服务器都已配置好映射。

2. 已开放远程服务器防火墙,9866端口。

3. 远程连接 Namenode WebUI 及访问 HDFS 没问题,但是不能通过 WebUI 下载文件。

http://cdh-slave01:9870

4. HDFS API直接读取文件没问题,只能查看目录,不能查看文件内容。

读取目录没问题 

    val conf = new Configuration()
    conf.addResource("hdfs-site.xml")

    val fs = FileSystem.get(conf)
    val files = fs.listFiles(new Path("/dw"),true)

    while (files.hasNext) {
      println(files.next().getPath)
    }

    读取文件报错 

    val conf = new Configuration()
    conf.addResource("hdfs-site.xml")

    val fs = FileSystem.get(conf)

    val path = "hdfs://BigdataCluster/dw/test.txt"
    val fis = fs.open(new Path(path))
    IOUtils.copyBytes(fis, System.out, 4096, true)

5. Spark 读取 Hive 报错。

    val rdd = spark.sparkContext.textFile("/dw/test.txt")
 
    rdd.foreach(println)

 

原因

Namenode 与 Datanode之间是内网通讯,HDFS 中的元数据是存放在 Namenode 上,所以 Namenode 返回的是数据所在节点的内网 ip,客户端使用 NameNode 提供的 ip 地址来连接到 Datanode,因为不在一个局域网,客户端无法访问此内网IP地址。

 

解决

客户端对 DataNode 主机名执行 DNS 解析。

1. 初始化SparkSession时,配置客户端采用 hostname 访问 Datanode。

.config("dfs.client.use.datanode.hostname", "true")

2. 或者 IDEA 中修改 hdfs-site.xml 配置文件。

  <property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
  </property>

 

  • 设置完成,仍然报错,但显示被拒绝连接:
[WARN] - I/O error constructing remote block reader.
java.net.ConnectException: Connection refused: no further information

    ...

Connection failure: Failed to connect to /10.0.0.23:9866 for file /user/hive/warehouse/hw_data.db/ads/ads_hw_new_user_count/part-00000-928e4831-6e7e-4bb1-a112-1bf618e61894-c000.snappy.orc 
for block BP-1993280466-192.168.100.45-1566407732189:blk_1075723576_1985133:java.net.ConnectException: Connection timed out: no further information
java.net.ConnectException: Connection timed out: no further information

检查端口,发现服务监听的是内网ip:

进入CDH 的 HDFS 配置,搜索 通配符地址,勾选 DataNode,重启生效。

再查看端口:

再运行 Spark 已经没问题,问题解决。 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

訾零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值