NameNode
存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode
DataNode
在本地文件系统存储文件块数据,以及块数据的校验和。
基本单位是块(block),默认128M。
SecondaryNameNode
用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照
客户端利用利用MapReduce描述数据计算和处理的任务细节,交给hadoop的Yarn;Yarn则调度多台物理机的CPU完成计算,然后存储的hdfs中,常见操作有Map(映射)、Reduce(归约)
常见组件
1、客户端,提交mapreduce作业
2、yarn资源管理器,负责集群上计算资源的协调
3、yarn节点管理器,负责启动和监控集群中机器上的计算容器(container)
4、mapreduce的application master,负责协调运行mapreduce的作业
5、hdfs,分布式文件系统,负责与其他实体共享作业文件
ResourceManager
是全局的,负责对于系统中的所有资源有最高的支配权
ApplicationMaster:负责处理client提交的jobob以及协商第一个container以供applicationMaster运行;
Scheduler: Scheduler负责分配最少但满足application运行所需的资源量给Application。Scheduler只是基于资源的使用情况进行调度,并不负责监视/跟踪application的状态,当然也不会处理失败的task。
NodeManager
NodeManager 执行和监控任务需要资源实时共享数据节点的资源
Java环境搭建
Hadoop下载:https://pan.baidu.com/s/1FFaUcMlfmmYIaFHGybwAgQ
(提取码:qyd2)
Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
导入
用Xftp 将下载好的tar放入到opt目录下;
解压
解压安装包、并重命名
tar -zxvf /opt/hadoop-2.7.3.tar.gz
mv /opt/hadoop-2.7.3 /usr/local/hadoop
环境变量
修改
vi /etc/profile
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PS: JAVA_HOME、HADOOP_HOME、JRE_HOME声明在前面即可
刷新
source /etc/profile
测试
hadoop version
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
配置文件
/usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://127.0.0.1:9000value>
property>
configuration>
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
property>
configuration>
cd /usr/local/hadoop/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
/usr/local/hadoop/etc/yarn-site.xml(yarn配置)
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
configuration>
/usr/local/hadoop/etc/hadoop/hadoop-env.sh(修改以下java配置,因为这里无法读取java环境变量,所以写死一个值)
格式化命令
/usr/local/hadoop/bin/hadoop namenode -format
注意,如果报UTF-8错误,则必须将中文删掉,但是用notepad++编辑就不会,不要用记事本
启动脚本
sh /usr/local/hadoop/sbin/start-all.sh #停止
sh /usr/local/hadoop/sbin/stop-all.sh #启动
http://172.168.233.128:8088 yarn页面
http://172.168.233.128:50070 hdfs页面
Ps:无法访问的话,记得关闭虚拟机防火墙
创建目录:hdfs dfs -mkdir /winnie
创建文件:hdfs dfs -touchz /winnie/test03.txt
上传文件: hdfs dfs -put [本地目录/文件夹] [hadoop目录]
查看目录:hdfs dfs -ls [文件目录]
查看文件:hdfs dfs -cat [file_path]
查看数量:hdfs dfs -count /
hdfs dfs -rm [文件地址]
hdfs dfs -rm -r [目录地址]
hdfs dfs -rmr [目录地址] (递归删除)
hdfs dfs -get [文件目录] [本地目录]
hdfs dfs -getmerge /winnie/hadoop-file /home/spark/hadoop-file/test.txt(获取并重命名)
hdfs dfs -mv /winnie/test03.txt /winnie/test.txt
hadoop job -kill [job-id]
一主从三从机制
172.168.233.128 master
172.168.233.129 slave1
172.168.233.130 slave2
172.168.233.131 slave3
批量执行
vi /etc/hosts
172.168.233.128 master
172.168.233.129 slave1
172.168.233.130 slave2
172.168.233.131 slave3
生成公钥(全部一起执行)
cd ~/.ssh
ssh-keygen -t rsa (一直回车)
生成密钥(master执行)
cp id_rsa.pub authorized_keys
chmod 644 authorized_keys
sudo service sshd restart
传送密钥(master执行)
(这里.ssh的位置需要注意下,由于我用的是root用户,所以直接就在/root下,其他可能是/home/用户名/下)
可以ssh切换到其他连接 看一下是否生效就知道了该操作是否有效
scp /root/.ssh/authorized_keys slave1:/root/.ssh
scp /root/.ssh/authorized_keys slave2:/root/.ssh
scp /root/.ssh/authorized_keys slave3:/root/.ssh
修改主机名(分别执行在四台机器上)
此操作必须,否则机器无法区分出是不同机器
hostnamectl --static set-hostname master
hostnamectl --static set-hostname slave1
hostnamectl --static set-hostname slave2
hostnamectl --static set-hostname slave2
先在master配置好,然后scp给各个其他节点
core-site.xml:
<configuration>
<property>
<name>fs.default.namename>
<value>hdfs://master:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/hadoop/tmpvalue>
property>
configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replicationname>
<value>2value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/opt/hadoop/dfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/opt/hadoop/dfs/datavalue>
property>
configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>Master:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>Master:19888value>
property>
configuration>
yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>
<value>org.apache.hadoop.mapred.ShuffleHandlervalue>
property>
<property>
<name>yarn.resourcemanager.addressname>
<value>master:8032value>
property>
<property>
<name>yarn.resourcemanager.scheduler.addressname>
<value>master:8030value>
property>
<property>
<name>yarn.resourcemanager.resource-tracker.addressname>
<value>master:8031value>
property>
<property>
<name>yarn.resourcemanager.admin.addressname>
<value>master:8033value>
property>
<property>
<name>yarn.resourcemanager.webapp.addressname>
<value>master:8088value>
property>
configuration>
slaves
slaves是一个文件在/usr/local/hadoop/etc/hadoop目录下
slave1
slave2
slave3
分发hadoop配置
su root
scp -r /usr/local/hadoop slave1:/usr/local/hadoop
scp -r /usr/local/hadoop slave2:/usr/local/hadoop
scp -r /usr/local/hadoop slave3:/usr/local/hadoop
分发环境变量配置
scp -r /etc/profile slave1:/etc/profile
scp -r /etc/profile slave2:/etc/profile
scp -r /etc/profile slave3:/etc/profile
批量执行——刷新环境变量
scp -r /usr/local/hadoop slave1:/usr/local/hadoop
scp -r /usr/local/hadoop slave2:/usr/local/hadoop
scp -r /usr/local/hadoop slave3:/usr/local/hadoop
chmod 755 /opt/hadoop/dfs
chmod 755 /opt/hadoop/tmp
由于采用了密钥模式,只需操作主节点,所有从节点和自动自动hadoop来完成功能
删除脏数据
rm -rf /opt/hadoop/dfs/
rm -rf /opt/hadoop/tmp/
rm -rf /usr/local/hadoop/logs
重新格式化(仅在主节点)
由于改了配置,所以需要namenode初始化一次
/usr/local/hadoop/bin/hadoop namenode -format
全部启动(仅在主节点)
cd /usr/local/hadoop
sbin/start-all.sh
分开启动(仅在主节点)
单独启动hdfs:sbin/start-dfs.sh
单独启动yarn:sbin/start-yarn.sh
关闭(仅在主节点)
sbin/stop-all.sh
从节点JPS
有datanode没namenode
没datanode有namenode
有可能是多次format导致数据版本不一致,需要手动修改
可以在这里看到namenode或者datanode的启动日志进而排错
版本修改后要保持集群的一致性,需要复制他们
每个节点查看以下文件
vi /opt/hadoop/hdfs/current/VERSION
UUID和clusterID必须一致,storageType必须是DATA_NODE
storageID=DS-255b4fcb-7ade-433f-a14a-4bead35c0902
clusterID=CID-ec926c36-cc13-4b06-a239-21854f9b7221
cTime=0
datanodeUuid=8f1cc8a2-e5c0-4346-8339-b4d1b5e6a2d6
storageType=DATA_NODE
layoutVersion=-56
命名节点启动失败
如果更改了配置,注意重新格式化一下
/usr/local/hadoop/bin/hadoop namenode -format
只有一个节点
修改主机名
hostnamectl --static set-hostname master
hostnamectl --static set-hostname slave1
hostnamectl --static set-hostname slave2
hostnamectl --static set-hostname slave2