如何将hdfs(hadoop分布式fs)部署到k8s(kubernetes)集群?

jw5wzhpr  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(2127)

所以我有一个k8s集群,我想在上面运行spark作业。
kubernetes是v1.15.3和spark v2.4.5。
现在对于数据存储,我正在考虑使用hdfs,但我不想安装整个hadoop库,其中包括yarn和mapreduce(如果我错了,请纠正我)。
我看到这个存储库是唯一的直接在线解决方案,但它不适合我目前。
当我尝试像repo上的自述文件中提到的那样部署它时,我看到创建了多个pod,一旦所有pod都转到 Running 州政府 my-hdfs-namenode-0 吊舱进入 Error 州和许多豆荚开始崩溃。
这是我在日志中看到的错误 kubectl logs pod/my-hdfs-namenode-0 :

20/05/11 09:47:57 ERROR namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: Unable to construct journal, qjournal://my-hdfs-journalnode-1.my-hdfs-journalnode.default.svc.cluster.local:8485;my-hdfs-journalnode-2.my-hdfs-journalnode.default.svc.cluster.local:8485;my-hdfs-journalnode-0.my-hdfs-journalnode.default.svc.cluster.local:8485/hdfs-k8s
    at org.apache.hadoop.hdfs.server.namenode.FSEditLog.createJournal(FSEditLog.java:1638)
    at org.apache.hadoop.hdfs.server.namenode.FSEditLog.initJournals(FSEditLog.java:282)
    at org.apache.hadoop.hdfs.server.namenode.FSEditLog.initJournalsForWrite(FSEditLog.java:247)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:985)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1429)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1554)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.hadoop.hdfs.server.namenode.FSEditLog.createJournal(FSEditLog.java:1636)
    ... 5 more
Caused by: java.lang.NullPointerException
    at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannelMetrics.getName(IPCLoggerChannelMetrics.java:107)
    at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannelMetrics.create(IPCLoggerChannelMetrics.java:91)
    at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannel.<init>(IPCLoggerChannel.java:178)
    at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannel$1.createLogger(IPCLoggerChannel.java:156)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.createLoggers(QuorumJournalManager.java:367)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.createLoggers(QuorumJournalManager.java:149)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.<init>(QuorumJournalManager.java:116)
    at org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager.<init>(QuorumJournalManager.java:105)
    ... 10 more

我猜这是一个名称解析(dns)相关的错误?这是完整的日志供参考。
现在,这个存储库不是主动维护的,所以如果有人可以建议我如何解决这个错误,或者建议我如何将hdfs部署到kubernetes集群。

brjng4g3

brjng4g31#

一般来说,我建议你不要在k8s中使用hdfs。。。
namenodeha需要容器化,namenode文件系统必须是有状态的。
你需要zookeeper qjm,它在某种程度上与etcd竞争,用于领导人选举。
hdfs是在真正考虑k8s持久卷之前设计的。hadoop臭氧项目仍在开发中,旨在克服这些限制。
同时,我建议您考虑使用minio或projectrook(在cepfs上),它们都提供与hadoop兼容的文件系统(hcfs)
如果必须使用hdfs,那么在k8s之外设置它,然后从容器中向它发出请求。
关于Yarn,请务必观看yunikorn项目(k8s上的Yarn)

相关问题