惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 勤劳の洗碗机

pyinstaller打包exe故障解析 curl 访问k8s api k8s 之HPA应用 statefulset 及storageclass LDAP部署及实践 docker 制作自己的mysql镜像 k8s 压测工具之perf-test mysql相关(三)、主从复制 shell执行mysql脚本 分布式minio image-syncer 误删libc.so.6文件补救 docker 使用bind 动态扩容pvc k8s备份工具之velero jmeter使用 docker 制作ssh镜像 docker 制作自定义的nginx镜像 docker部署sharding-proxy
hadoop 伪分布式 完全分布式 及HA部署
勤劳の洗碗机 · 2020-12-02 · via 博客园 - 勤劳の洗碗机

 https://www.jianshu.com/p/6dda4f79379e

https://blog.csdn.net/qq_25542879/article/details/89554068 

 1、制作Hadoop伪集群镜像

     下载jdk

     下载hadoop并解压

     配置hadoop

     需要配置的文件如下:    

hadoop-3.2.1/etc/hadoop/hadoop-env.sh
hadoop-3.2.1/etc/hadoop/core-site.xml
hadoop-3.2.1/etc/hadoop/hdfs-site.xml
hadoop-3.2.1/etc/hadoop/mapred-site.xml
hadoop-3.2.1/etc/hadoop/yarn-site.xml
hadoop-3.2.1/etc/hadoop/workers

  配置 hadoop-env.sh 添加jdk环境变量即可

export JAVA_HOME=/usr/local/jdk1.8.0_92

配置core-site.xml  

(1)指定 Hadoop 所使用的文件系统以及 namenode 地址,使用 IP 地址或主机名均可

(2)指定 namenode 上本地的 hadoop 临时文件夹

<configuration>

 <property>
          <name>fs.defaultFS</name>
          <value>hdfs://0.0.0.0:9000</value>
 </property>
 <property>

    <!-- 执行Hadoop运行时的数据存放目录 -->

    <name>hadoop.tmp.dir</name>

    <value>/opt/hadoop-3.2.1/data</value>

</property>
</configuration>

配置 hdfs-site.xml

<configuration>
<property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

配置 mapred-site.xml,指定 MapReduce 运行框架为 yarn,默认为 local

<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
</configuration>

配置 yarn-site.xml

(1)指定 resourcemanager 的地址,使用主机名

(2)nodemanager 运行的附属服务,要配置成 mapreduce_shuffle,才可以运行 MapReduce 程序默认值

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>localhost</value>
 </property>
 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
 </property>

</configuration>

配置 workers 添加从节点。伪分布式模式中,只有一个 localhost 节点(注:Hadoop 3.0 以前的版本是 slaves 文件)

sh-4.2$ cat ../etc/hadoop/workers       
localhost
sh-4.2$ 

    利用之前的centos7-ssh:v1镜像(该博文另一篇文章)制作Hadoop伪集群镜像

FROM centos7-ssh:v1

ADD jdk-8u92-linux-x64.tar.gz /usr/local/
ADD hadoop-3.2.1 /opt/hadoop-3.2.1

ENV JAVA_HOME=/usr/local/jdk1.8.0_92
ENV CLASSPATH=.:/usr/local/jdk1.8.0_92/lib:$CLASSPATH
ENV HADOOP_HOME=/opt/hadoop-3.2.1
ENV PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

RUN sudo chmod -R 755 /etc/ssh/
#USER hadoop RUN
sudo chown -R hadoop:hadoop /opt/hadoop-3.2.1 RUN mkdir -p /opt/hadoop-3.2.1/{data,datanode} RUN /opt/hadoop-3.2.1/bin/hdfs namenode -format EXPOSE 22 8088 9870
docker build -t hadoop:v1 . 

 3、测试

 启动hadoop

docker run  -it -d --name hadoop hadoop:v1 
docker exec -it hadoop sh

