hadoop环境搭建
从官网上获得对应的安装包
下载地址:
Apache Download MirrorsApache Download MirrorsApache Download Mirrors
点击第一个
安装JDK1.8
- 解压文件
tar -zxvf jdk-8u60-linux-x64.tar.gz
2.配置环境
vi /etc/profile
按i执行编辑
export JAVA_HOME=/root/jdk1.8.0_171
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
最后按ESC 然后输入:wq退出。
然后执行source /etc/profile重载配置文件。
软件依赖:ssh,rsync(本地安装)
yum -y install ssh rsync
两台NameNode需要安装的工具
yum install -y psmisc
安装zookeeper
zookeeper 官网
ZooKeeper: Because Coordinating Distributed Systems is a Zoo
https://zookeeper.apache.org/releases.html#download
1.解压tar -xf zookeeper-3.4.5-cdh5.14.2.tar.gz
2. mv zookeeper-3.4.5-cdh5.14.2/ /opt/install/zookeeper
3.cd /zookeeper_home/conf cp zoo_sample.cfg zoo.cfg
4. vi zoo.cfg
dataDir=/var/zookeeper
server.1=IP地址1:2888:3888
server.2=IP地址2:2888:3888
server.3=IP地址3:2888:3888
5.在每个节点的数据文件目中,建立一个文件myid文件中写id和配置文件中一致。
Echo “id号” > /var/zookeeper/myid
6.顺序启动
sbin/zkServer.sh start-foreground
sbin/zkServer.sh status
bin/zkCli.sh zookeeper的client
QuorumPeerMain 是 zookeeper的进程名称
HDFS的HA
思路
-
- 主从集群:结构相对简单,主与从协作
- 主:单点,数据一致性容易掌控
- 问题:
- 单点故障,集群整体不可用
- 压力过大,内存受限
解决方案
-
- 单点故障:
高可用方案:HA High Available
多个NanmeNode,主备切换
-
- 压力过大,内存受限
联邦机制:Federation 元数据分片
多个NameNode,管理不同的元数据
hdfs-ha解决方案
-
- 多台NameNode主备模式,Active和standby状态,active对外提供服务
- 增加JouralNode角色,负责同步NameNode的editlog数据。最终一致性
- 增加zkf角色,与NameNode同台,通过zookeeper集群协调NameNode的主从选举和切换。事件回调机制
- DataNode同时向NameNodes汇报block清单
搭建流程
基础设施:
-
- ssh免密:
- 执行启动脚本的NameNode的机器要免密登录其他节点
- HA模式下,ZKFC要免密登录本机和另一台NameNode
- ssh免密:
应用搭建
-
- 搭建zookeeper机器
- 修改hadoop的文件,并分发到其他节点
初始化启动
-
- 首先启动JournalNode hadoop-daemon.sh start journalnode 三台
- 选择一个NameNode 进行格式化 hdfs namenode -format
- 启动被格式化的NameNode,以备另外一台同步 hadoop-daemon.sh start namenode
- 在另一个NameNode上 同步数据 hdfs namenode -bootstrapStandby
- 格式化ZK hdfs zkfc -formatZK
- 启动集群
使用和验证:
-
- 查看journalnode的日志和进程。
- 观察zookeeper的节点变化
- NameNode动态切换。
SSH 免密码登录
服务器上使用"ssh-keygen -t rsa"命令来创建公钥。
根据提示,一路回车即可,提示输入密码时回车即表示空密码。在用户根目录下会生成.ssh文件夹,里面包括id_rsa(私钥)和id_rsa.pub(公钥)
用 ssh-copy-id 命令将公钥复制或上传到远程主机B ,并将身份标识文件追加到 ~/.ssh/authorized_keys 中:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@IP地址
免密码登录配置好以后,可以通过SCP来传输文件,不用每次都输入密码了
如果hadoop要重新安装 需要完全删除全分布式的数据
1.完全删除完全分布式的数据 数据和日志 rm -rf /var/hadoop
2.NameNode1 ---> NameNode2 免密登录
3. vi hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value> //名称服务 我的群集
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value> //名称节点
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>NameNode1:8020</value> //namenode 节点rpc地址 1
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>NameNode2:8020</value> //namenode 节点rpc地址 2
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>NameNode1:50070</value> //namenode - http地址 1
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>NameNode2:50070</value> //namenode - http地址 2
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://IP地址1:8485;IP地址2:8485;IP地址3:8485/mycluster</value> //共享编辑目录
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/hadoop/journal/data</value> //日志节点编辑目录
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name> //客户故障转移 代理
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property> //配置的故障转移代理提供程序
<property>
<name>dfs.ha.fencing.methods</name> //设置ha 方法
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value> //指定ssh key 文件位置
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value> //自动故障切换。启用
</property>
<property>
<name>dfs.replication</name>
<value>2</value> //复制2次
</property>
4. vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/cdh/hadoop/data</value> //数据目录
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>IP地址1:2181,IP地址2:2181,IP地址3:2181</value> //zookeeper 地址
</property>
5.vi hadoop-env.sh
export JAVA_HOME=/opt/install/jdk //指定jdk安装位置
export HADOOP_LOG_DIR=/var/hadoop/logs //指定hadoop日志存放位置
6. vi slaves
NameNode2 //IP地址或主机名
DataNode1 //IP地址或主机名
DataNode2 //IP地址或主机名
同步:分发
scp core-site.xml hdfs-site.xml slave hadoop-env.sh IP地址:`pwd`
两台NameNode需要安装的工具
yum install -y psmisc
初始化顺序:
1.先启动JN hadoop-daemon.sh start journalnode 三台
2.选择一台NameNode格式化 hdfs namenode -format NameNode1主机地址
3.启动这个格式化的NameNode的。以备另外一台同步 hadoop-daemon.sh start namenode
4.在另外一台NameNode中同步数据 hdfs namenode -bootstrapStandby NameNode2主机地址
5. 启动zookeeper集群
6.格式zk hdfs z kfc -formatZK
在 NameNode主机上 start-dfs.sh
yarn HA 的配置
#修改mapred-site.xml文件:(此文件在hadoop中有)
<property>
<name>mapreduce.framework.name</name> //设置架构
<value>yarn</value>
</property>
#修改yarn-site.xml文件:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value> //辅助服务
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value> //资源管理器 HA 启动
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>IP地址:2181,IP地址:2181,IP地址:2181</value> //zookeeper 地址
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value> // 资源管理器。群集id
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value> //资源管理器 HA rm ID
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>NameNodeIP地址</value> //资源管理器主机名
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>NameNode2IP地址</value>
</property>
报错资源不足需要添加yarn配置 如下:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>102400</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>32</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>51200</value>
</property>
#1. 配置完成后,分发到其他节点。
#2. 先启动zookeeper集群
#3. 在NamenNode1主机地址 上start-yarn.sh
#4. 在NamenNode2主机 上启动 yarn-daemon.sh start resourcemanager
编写启动和关闭脚本
Vi start-hadoop-all
#!/bin/bash
#zookeeper start
ssh IP地址1 '. /etc/profile;/opt/install/zookeeper/sbin/zkServer.sh start'
ssh IP地址2 '. /etc/profile;/opt/install/zookeeper/sbin/zkServer.sh start'
ssh IP地址3 '. /etc/profile;/opt/install/zookeeper/sbin/zkServer.sh start'
bash /opt/install/zookeeper/sbin/zkServer.sh start
#hadoop start all
start-all.sh
#hadoop yarn start
ssh IP地址1 '. /etc/profile;yarn-daemon.sh start resourcemanager'
Vi start-hadoop-all
#!/bin/bash
#zookeeper stop
ssh IP地址1 '. /etc/profile;/opt/install/zookeeper/sbin/zkServer.sh stop'
ssh IP地址2 '. /etc/profile;/opt/install/zookeeper/sbin/zkServer.sh stop'
ssh IP地址3 '. /etc/profile;/opt/install/zookeeper/sbin/zkServer.sh stop'
#hadoop stop all
stop-all.sh
#hadoop yarn stop
ssh IP地址1 '. /etc/profile;yarn-daemon.sh stop resourcemanager'
结果验证
访问hadoop 网页输入:NameNodeIP地址:50070即可访问hadoop
错误处理:
部分nodemanager节点状态变为unhealthy
vi yarn-site.xml
yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 这个配置项默认是90,意思是如果路配置项下的yarn.nodemanager.local-dirs路径或者yarn.nodemanager.log-dirs.配置项下的路径的磁盘使用率达到了90%以上,则将此台机器上的nodemanager标志为unhealthy,这里面的值可以设置为0到100之间,如果超过100的话,就不生效了。
yarn.nodemanager.disk-health-checker.min-healthy-disks 默认值是0.25 只要不足25%的磁盘使用率超过90%,那么这些机器就会被标志为unhealthy,同样作用于yarn.nodemanager.local-dirs下的路径或者yarn.nodemanager.log-dirs.配置项下的路径。
解决方案:
1.删除以上目录下的无用数据,让磁盘使用率降低到90%以下。
2.将 yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 设置为100.yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 设置为0.
yarn.nodemanager.local-dirs下的路径或者yarn.nodemanager.log-dirs.配置项下的路径要和hdfs数据路径分开!!!!!,做到日志和数据分离。这样就不会导致hdfs数据写满了,yarn也不可用了(unhealthy),也就是磁盘和内存+cpu分离。
常用yarn命令:
查看yarn正在运行的任务列表
yarn application -list
kill掉yarn正在运行的任务
yarn application -kill application_1592962175771_0005
查找yarn已经完成的任务列表
yarn application -appStates finished -list
查找yarn所有任务列表
yarn application -appStates ALL -list
查看yarn的所有命令的使用方法
yarn application
root@master /]# yarn application
20/06/24 14:44:08 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.xxx.xx:8032
Invalid Command Usage :
usage: application
-appStates <States> Works with -list to filter applications
based on input comma-separated list of
application states. The valid application
state can be one of the following:
ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUN
NING,FINISHED,FAILED,KILLED
-appTypes <Types> Works with -list to filter applications
based on input comma-separated list of
application types.
-help Displays help for all commands.
-kill <Application ID> Kills the application.
-list List applications. Supports optional use
of -appTypes to filter applications based
on application type, and -appStates to
filter applications based on application
state.
-movetoqueue <Application ID> Moves the application to a different
queue.
-queue <Queue Name> Works with the movetoqueue command to
specify which queue to move an
application to.
-status <Application ID> Prints the status of the application.