ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

手动安装Hadoop3.3.1+ Yarn HA集群

2021-10-24 11:00:14  阅读:260  来源: 互联网

标签:hdfs -- hadoop yarn bigdata Hadoop3.3 Yarn NameNode HA


Hadoop集群搭建

手动安装Hadoop3.3.1+ Yarn HA集群

服务

  1. 两个 NameNode 双机热备高可用

  2. ZooKeeper 集群

  3. ZKFailoverController监控NameNode状态

  4. JournalNode 元数据共享

  5. NodeManager

  6. ResourceManager

  7. DataNode

  8. JobHistoryServer

主机ip规划

角色/主机名Node01
192.168.7.11
Node02
192.168.7.12
Node03
192.168.7.13
Node04
192.168.7.14
Node05
192.168.7.15
NameNode
JournalNode
DataNode
ResourceManager
NodeManager
JobHistoryServer
Zookeeper
Hbase Master
Hbase slave
HiveServer2
Hive
HBase
Spark
Flink

准备工作

# 配置环境变量

export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/bigdata/hadoop/current
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=/opt/bigdata/hadoop/current/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin

export HIVE_HOME=/opt/bigdata/hive/current
export PATH=$PATH:$HIVE_HOME/bin
export SPARK_HOME=/opt/bigdata/spark/current
export PATH=$PATH:$SPARK_HOME/bin


# 将上面的粘贴到/etc/profile末尾,然后一起发给其他主机,没有服务没关系
for i in {2,3,4,5};do scp /etc/profile node0${i}:/etc/profile ;done
# 安装jdk

# 各主机秘钥互通
  在node01上生成一份秘钥
  ssh-keygen -t rsa -b 4096 -C "bigdata ssh" -f /home/god/.ssh/id_rsa -q 
  自己给自己发公钥 ssh-copy-id node01

  # 重点来了
  authorized_keys不用变
  cd ~/.ssh
  private_host=`cat known_hosts |awk -F ' ' '{print $2,$NF}'`
  for i in {2..5};do echo "node0${i},192.168.7.1${i} ${private_host}" >> known_hosts ;done

  scp -Crp .ssh node02:~/
  scp -Crp .ssh node03:~/
  scp -Crp .ssh node04:~/
  scp -Crp .ssh node05:~/
  # 这样5台主机就可以互通了哈哈

# 每个主机配置host解析
echo "
192.168.7.11 node01
192.168.7.12 node02
192.168.7.13 node03
192.168.7.14 node04
192.168.7.15 node05
" >> /etc/hosts

# 给god用户授权目录
chown -R god:god /opt/
chown -R god:god /data/

启动zookeeper

tar xf zookeeper-3.4.6.tar.gz -C /opt/bigdata/

cd zookeeper-3.4.6/conf
cat > zoo.cfg <<-EOF
tickTime=2000
initLimit=20
syncLimit=10
dataDir=/data/bigdata/zookeeper/
dataLogDir=/data/log/zookeeper/
clientPort=2181
quorumListenOnAllIPs=true
server.1=node03:2888:3888
server.2=node04:2888:3888
server.3=node05:2888:3888
EOF

# 分发zookeeper
[god@node03 opt]$ scp -Crp zookeeper-3.4.6 node04:~/opt/
[god@node03 opt]$ scp -Crp zookeeper-3.4.6 node05:~/opt/
# 每个zookeeper节点执行
[root@node03 ~]$ mkdir -p /data/{bigdata,log}/zookeeper
[root@node03 ~]$ echo 1 > /data/bigdata/zookeeper/myid # 根据配置文件在对应的节点配置myid
[root@node04 ~]$ mkdir -p /data/{bigdata,log}/zookeeper
[root@node04 ~]$ echo 2 > /data/bigdata/zookeeper/myid # 根据配置文件在对应的节点配置myid
[root@node05 ~]$ mkdir -p /data/{bigdata,log}/zookeeper
[root@node05 ~]$ echo 3 > /data/bigdata/zookeeper/myid # 根据配置文件在对应的节点配置myid

cat >> /etc/profile <<-EOF
export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6
export PATH=\$PATH:\$ZOOKEEPER_HOME/bin
EOF

# 给god用户授权目录
chown -R god:god /opt/
chown -R god:god /data/

# 启动zookeeper
	node03
		[god@node03 ~]$ zkServer.sh start
	node04
		[god@node04 ~]$ zkServer.sh start
	node05
		[god@node05 ~]$ zkServer.sh start
	查看状态
		zkServer.sh status

Hadoop配置文件

  • profile文件
cat >> /etc/profile <<-EOF

export HADOOP_HOME=/opt/bigdata/hadoop/current
export PATH=\$PATH:\$HADOOP_HOME/bin
EOF


# 设置软连接,要到每台机器上执行,不能直接复制已建立连接的
ln -s /opt/bigdata/hadoop/hadoop-3.3.1 /opt/bigdata/hadoop/current