#进入容器后启动集群
cd
/opt/hadoop-3.2.1/sbin && ./start-all.sh 

#使用jps查看进程

  sh-4.2$ jps
  305 DataNode
  929 NodeManager
  819 ResourceManager
  485 SecondaryNameNode
  198 NameNode
  1302 Jps

sh-4.2$ echo "123" >~/hadoop-test-file  #创建个文件
sh-4.2$                                   
sh-4.2$ cd /opt/hadoop-3.2.1/bin/
sh-4.2$ hadoop fs -put ~/hadoop-test-file /  #上传文件
2020-04-01 15:38:49,487 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
sh-4.2$ hadoop fs -ls /    #查看文件
Found 1 items
-rw-r--r--   1 hadoop supergroup          4 2020-04-01 15:38 /hadoop-test-file
sh-4.2$ 

也可以登录浏览器查看上传结果

可视化界面:

  • YARN NodeManager:http://192.168.80.80:9870

  • YARN ResourceManager:http://192.168.80.80:8088

Hadoop 3.x 端口号与 2.x 的比较


hadoop dfsadmin -report  #查看集群信息

完全分布式集群

master作为namenode节点,其余2台作为datanode节点, 同时slave-01做yarn服务器  slave-02做 namenode.secondary

1、三台服务器配置/etc/hosts,hadoop的集群主机名不能有下划线!!不然会找不到主机!无法启动!

192.168.92.128 master
192.168.92.130 slave-01
192.168.92.131 slave-02

2、三台服务器配置ssh免登陆,本机也要能ssh 免密到本机

3、安装jdk环境 

4、如果需要直接使用root启动hadoop,按如下设置,  如果不用root账号启动,可以不做,只需要新建hadoop账号,然后切换到hadoop账号下启动

在 start-dfs.shstop-dfs.sh 文件开头添加以下参数

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

在 start-yarn.shstop-yarn.sh 文件开头添加以下参数:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

5、配置文件

hadoop-3.2.1/etc/hadoop/hadoop-env.sh   #与伪分布式相同
hadoop-3.2.1/etc/hadoop/core-site.xml
hadoop-3.2.1/etc/hadoop/hdfs-site.xml
hadoop-3.2.1/etc/hadoop/mapred-site.xml  #与伪分布式相同
hadoop-3.2.1/etc/hadoop/yarn-site.xml
hadoop-3.2.1/etc/hadoop/workers

 5.1配置core-site.xml  

<configuration>
    <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000</value>   
    </property>
    <property>
            <name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-3.2.1/data</value>
</property>
</configuration>
  • fs.defaultFS 配置哪个节点来启动hdfs ,它是HDFS的hadoop访问目录节点nameNode的地址和端口,

    使用 fs.default.name 还是 使用 fs.defaultFS ,要首先判断是否开启了 NN 的HA (namenode 的 highavaliable),如果开启了nn ha,那么就用fs.defaultFS,在单一namenode的情况下,就用 fs.default.name , 如果在单一namenode节点的情况使用 fs.defaultFS ,系统将报错。

  • hadoop.tmp.dir 配置hadoop存储数据的路径,
  • 我们需要手动创建tmp.dir目录

 5.2配置hdfs-site.xml  

<configuration>
<!--指文件上传到hadoop后有几个副本,一般默认为3个副本已经够用了,设置太多也没什么用。需要在每个DataNode上设置--> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property>

     <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:/opt/hadoop-3.2.1/data/dfs/name</value>
     </property>

    <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>slave-02:50090</value>
    </property>

  <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/opt/hadoop-3.2.1/datanode</value>
    </property>

</configuration>

dfs.replication 设置文件的备份数量
dfs.namenode.http-address 设置哪台虚拟机作为namenode节点,与core-site.xml 里 fs.defaultFS参数对应,本次实验namdnode是master主机

dfs.namenode.secondary.http-address 设置哪台虚拟机作为冷备份namenode节点,用于辅助namenode

