写入hdfs发现日志报错:
2023-03-28 13:50:14,988 [Thread-12] WARN org.apache.hadoop.hdfs.DFSClient - DataStreamer Exception
org.apache.hadoop.ipc.RemoteException: File /datas/xinfo/tmp/4g nt_tmp/day=2023328/hour=13/4g_xdrvent_tmp_2034923_46bd4a785
-d42a-455e-90e5-0b9082a4b399.tmp could only be replicated to 0 nodes instead of minReplication (=1). There are 14 datanode(s) running and no node(s) are
excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1620)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3135)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3059)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:725)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:493)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol
2.
c
a
l
l
B
l
o
c
k
i
n
g
M
e
t
h
o
d
(
C
l
i
e
n
t
N
a
m
e
n
o
d
e
P
r
o
t
o
c
o
l
P
r
o
t
o
s
.
j
a
v
a
)
a
t
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
i
p
c
.
P
r
o
t
o
b
u
f
R
p
c
E
n
g
i
n
e
2.callBlockingMethod(ClientNamenodeProtocolProtos.ja va) at org.apache.hadoop.ipc.ProtobufRpcEngine
2.callBlockingMethod(ClientNamenodeProtocolProtos.java)atorg.apache.hadoop.ipc.ProtobufRpcEngineServer
P
r
o
t
o
B
u
f
R
p
c
I
n
v
o
k
e
r
.
c
a
l
l
(
P
r
o
t
o
b
u
f
R
p
c
E
n
g
i
n
e
.
j
a
v
a
:
616
)
a
t
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
i
p
c
.
R
P
C
ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616) at org.apache.hadoop.ipc.RPC
ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)atorg.apache.hadoop.ipc.RPCServer.call(RPC.java:982)
at org.apache.hadoop.ipc.Server$Handler
1.
r
u
n
(
S
e
r
v
e
r
.
j
a
v
a
:
2217
)
a
t
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
i
p
c
.
S
e
r
v
e
r
1.run(Server.java:2217) at org.apache.hadoop.ipc.Server
1.run(Server.java:2217)atorg.apache.hadoop.ipc.ServerHandler$1.run(Server.java:2213)
at java.security.AccessController.doPrivileged(Native Method)
–More–(2%)
此错误是由 HDFS 的块复制系统引起的,因为它无法制作特定块的任何副本,但是数据节点是有的。
解决思路:
排查nn是否正常
本次错误就是原因9造成的
常见原因:
1、只有一个 NameNode 实例正在运行,并且它不处于安全模式
2、没有 DataNode 实例启动并运行,或者一些已经死了。(检查服务器)
3、Namenode 和 Datanode 实例都在运行,但是它们不能相互通信,这意味着 DataNode 和 NameNode 实例之间存在连接问题。
4、由于某些基于 hadoop 的网络问题,正在运行的 DataNode 实例无法与服务器通信(检查包含 datanode 信息的日志)
5、为DataNode实例配置的数据目录中没有指定硬盘空间或DataNode实例空间不足。(检查 dfs.data.dir // 删除旧文件(如果有)
6、dfs.datanode.du.reserved 中为DataNode 实例指定的预留空间大于空闲空间,这使得DataNode 实例知道没有足够的空闲空间。
7、DataNode 实例没有足够的线程(检查 datanode 日志和 dfs.datanode.handler.count=10 值)
8、数据权限传输问题,确保 dfs.data.transfer.protection 不等于“authentication”并且 dfs.encrypt.data.transfer 等于 true。
9,集群资源不够
查看集群资源:
发现集群资源占满了,
解决方案:
1,删除部分数据
2,不能删除的短期可以修改副本数:
对原有数据修改副本数为2,使用客户端命令:hadoop fs -setrep -R 2 /path
/path是目录,该命令只针对老数据生效,新数据用客户端中dfs.replication 参数控制。