JDK: 1.8
Hadoop: 3.3.4
Linux: Centos7.5
防火墙状态: 关闭
下载地址:Index of /apache/hadoop/common/hadoop-3.3.4 (tsinghua.edu.cn)
HDFS的NameNode和SecondaryNameNode 不可安装在同一台主机
YARN的ResourceManager不要和HDFS的NameNode和SecondaryNameNode 安装在同一台主机(资源平衡考虑)
主机名 | ip | 用途 |
---|---|---|
centos7-hadoop-130 | 192.168.1.130 | HDFS:NameNode+DataNode YARN: NodeManager |
centos7-hadoop-131 | 192.168.1.131 | HDFS:DataNode YARN: NodeManager + ResourceManager |
centos7-hadoop-132 | 192.168.1.132 | HDFS:SecondaryNameNode + DataNode YARN: NodeManager |
使用root用户完成以下操作
分别修改三台服务的hostname文件,写入对应主机名
vim /etc/hostname
建议客户机(后续测试使用)也同样配置,window x64 hosts文件位置C:\Windows\System32\drivers\etc\hosts
192.168.1.130 centos7-hadoop-130
192.168.1.131 centos7-hadoop-131
192.168.1.132 centos7-hadoop-132
效果如下(以centos7-hadoop-130为例):
三台规划的机器上均执行此操作
这里不建议直接使用root用户
#创建hadoop用户
useradd hadoop
#设置hadoop用户密码
passwd hadoop
#连续两次输入要设置的hadoop用户密码即可
三台规划的机器上均执行此操作
此步骤的目的是在需要特殊权限时可方便使用
#修改文件
vim /etc/sudoers
#添加用户
修改效果如下:
NOPASSWD:ALL 表示无需密码即可切换root用户,一般不建议这么搞
参考:[linux]sudo的简单设置-CSDN博客
三台规划的机器上均执行此操作,完成三个节点中任意节点到其他节点均可免密
参考: 【linux】ssh免密登录-CSDN博客
基于sync的文件同步
参考: [rsync] 基于rsync的同步_-CSDN博客
本此使用脚本参考
#!/bin/bash#判断参数
if [ $# -lt 1 ]
thenecho 请传入要同步的文件
exit;
fi
#要同步的目标服务器清单
for host in centos7-hadoop-130 centos7-hadoop-131 centos7-hadoop-132
#for host in 192.168.1.2 192.168.1.3 192.168.1.4
doecho ==================== $host ====================#向下遍历所有目录,依次发送for file in $@do#获取父目录,用于创建不存在的目录pdir=$(cd -P $(dirname $file); pwd)#获取当前文件的名称fname=$(basename $file)#创建目录,如果这一步里对应的服务器没有进行免密设置,则需要输入密码ssh -p 50022 $host "mkdir -p $pdir"#执行同步,如果这一步里对应的服务器没有进行免密设置,则需要输入密码echo "rsync -av -e 'ssh -p 50022' $pdir/$fname hadoop@$host:$pdir"rsync -av -e 'ssh -p 50022' $pdir/$fname hadoop@$host:$pdirdone
done
三台规划的机器上均执行此操作,如无特殊说明,使用hadoop用户操作
略
下载地址:Index of /apache/hadoop/common/hadoop-3.3.4 (tsinghua.edu.cn)
这里以放置在/app目录下为例
mkdir -p /app
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xvf hadoop-3.3.4.tar.gz
目录说明:
文件夹 | 说明 |
---|---|
bin | 相关服务的操作脚本 |
etc | 配置文件目录 |
lib | hadoop本地库 |
sbin | 启、停等相关脚本 |
share | 依赖包、文档、示例 |
使用root用户操作
像配置JAVA_HOME一样配置HADOOP_HOME,值为Hadoop安装的根目录
#HADOOP的根目录
export HADOOP_HOME=/app/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
以上内容可配置到/etc/profile文件中,亦可在/etc/profile.d/下创建.sh的脚本单独放置,前提是/etc/profile文件包含如下内容:
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; doif [ -r "$i" ]; thenif [ "${-#*i}" != "$-" ]; then . "$i"else. "$i" >/dev/nullfifi
done
生效配置
source /etc/profile
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
hadoop集群工作时会通过ssh通讯,如果ssh默认不是22端口则通过修改 文件$HADOOP_HOME/etc/hadoop/hadoop-env.sh指定ssh连接时的配置选项.
添加配置
export SPARK_SSH_OPTS="-p 50022"
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值。
配置文件 | 所在 jar 包中的位置 | 参考文件位置 |
---|---|---|
[core-default.xml] | $HADOOP_HOME/share/hadoop/common/hadoop-common-3.3.4.jar/core-default.xml | $HADOOP_HOME/share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.xml |
[hdfs-default.xml] | $HADOOP_HOME/share/hadoop/hdfs/hadoop-hdfs-3.3.4.jar/hdfs-default.xml | $HADOOP_HOME/share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml |
[yarn-default.xml] | $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-common-3.3.4.jar/yarn-default.xml | $HADOOP_HOME/share/doc/hadoop/hadoop-yarn/hadoop-yarn-common/yarn-default.xml |
[mapred-default.xml] | $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.4.jar/mapred-default.xml | $HADOOP_HOME/share/doc/hadoop/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml |
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/core-site.xml
configuration节点下增加如下配置
fs.defaultFS hdfs://centos7-hadoop-130:8020 hadoop.tmp.dir /app/data hadoop.http.staticuser.user hadoop
[
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/hdfs-site.xml
configuration节点下增加如下配置
dfs.namenode.http-address centos7-hadoop-130:9870 dfs.namenode.secondary.http-address centos7-hadoop-132:9868
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/yarn-site.xml
configuration节点下增加如下配置
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname centos7-hadoop-131 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/mapred-site.xml
查询classpath作为yarn.application.classpath对应的value
hadoop classpath
configuration节点下增加如下配置
mapreduce.framework.name yarn yarn.application.classpath /app/hadoop-3.3.4/etc/hadoop:/app/hadoop-3.3.4/share/hadoop/common/lib/*:/app/hadoop-3.3.4/share/hadoop/common/*:/app/hadoop-3.3.4/share/hadoop/hdfs:/app/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/app/hadoop-3.3.4/share/hadoop/hdfs/*:/app/hadoop-3.3.4/share/hadoop/mapreduce/*:/app/hadoop-3.3.4/share/hadoop/yarn:/app/hadoop-3.3.4/share/hadoop/yarn/lib/*:/app/hadoop-3.3.4/share/hadoop/yarn/*
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/workers
删除原有的一条localhost记录
增加集群的主机清单,如下内容:
centos7-hadoop-130
centos7-hadoop-131
centos7-hadoop-132
在centos7-hadoop-130上执行格式化命令,使用hadoop用户执行
仅在首次启动集群前执行一次,多次执行会导致重复生成namenode的集群id,当namenode和datanode的集群id不一致时将导致整个集群报错。重新格式化namenode前应停止namenode和datanode进程,并删除data和log目录,必要时/tmp相关进程信息文件也应删除。
格式化命令:
hdfs namenode -format
entos7-hadoop-130 使用hadoop用户启动hdfs
启动命令:
cd $HADOOP_HOME
sbin/start-dfs.sh
启动完成进程信息
注: NodeManager进程在yarn启动后出现
访问NameNode:http://192.168.1.130:9870/
访问SecondaryNameNode http://192.168.1.132:9868/
entos7-hadoop-131 使用hadoop用户启动yarn
启动命令:
cd $HADOOP_HOME
sbin/start-yarn.sh
启动完成进程信息
访问:http://192.168.1.131:8088/
查看132节点进程信息
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/mapred-site.xml
configuration节点下增加如下配置
mapreduce.jobhistory.address centos7-hadoop-130:10020
mapreduce.jobhistory.webapp.address centos7-hadoop-130:19888
启动历史服务器
mapred --daemon start historyserver
进程信息
访问: http://centos7-hadoop-130:19888/jobhistory/
三台机器均执行此配置(可使用1.6中的rsync进行同步),使用hadoop用户
path:$HADOOP_HOME/etc/hadoop/yarn-site.xml
configuration节点下增加如下配置
yarn.log-aggregation-enable true yarn.log.server.url http://centos7-hadoop-13:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800
重启yarn和历史服务器
cd $HADOOP_HOME
#停止yarn centos7-hadoop-131 上执行
sbin/stop-yarn.sh
#停止历史服务器 centos7-hadoop-130 上执行
mapred --daemon stop historyserve
# 启动yarn centos7-hadoop-131 上执行
sbin/start-yarn.sh
# 启动历史服务器 centos7-hadoop-130 上执行
mapred --daemon start historyserve
提交测试任务
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input.txt /output00.txt
访问历史服务器:http://centos7-hadoop-130:19888/jobhistory
查看日志:
hadoop fs -ls /
hadoop fs -mkdir /test
hadoop fs -put node.tar.gz /test/
hadoop fs -put a.txt /
hadoop fs -ls /
hadoop fs -ls /test
hadoop fs -get /a.txt
hadoop fs -get /test/node.tar.gz
hadoop fs -rm -r -f /test
hadoop fs -rm /a.tx
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input.txt /output.txt
对比下hadoop2.x 与hadoop3.x 端口清单
端口用处 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode 内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce 查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
#启动
$HADOOP_HOME/sbin/start-dfs.sh
#停止
$HADOOP_HOME/sbin/stop-dfs.sh
#启动
$HADOOP_HOME/sbin/start-yarn.sh
#停止
$HADOOP_HOME/sbin/stop-yarn.sh
hdfs --daemon start/stop namenode/datanode/secondarynamenode
yarn --daemon start/stop resourcemanager/nodemanager
mapred --daemon stop historyserver
mapred --daemon start historyserver