#指定java启动目录,ssh登录找不到
	echo "JAVA_HOME=/usr/java/default" >> /opt/bigdata/hadoop/current/etc/hadoop/hadoop-env.sh
  • core-site.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/tmp/hadoop-${user.name}</value>
        <description>默认值</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
        <description>hdfs集群名称</description>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node03:2181,node04:2181,node05:2181</value>
        <description>zookeeper的节点</description>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>60</value>
        <description>清理回收站时间 60分钟</description>
    </property>
</configuration>
  • hdfs-site.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
        <description>副本数</description>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///data/bigdata/hadoop/ha/dfs/namenode</value>
        <description>namenode的数据位置</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///data/bigdata/hadoop/ha/dfs/data</value>
        <description>datanode的数据</description>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
        <description>名称服务</description>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
        <description>名称服务下的NameNode</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node01:8020</value>
        <description>NameNode地址</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node02:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>node01:50070</value>
        <description>NameNode http 地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>node02:50070</value>
        <description>NameNode2 http 地址</description>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
        <description>journalnode配置</description>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/bigdata/hadoop/ha/dfs/journalnode</value>
        <description>editlog日志存储目录</description>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        <description>主NameNode是哪个</description>
    </property>
    <!--ssh免密操作 zkfc机器要互免密还有自己对自己-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/god/.ssh/id_rsa</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
        <description>开启zkfc随集群启动</description>
    </property>
    <property>
        <name>dfs.block.size</name>
        <value>134217728</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.permissions.supergroup</name>
        <value>supergroup</value>
    </property>

    <property>
        <name>dfs.hosts</name>
        <value>/opt/bigdata/hadoop/current/etc/hadoop/conf/hosts</value>
        <description>主机下线的配置 记录有哪些主机</description>
    </property>
    <property>
        <name>dfs.hosts.exclude</name>
        <value>/opt/bigdata/hadoop/current/etc/hadoop/conf/hosts-exclude</value>
    </property>
</configuration>
  • mapred-site.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node02:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node02:19888</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/data/bigdata/jobhistory/mr_history_tmp</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/data/bigdata/jobhistory/mr-history_done</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/data/bigdata/hadoop-yarn/staging</value>
    </property>