5.3配置yarn-site.xml   ,指定slave-01为yarn服务器

<configuration>
    <!-- Site specific YARN configuration properties -->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>slave-01</value>
    </property>

</configuration>

yarn.resourcemanager.hostname 配置yarn启动的主机名,也就是说配置在哪台虚拟机上就在那台虚拟机上进行启动
yarn.application.classpath 配置yarn执行任务调度的类路径,如果不配置,yarn虽然可以启动,但执行不了mapreduce。执行hadoop classpath命令,将出现的类路径放在<value>标签里
(注:其他机器启动是没有效果的)

5.4配置workds,这个是DataNode的地址,只需要把所有的datanode主机名填进去就好了

workers 配置datanode工作的机器,而datanode主要是用来存放数据文件的,我这里配置了3台,可能你会疑惑,msater怎么也可以配置进去。其实,master我既配置作为namenode,它也可以充当datanode。当然你也可以选择不将namenode节点也配置进来。

6、把master上配置好的hadoop复制到slave-01 slave-02上,集群内所有主机配置完全一样的,所以复制过去后不用改什么

7、启动

7.1、登录master服务器对namenode进行格式化,格式化namenode是不会失败的,如果失败,请到各个节点的tmp路径进行删除操作,然后重新格式化namenode。

cd hadoop-3.2.1/bin/
./hdfs namenode -format

 以上信息说明格式化成功~

7.2、登录master服务器启动hdfs

cd hadoop-3.2.1/sbin/
./start-dfs.sh

此时master上进程

[root@master sbin]# jps
111908 NameNode
112062 DataNode
112398 Jps

slave-01上进程

[root@slave-01 bin]# jps
121945 Jps
121823 DataNode

slave-02 上进程

[root@slave-02 sbin]# jps
7424 DataNode
7506 SecondaryNameNode
7571 Jps

登录namenode 地址发现3台已存活

http://192.168.92.128:50070/

7.4、登录slave-01服务器 启动yarn

此时至于slave-01上有Nodemanager服务

[root@slave-02 sbin]# jps
123173 NodeManager
123336 Jps
121823 DataNode
123039 ResourceManager

http://192.168.92.130:8088/

在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。

至此 hadoop集群搭建完成了,接下来就可以进行hadoop命令进行文件操作和并行计算了。

异常解决:

1、启动后没有namennode

一般是因为格式了俩次造成的,造成了namespaceID不一致(hadoop-3.2.1/data/dfs/name/current/VERSION可以查看namespaceID),解决办法就是删除这些文件,重新格式即可。

如果id 一致,可以查看日志文件hadoop-3.2.1/logs/内查看namenode日志

Hadoop HA集群

https://my.oschina.net/u/3754001/blog/1802135

https://blog.csdn.net/u012760435/article/details/104401268

https://blog.csdn.net/u012760435/article/details/104541021

https://hadoop.apache.org/docs/r3.2.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

      对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,这就需要利用使用ZooKeeper了。首先HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。

      首先需要注意一点,Yarn与HDFS属于两个不同的集群,一个负责文件存储,一个负责作业调度,二者之间没有必然关系,也不一定说Yarn的某些节点必须必须要放在datanaode上。通常会把nodemanager和datanode放在一起是因为要“计算向数据移动”,尽可能使计算作业就在存储节点上执行。hdfs集群启动后仅仅是一个分布式文件系统而已,并不具备计算的能力,因此引出yarn。

  针对HDFS集群主要修改的有core-site.xmlhadoop-env.shhdfs-site.xml。对于hadoop集群中所有节点配置文件都是一样的,所以只在一台机器上进行修改然后分发即可

core-site.xml

