(1) hdfs
组件 | 作用 |
---|---|
NameNode | 负责管理hdfs文件系统,集群中分主从节点 |
bootstrapStandby | 从节点复制主节点的元数据目录 |
DataNode | 主要是用来存储数据文件 |
JournalNode | 两个NameNode为了数据同步的相互通信的独立进程 |
DFSZKFailoverController | 负责整体的故障转移控制 |
(2) yarn
组件 | 作用 |
---|---|
ResourceManager | Yarn的资源管理器 |
NodeManager | 管理Hadoop集群中单个计算节点 |
JobHistoryServer | 实现web查看作业的历史运行情况 |
系统:Centos7.3
IP | 主机名 | 角色描述 | 集群 |
---|---|---|---|
192.168.189.17 | nn1-bdp1 | namenode-bdp1,zkfs,zookeeper1,resourcemanager | bdp1 |
192.168.189.27 | nn2-bdp1 | namenode-bdp1,zkfs,zookeeper2,resourcemanager,journalnode | bdp1 |
192.168.189.37 | nn3-bdp2 | namenode-bdp2,zkfs,zookeeper3,journalnode | bdp2 |
192.168.189.47 | nn4-bdp2 | namenode-bdp2,zkfs,journalnode | bdp2 |
192.168.189.57 | dn1 | datanode1,nodemanager | |
192.168.189.67 | dn2 | datanode2,nodemanager |
- zkfc 是 Zookeeper FailoverController 的简称,主要用于实现两个namenode之间的容灾;
- resourcemanager 是 yarn 中负责资源协调和管理的进程;
- nodemanager 是 yarn 中单个节点上的代理进程,向 resourcemanager 汇报信息,监控该节点资源;
- datanode 是 hdfs 的工作节点,负责实际的数据存储和任务计算;
- journalnode 是分布式日志管理模式下两个 namenode 节点同步数据的进程,每个HA集群里面的高可用依赖它。
将 hadoop 守护进程的数据交换到磁盘的行为可能会导致操作超时,可以通过修改 linux 内核参数,降低这个概率,但是不能避免。设置 swappiness=0 的时候表示最大限度使用物理内存。
#/etc/sysctl.conf 中添加
vm.swappiness=0
#使参数生效
sysctl -p
操作系统内核根据 vm.overcommit_memory 的值来决定分配策略,并通过 vm.overcommit_ratio 的值来设定超过物理内存的比例,建议将 vm.overcommit_memory 参数设置为2,适当修改 vm.overcommit_ratio 参数。
#/etc/sysctl.conf 中添加
vm.overcommit_memory=2
vm.overcommit_ratio=50
#使参数生效
sysctl -p
该参数表示 socket 监听 backlog 的上限,默认为128,建议大于等于32768,socket 服务器会一次性处理 backlog 中的所有请求,hadoop 的 ipc.server.listen.queue.size 参数和 linux 的 net.core.somaxconn 参数控制了监听队列的长度,需要调大。
#/etc/sysctl.conf 中添加
net.core.somaxcOnn= 65535
#使参数生效
sysctl -p
vim /etc/security/limits.conf
#添加以下内容
* soft nofile 524288
* hard nofile 524288
* soft nproc 524288
* hard nproc 524288
文件的访问时间可以让用户知道哪些文件近期被查看或修改,但对于hdfs来说,获取某个文件的某个块什么时候被访问没什么意义。所以可以将其禁用,修改 /etc/fstab 增加 noatime,nodirtime 选项,重新 remount 生效。
vim /etc/fstab
/dev/sdb1 /data xfs rw,noatime,nodiratime 0 0
THP是一个使用 Huge Pages 自动化的抽象层。它会引起 cpu 占用率增大,需要将其关闭。
#临时关闭
echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag
#永久关闭
vim /etc/rc.d/rc.local
##添加以下内容
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
##添加执行权限
chmod +x /etc/rc.d/rc.local
##查看是否关闭
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#关闭SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
按照节点规划里的主机名,配置各个主机的主机名,并添加 /etc/hosts 解析。
#以192.168.189.17节点为例
hostnamectl set-hostname nn1-bdp1
exec bash
vim /etc/hosts
192.168.189.17 nn1-bdp1
192.168.189.27 nn2-bdp1
192.168.189.37 nn3-bdp2
192.168.189.47 nn4-bdp2
192.168.189.57 dn1
192.168.189.67 dn2
每台主机都要执行。
#添加组和用户
groupadd hadoop
useradd -G hadoop hdfs
useradd -G hadoop yarn
#配置密码
echo 'hdfs2021' | passwd --stdin hdfs
echo 'yarn2021' | passwd --stdin yarn
NameNode 主机之间配置 ssh 免密登录
#切换到hdfs用户
su - hdfs
#生成密钥ssh-keygen#将公钥拷贝至其它节点
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@192.168.189.17
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@192.168.189.27
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@192.168.189.37
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@192.168.189.47
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@192.168.189.57
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@192.168.189.67
每台主机都要安装。
(1) 新建目录
mkdir -pv /app && cd /app
(2) 准备jdk包
jdk-8u92-linux-x64.tar.gz
(3) 解压
tar -xf jdk-8u92-linux-x64.tar.gzln -s jdk1.8.0_92 jdk
(4) 配置环境变量
vim /etc/profile
#添加以下内容
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin/:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPAT
#使环境变量生效
source /etc/profile
(5) 验证java版本
java -version
按照主机规划的配置,在三台主机上安装 zookeerper 集群。
(1) 创建目录
mkdir -pv /app && cd /app
(2) 下载 zookeeper 安装包
zookeeper-3.4.9.tar.gz
(3) 解压
tar -xf zookeeper-3.4.9.tar.gzln -s zookeeper-3.4.9 zookeeper
(4) 修改配置文件
cd /app/zookeeper
mkdir {data,logs}
cp conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/zookeeper/data
dataLogDir=/app/zookeeper/logs
clientPort=2181
server.1=192.168.189.17:2888:3888
server.2=192.168.189.27:2888:3888
server.3=192.168.189.37:2888:3888
(5) 准备data/myid文件,三台机器的myid的值,分别对应zoo.cfg文件中的server.x的数字x
#192.168.189.17
echo 1 > /app/zookeeper/data/myid
#192.168.189.27
echo 2 > /app/zookeeper/data/myid
#192.168.189.37
echo 3 > /app/zookeeper/data/myid
(6) 启动 zookeeper
cd /app/zookeeper/bin
#启动
./zkServer.sh start
#查看状态
./zkServer.sh status
每台主机都需安装,可先安装一台,然后 scp 至其它主节,以 192.168189.17 主机为例。
(1) 创建目录
mkdir -pv /app && cd /app
(2) 下载 hadoop安装包
hadoop-2.7.3.tar.gz
(3) 解压
tar -xf hadoop-2.7.3.tar.gz
ln -s hadoop-2.7.3 hadoop
(4) 创建目录并授权
mkdir /{data,log}
chown -R hdfs:hadoop /data
chown -R hdfs:hadoop /log
(5) 添加环境变量
vim /etc/profile
#在末尾添加
export HADOOP_HOME=/app/hadoop
export HADOOP_CONF_DIR=/app/hadoop/etc/hadoop
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export YARN_CONF_DIR=${HADOOP_CONF_DIR}
export HADOOP_PID_DIR=/app/hadoop/tmp
export YARN_PID_DIR=/app/hadoop/tmp
export HADOOP_LOG_DIR=/log/hadoop
export YARN_LOG_DIR=/log/yarn
export HADOOP_MAPRED_LOG_DIR=${YARN_LOG_DIR}
export HADOOP_MAPRED_PID_DIR=${YARN_PID_DIR}
export PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin:$PATH
#使配置生效
source /etc/profile
修改 /app/hadoop/etc/hadoop/core-site.xml,在
修改 /app/hadoop/etc/hadoop/hdfs-site.xml,在
修改 /app/hadoop/etc/hadoop/yarn-site.xml,在
$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_COMMON_HOME/share/hadoop/common/*,
$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,
$HADOOP_COMMON_HOME/share/hadoop/hdfs/*,
$HADOOP_COMMON_HOME/share/hadoop/hdfs/lib/*,
$HADOOP_COMMON_HOME/share/hadoop/mapreduce/*,
$HADOOP_COMMON_HOME/share/hadoop/mapreduce/lib/*,
$HADOOP_COMMON_HOME/share/hadoop/yarn/*,
$HADOOP_COMMON_HOME/share/hadoop/yarn/lib/*
touch /app/hadoop/etc/hadoop/yarn.exclude
cd /app/hadoop/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
修改 mapred-site.xml,在
vim /app/hadoop/etc/hadoop/hadoop-env.sh
#修改以下内容
export JAVA_HOME=/app/jdk
vim /app/hadoop/etc/hadoop/slaves
dn1
dn2
#在192.168.189.17主机上执行
cd /app
scp -r hadoop-2.7.3 192.168.189.27:/app
scp -r hadoop-2.7.3 192.168.189.37:/app
scp -r hadoop-2.7.3 192.168.189.47:/app
scp -r hadoop-2.7.3 192.168.189.57:/app
scp -r hadoop-2.7.3 192.168.189.67:/app
#在192.168.189.27-67主机上执行
##添加软链接
cd /app
ln -s hadoop-2.7.3 hadoop
##添加目录并授权
mkdir /{data,log}
chown -R hdfs:hadoop /data
chown -R hdfs:hadoop /log
#每台主机执行,修改hadoop目录权限
cd /app
chown -R hdfs:hadoop hadoop/
后需操作均使用 hdfs 用户执行,执行命令前记得先切换用户:
su - hdfs
根据主机规划情况,在 192.168.189.17 和 192.168.189.37 上执行:
hdfs zkfc -formatZK
根据主机规划情况,在 192.168.189.27、192.168.189.37、192.168.189.47 上执行:
hadoop-daemon.sh start journalnode
注意:非首次启动需初始化 Shared Edits目录。
hdfs namenode -initializeSharedEdits
说明:非首次启动是指原来有一个没有配置HA的HDFS已经在运行了,HDFS上已经有数据了,现在需要配置HA而加入一台namenode。这时候namenode1通过initializeSharedEdits命令来初始化journalnode,把edits文件共享到journalnode上。
根据主机规划情况,在 192.168.189.17、192.168.189.37上即每个集群其中一台 namenode 的节点上执行:
hdfs namenode -format
(1) 启动刚格式化的 NameNode,在主 namenode 上执行,即在 192.168.189.17、192.168.189.37 上执行:
hadoop-daemon.sh start namenode -clusterid hd20211011
注意:此处需要指定集群ID,如第一次在 192.168.189.17 上格式化时不指定 -clusterid,而使用 hdfs namenode -format 直接格式化,那么在 192.168.189.37 上格式化时必需指定 -clusterid,且需要与 192.168.189.17 上的相同,可通过 cat /data/dfs/nn/local/current/VERSION 查看 192.168.189.17 格式化后的 clusterID,如果 clusterid 不一致,可能无法读取到 datanode
(2) 同步 namenode 数据,在 192.168.189.27、192.168.189.47 上执行:
hdfs namenode -bootstrapStandby
(3) 接着启动 namenode 进程了,在 192.168.189.27、192.168.189.47 上执行:
hadoop-daemon.sh start namenode
在其中一台主 namenode 上执行即可,可在 192.168.189.17 上执行:
hadoop-daemons.sh start datanode
根据主机规划情况,先在 192.168.189.17上执行:
start-yarn.sh
然后在 192.168.189.27上执行:
yarn-daemon.sh start resourcemanager
根据主机规划情况,先在 192.168.189.17、192.168.189.27、192.168.189.37、192.168.189.47 上执行:
hadoop-daemon.sh start zkfc
在 192.168.189.17 上执行,因 yarn-site.xml 文件中 yarn.nodemanager.remote-app-log-dir 的配置为 hdfs://bdp/tmp/logs,所以需要创建目录,不然日志里会报 File hdfs://bdp/tmp/logs does not exist.
#添加hosts解析,需要root权限
vim /ect/hosts
192.168.189.17 nn1-bdp1 bdp
#创建目录
hadoop fs -mkdir -p /tmp/logs
#启动服务
mr-jobhistory-daemon.sh start historyserver
#web访问
http://192.168.189.17:19888
namenode1:
http://192.168.189.17:50070
namenode2:
http://192.168.189.27:50070
namenode3:
http://192.168.189.37:50070
namenode4:
http://192.168.189.47:50070
ResourceManager1:
http://192.168.189.17:8088
ResourceManager2:
http://192.168.189.27:8088
Datanode:
http://192.168.189.57:50075/
http://192.168.189.67:50075/
JobHistory:
http://192.168.189.17:19888
hadoop进程查看
jps
原文链接:https://www.cnblogs.com/hovin/p/15391731.html