</configuration>
  • yarn-site.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>洗牌</description>
    </property>
    <!--安装spark后开启多个shuffle-->
    <!--<property>-->
    <!--    <name>yarn.nodemanager.aux-services</name>-->
    <!--    <value>mapreduce_shuffle,spark_shuffle</value>-->
    <!--</property>-->

    <!--<property>-->
    <!--    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>-->
    <!--    <value>org.apache.hadoop.mapred.ShuffleHandler</value>-->
    <!--</property>-->

    <!--<property>-->
    <!--    <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>-->
    <!--    <value>org.apache.spark.network.yarn.YarnShuffleService</value>-->
    <!--</property>-->
    <!--    开启自动故障切换-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!--    依赖zookeeper-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node03:2181,node04:2181,node05:2181</value>
    </property>
    <!--   resourcemanager集群id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>meifute</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
        <description>resourcemanager所在机器</description>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node01</value>
        <description>resourcemanager所在机器 node01</description>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node02</value>
        <description>resourcemanager所在机器 node02</description>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>node01:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>node02:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>node01:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>node02:8030</value>
    </property>
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>${hadoop.tmp.dir}/nm-local-dir</value>
    </property>
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>file:///data/log/nodemanager/userlogs</value>
    </property>

    <!--<property>-->
    <!--    <description>Classpath for typical applications</description>-->
    <!--    <name>yarn.application.classpath</name>-->
    <!--    <value>-->
    <!--        $HADOOP_CONF_DIR,-->
    <!--        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,-->
    <!--        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,-->
    <!--        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,-->
    <!--        $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*,-->
    <!--        $HADOOP_HOME/share/hadoop/common/*, $HADOOP_COMMON_HOME/share/hadoop/common/lib/*,-->
    <!--        $HADOOP_HOME/share/hadoop/hdfs/*, $HADOOP_HOME/share/hadoop/hdfs/lib/*,-->
    <!--        $HADOOP_HOME/share/hadoop/mapreduce/*, $HADOOP_HOME/share/hadoop/mapreduce/lib/*,-->
    <!--        $HADOOP_HOME/share/hadoop/yarn/*, $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*,-->
    <!--        $HIVE_HOME/lib/*, $HIVE_HOME/lib_aux/*-->
    <!--    </value>-->
    <!--</property>-->
    <property>
        <name>yarn.application.classpath</name>
        <value>/opt/bigdata/hadoop/current/etc/hadoop:/opt/bigdata/hadoop/current/share/hadoop/common/lib/*:/opt/bigdata/hadoop/current/share/hadoop/common/*:/opt/bigdata/hadoop/current/share/hadoop/hdfs:/opt/bigdata/hadoop/current/share/hadoop/hdfs/lib/*:/opt/bigdata/hadoop/current/share/hadoop/hdfs/*:/opt/bigdata/hadoop/current/share/hadoop/mapreduce/*:/opt/bigdata/hadoop/current/share/hadoop/yarn:/opt/bigdata/hadoop/current/share/hadoop/yarn/lib/*:/opt/bigdata/hadoop/current/share/hadoop/yarn/*</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>4</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>
  • workers
cat > workers <<-EOF
node03
node04
node05
EOF
  • hosts 文件
cat > hosts <<-EOF
node03
node04
node05
EOF
  • hosts-exclude 暂时为空
touch hosts-exclude
  • 分发配置
cd /opt/bigdata/hadoop/current/etc/hadoop
for i in {2..5};do scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml hosts workers hosts-exclude node0${i}:`pwd` ;done

启动与维护高可用 NameNode + Yarn 分布式集群

  • 1. 启动与格式化 ZooKeeper 集群

# 确保启动zookeeper
zkServer.sh status

  • 2. 启动 JournalNode 集群

# JournalNode 集群是安装在node01,node02,node03 三个节点的
# 在三个节点分别启动journalnode
hdfs --daemon start journalnode
hdfs --daemon stop journalnode  # 如果要关掉
  • 3. 格式化并启动主节点 NameNode 服务

# 在管理机器上执行,执行一次就好
# NameNode 服务在启动之前,需要进行格式化
hdfs namenode -format -clusterId bigdataserver(此名称可随便指定)

# 启动NameNode master
hdfs --daemon start namenode
hdfs --daemon stop namenode  # 如果有报错需要重新初始化
rm -rf /data/* # 如果有报错需要重新初始化
  • 4. NameNode 主、备节点同步元数据

# 备用的 NameNode 也需要启动服务 在node02
hdfs namenode -bootstrapStandby
  • 5. 启动备用节点的 NameNode 服务

# 在node02上
hdfs --daemon start namenode
  • 6. 启动 ZooKeeper FailoverController(zkfc)服务

# 格式化zookeeper # 在 ZooKeeper 集群上建立 HA 的相应节点信息
hdfs zkfc -formatZK # 在主控节点执行

# 首先在NameNode Master上执行
hdfs --daemon start zkfc

# 让后在另一个NameNode上执行
hdfs --daemon start zkfc
  • 7. 启动存储节点 DataNode 服务

[god@node03 ~]$ hdfs --daemon start datanode
[god@node04 ~]$ hdfs --daemon start datanode
[god@node05 ~]$ hdfs --daemon start datanode
  • 8. 启动 ResourceManager、NodeManager 及 historyserver 服务

[god@node01 hadoop]$ start-yarn.sh # 包含了下面的命令,厉害,不包括historyserver


yarn --daemon start resourcemanager # 在第一个ResourceManager上执行
yarn --daemon start resourcemanager # 在第二个ResourceManager上执行

# 在所有的NodeManager上依次启动
yarn --daemon start nodemanager
#################
# 启动historyServer
[god@node02 hadoop]$ mapred --daemon start historyserver
或
[god@node02 hadoop]$ mr-jobhistory-daemon.sh start historyserver
  • 9. 测试双 NameNode 高可用功能

验证NameNode主挂掉
	[root@node01 logs]# jps
41467 JournalNode
42972 DFSZKFailoverController
43292 Jps
42269 NameNode

	kill -9 42269
	查看到node02节点切换为active
	启动NameNode
		hadoop-daemon.sh start namenode
		或
			hdfs --daemon start namenode
			
验证zkfc挂掉
	[root@node02 logs]# jps
16562 QuorumPeerMain
24835 NameNode
18628 DataNode
25096 Jps
17530 JournalNode
18746 DFSZKFailoverController
	kill -9 18746
	查看到node01节点切换为active
	恢复zkfc
		hadoop-daemon.sh start zkfc
		
验证NameNode主机宕机,网络中断
	[root@node01 logs]# ifconfig ens33 down
	第三只手无法连接到NameNode,所以无法切换主
  • 10. 验证 Yarn 是否正常运行

http://node01:8088/cluster/nodes

cat > wc <<_EOF
hadoop spark
spark hadoop
oracle mysql postgresql
postgresql oracle mysql
mysql mongodb
hdfs yarn mapreduce
yarn hdfs
zookeeper
EOF
hdfs dfs -mkdir -p /data/wc/input/
hdfs dfs -put wc /data/wc/input

cd /opt/bigdata/hadoop/current/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-3.3.1.jar wordcount /data/wc/input /data/wc/output

查看结果
hdfs dfs -text /data/wc/output/*

一些服务地址和目录

hdfs根目录      hdfs://mycluster
namenode网页:   http://node01:50070    http://node021:50070
jobhistory网页:   http://node02:19888
resourcemanager网页 http://node01:8088/cluster  
集群日志目录  /opt/bigdata/hadoop/current/logs/

本地数据存放路经   /data/bigdata/

基础命令

# 查看hadoop的类加载路径
hadoop classpath
# 报错 mapreduce 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
# 

标签:hdfs,--,hadoop,yarn,bigdata,Hadoop3.3,Yarn,NameNode,HA
来源: https://blog.csdn.net/qq_41878423/article/details/120930511

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有