<configuration>
      <!--HDFS主入口,mycluster仅是作为集群的逻辑名称,可随意更改但务必与hdfs-site.xml中dfs.nameservices值保持一致-->
      <property>          <name>fs.defaultFS</name>
          <value>hdfs://hdfs-cluster</value>
      </property>
     
      <!--默认的hadoop.tmp.dir指向的是/tmp目录,将导致namenode与datanode数据全都保存在易失目录中,此处进行修改-->
      <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/opt/hadoop-3.2.1/data</value>
          <description>Abase for other temporary directories.</description>
      </property>
  
     <!--用户角色配置,不配置此项会导致web页面报错-->
     <property>
         <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>

    <!--zookeeper集群地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>192.168.7.1:2181,192.168.7.2:2181,192.168.7.3:2181</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <!--文件副本数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
 
    <!--集群名称,此值在接下来的配置中将多次出现务必注意同步修改-->
    <property>
        <name>dfs.nameservices</name>
        <value>hdfs-cluster</value>
    </property>

    <!--所有的namenode列表,此处也只是逻辑名称,非namenode所在的主机名称-->
    <property>
        <name>dfs.ha.namenodes.hdfs-cluster</name>
        <value>nn1,nn2,nn3</value>
    </property>
    <property>
         <name>dfs.namenode.name.dir</name>
         <value>file:/opt/hadoop-3.2.1/data/namenode</value>
   </property>
    <!--namenode之间用于RPC通信的地址,value填写namenode所在的主机地址
        默认端口8020,注意hdfs-cluster与nn1要和上文的配置一致     
    -->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
        <value>192.168.7.1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>192.168.7.2:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn3</name>
        <value>192.168.7.3:8020</value>
    </property>
    <!--namenode的web访问地址,默认端口9870-->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
        <value>192.168.7.1:9870</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
        <value>192.168.7.2:9870</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn3</name>
        <value>192.168.7.3:9870</value>
    </property>

    <!--journalnode主机地址,最少三台,默认端口8485-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://192.168.7.1:8485;192.168.7.2:8485;192.168.7.3:8485/hdfs-cluster</value>
    </property>

    <!--故障时自动切换的实现类-->
    <property>
        <name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!--故障时相互操作方式(namenode要切换active和standby),这里我们选ssh方式-->
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>shell(/bin/true)</value>
    </property>

    <!--namenode日志文件输出路径,即journalnode读取变更的位置-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/hadoop-3.2.1/journalnode</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>~/.ssh/id_rsa</value>
    </property>
    <!---->
  <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/hadoop-3.2.1/data/datanode</value>
    </property>

    <!--启用自动故障转移-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

    <property>
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
        <value>false</value>
    </property>

 
    <property>
        <name>dfs.datanode.use.datanode.hostname</name>
        <value>false</value>
    </property>

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

</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    
    <!--yarn集群id-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-cluster</value>
    </property>

    <!--启用HA-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property> 
       <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> 
       <value>true</value> 
    </property> 
    <property>
       <name>yarn.resourcemanager.recovery.enabled</name> 
       <value>true</value> 
    </property>
    <!-- -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2,rm3</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>192.168.7.11</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>192.168.7.12</value>
    </property>
     <property>
        <name>yarn.resourcemanager.hostname.rm3</name>
        <value>192.168.7.13</value>
    </property>

    <!--webapp的地址务必要配置,不然yarn可以启动但是无法执行map任务 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>192.168.7.11:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>192.168.7.12:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm3</name>
        <value>192.168.7.13:8088</value>
    </property>
    <property>
        <name>hadoop.zk.address</name>
        <value>192.168.7.1:2181,192.168.7.2:2181,192.168.7.3:2181</value>
    </property>
    
    <!-- 启用自动恢复 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>

    <!--持久化方式,既然启用了ZK那就把信息存储到ZK里面-->
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <!-- Bind to all interfaces -->
  <property>
    <name>yarn.resourcemanager.bind-host</name>
    <value>0.0.0.0</value>
  </property>
  <property>
    <name>yarn.nodemanager.bind-host</name>
    <value>0.0.0.0</value>
  </property>
  <property>
    <name>yarn.timeline-service.bind-host</name>
    <value>0.0.0.0</value>
  </property>
  <!-- /Bind to all interfaces -->

  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
</configuration>

启动集群

注:--daemon 是仅在本机启动某个服务,--daemons是所以namenode服务器启动某服务,不要搞错了
1、三台服务器上启动zk
   jps可以看到有QuorumPeerMain 进程,监听2181 3881 8080 端口 

2、hadoop-3.2.1/bin/hdfs --daemon start journalnode (所以服务器上启动JN)
 jps 多个JournalNode进程,监听8480  8485俩个端口
 
3、bin/hdfs namenode -format -force -nonInteractive (随便一台namenode上启动即可)
 
4、bin/hdfs --daemon start namenode (刚刚格式化的服务器上启动namenode)
   jps多个NameNode进程,监听9870 8020端口
   
5、bin/hdfs namenode -bootstrapStandby(其他俩台namenode服务器同步namenode数据)
   没有新建进程 监听端口
   
6、/opt/hadoop-3.2.1/bin/hdfs --daemon start namenode  (其他俩台同步信息后,再都启动namenode)
   jps多个NameNode进程,监听9870 8020端口

7、bin/hdfs zkfc -formatZK  (任一namenode上格式化zk)
   没有新建进程 监听端口,但zk里会多个hadoop-ha目录

--------------------
  在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode
    bin/hdfs --daemon start zkfc
  注:如果使用start-dfs.sh启动集群,则不需要单独启动zkfc
---------------------
8、sbin/start-dfs.sh任一namenode启动hdfs 集群
所有namenode服务器多个DFSZKFailoverController进程,监听8019端口

至此hdfs 集群全部启动完毕

启动yarn集群
所有yarn服务器上直接sbin

/start-yarn.sh 即可

一些异常解决:

 没有配置/etc/hosts造成的,

2020-04-12 17:02:21,040 WARN org.apache.hadoop.ha.ActiveStandbyElector: Exception handling the winning of election
java.lang.RuntimeException: Mismatched address stored in ZK for NameNode at /172.16.210.126:8020: Stored protobuf was nameserviceId: "hdfs-cluster"
namenodeId: "nn2"
hostname: "hadoop-1"
port: 8020
zkfcPort: 8019
, address from our own configuration for this NameNode was /172.16.210.126:8020

 有多个网卡造成的,我是修改了/etc/hosts文件把localhost指向了内网地址解决的

192.168.7.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
2020-04-13 16:18:03,668 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: The value of property bind.address must not be null

 权限造成的

ERROR: Attempting to operate on hdfs zkfc as root
ERROR: but there is no HDFS_ZKFC_USER defined. Aborting operation.

  ERROR: Attempting to operate on hdfs journalnode as root
  ERROR: but there is no HDFS_JOURNALNODE_USER defined. Aborting operation.

 

 解决:

start-dfs.sh  stop-dfs.sh添加如下:

HDFS_ZKFC_USER=root

HDFS_JOURNALNODE_USER=root

zk无法启动,显示UnknownHostException: hadoop-ha-hdfs-zk-3.hadoop-ha-hdfs-zk

原因如报错,网上有解决方案是在zoo.cfg添加 quorumListenOnAllIPs=true,这是个大坑,这样虽然

zk启动成功,用zkServer.sh status 显示follower 或leader,但用zkCli.sh 连接后 使用 ls  /  会显示如下错误,hdfs ha格式化zk时也会提示连不上zk集群

Unable to read additional data from server sessionid 0x0

我的解决方法是

测试

#检查namenode状态
hdfs haadmin -getServiceState nn1 
standby

#在namenode查看集群情况
hdfs dfsadmin -report

#检查yarn状态
yarn rmadmin -getServiceState rm1
yarn node -list