- 前言
- 预先设置
- 修改主机名
- 关闭防火墙
- 创建hadoop用户
- SSH安装免密登陆
- 单机免密登陆——linux配置ssh免密登录
- linux环境配置Java变量
- 配置Java环境变量
- 安装Hadoop-3.3.0.tar.gz
- 运行
- 单机非分布式
- 伪分布式
- 1.修改配置文件
- 2.格式化NameNode
- 3.开启 NaneNode 和 DataNode 进程
- 4. 操作集群
- 5. 启动yarn(伪分布式也可以不启动)
- 6.运行测试实例
- 7. 配置日志保存在HDFS
- 分布式
- 规划
- 集群:修改主机名
- 修改配置文件
- 单点启动
- 群集启动
- 启动命令汇总说明
- Hadoop 3 端口号的改变
- Hadoop 3 新特征
官方镜像下载地址: Centos,hadoop,Java
Centos为CentOS-7-x86_64-DVD-2009
Hadoop为hadoop-3.3.0.tar.gz
Java为jdk-8u301-linux-x64.tar.gz
PS:Hadoop3.X Java最低版本为1.8
纯原生态安装,非CDH和HDP,或是Ambari
修改 /etc/sysconfig/network中的hostname
vi /etc/sysconfig/network中的hostname
修改/etc/hosts文件
vi /etc/hosts
vi /etc/hosts # 这里我除了修改127.0.0.1里的localhost.localdomain,还把其它服务器的ip和对应名称添加进来 127.0.0.1 localhost hadoop1 localhost4 localhost4.localdomain4 ::1 localhost hadoop1 localhost6 localhost6.localdomain6 192.168.100.10 hadoop1 192.168.100.20 hadoop2 192.168.100.30 hadoop3
关闭防火墙重启服务器
# 关闭 systemctl stop firewalld # 禁止开机自启 systemctl disable firewalld创建hadoop用户
# 创建用户并使用 /bin/bash 作为shell $ useradd -m hadoop -s /bin/bash # 给hadoop用户设置密码,若提示密码无效,不用管,接着输入一次即可 $ passwd hadoop # 给hadoop增加执行权限 $ visudo #98行 输入 :98 跳转至98行,增加一行 hadoop ALL=(ALL) ALL $ root ALL=(ALL) ALL $ hadoop ALL=(ALL) ALLSSH安装免密登陆 单机免密登陆——linux配置ssh免密登录
检查是否安装SSH
systemctl status sshd
已安装会显示ssh服务的状态(actving),否则,执行下面命令安装
# -y表示全部同意,不用每次都按y yum install openssh-clients -y yum install openssh-server -y
测试是否可用
#按提示确认连接后,输入当前用户密码即可,初始没有密码会提示创建密码 ssh localhost
设置无密码登录
#~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/” cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车就可以 cat id_rsa.pub >> authorized_keys # 加入授权 chmod 600 ./authorized_keys # 修改文件权限
此时再用 ssh localhost 命令,无需输入密码就可登陆
linux环境配置Java变量查找当前是否有java安装目录
如果有则卸除自带的Java环境
[root@localhost ~]# java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode) [root@localhost ~]# which java /usr/bin/java [root@localhost ~]# ls -lrt /usr/bin/java lrwxrwxrwx. 1 root root 22 Aug 6 2020 /usr/bin/java -> /etc/alternatives/java [root@localhost ~]# ls -lrt /etc/alternatives/java lrwxrwxrwx. 1 root root 73 Aug 6 2020 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java
额外知识
安装目录在 /usr/lib/jvm
1.通过rpm等方式安装的jdk,我们在 profile 文件里是没有看到环境变量配置的。我们调用java命令时可以正常执行,是他们是严格安装linux对环境变量的路径要求进行安装,并将相关命令链接到 /usr/bin 目录下,当我们在任意位置执行时,系统都会到 /usr/bin 下来执行。
/usr/bin 可执行的命令安装目录 /usr/lib 程序所使用的库函数保存位置 /usr/share/doc 基本的软件使用手册保存位置 /usr/share/man 帮助文件保存位置
使用 yum install java-1.8.0-openjdkl.x86_64 默认是只有jre的,jps,jstat等命令是不存在的,这个时候还需要安装开发包,找到后缀是devel的,执行 yum install java-1.8.0-openjdk-devel.x86_64 即可。
再加个 卸载java
rpm -qa | grep jdk # 会出来一个类似下面这个的 copy-jdk-configs-3.3-10.el7_5.noarch # 执行卸载 yum -y remove copy-jdk-configs-3.3-10.el7_5.noarch
如果没有Java环境,则
配置Java环境变量一种是全局,修改 /etc/profile 文件,
一种是当前角色,修改 ~/.bash_profile 文件。
在文件中增加下面内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_301 export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存退出后,执行 source /etc/profile(如果是当前角色,刷新对应的bash_profile) 刷新环境变量
安装Hadoop-3.3.0.tar.gz上传至服务器,或者从服务器中下载
找个目录解压,比如/opt下
# -C 是指定解压目录 tar -zxvf hadoop-3.3.0.tar.gz -C /opt
解压完检查hadoop是否可用
#切换到hadoop的安装目录执行, 成功则显示版本信息 $ cd /opt/hadoop-3.3.0 $ ./bin/hadoop version
这里我们可以将hadoop也加入环境变量,就不需要每次到bin目录下执行
# 编辑profile文件 vi /etc/profile # 增加hadoop环境变量 export HADOOP_HOME=/opt/hadoop-3.3.0 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin # 保存后刷新下环境变量 source /etc/profile运行 单机非分布式
主要用来调试时使用。
Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
这里 我们试验的是 grep .
$ mkdir ./input $ cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件 $ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' $ cat ./output/*伪分布式 1.修改配置文件
Hadoop 的配置文件位于 安装目录下 /etc/hadoop/ 中
[root@hadoop1 hadoop]# pwd /opt/hadoop-3.3.0/etc/hadoop
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml
#修改配置文件hadoop-env.sh # set to the root of your Java installation export JAVA_HOME=/usr/local/java/jdk1.8.0_301 #修改配置文件 core-site.xml2.格式化NameNode#修改配置文件 hdfs-site.xml, #搭建集群后,hadoop本身自带了一个webUI访问页面 hadoop.tmp.dir /opt/data/hadoop/tmp fs.defaultFS hdfs://hadoop2:9000 dfs.replication 1
./bin/hdfs namenode -format3.开启 NaneNode 和 DataNode 进程
./sbin/start-dfs.sh #启动完成后,可以通过命令 jps 来判断是否成功启动 [hadoop@localhost hadoop-3.3.0]$ jps 32081 NameNode 32561 Jps 32234 DataNode #停止 ./sbin/stop-dfs.sh
如果出现
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解决方法:
方法一、
在Hadoop安装目录下找到sbin文件夹
在里面修改四个文件1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数: #!/usr/bin/env bash HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root2、对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
#!/usr/bin/env bash YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root然后重新启动
建议第二种(推荐,实用)cd /opt/hadoop-3.3.0/etc/hadoop vim /hadoop-env.sh export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
日志文件输出在 安装目录下的logs文件夹中。
可以访问web页面,前面配置过的 http://localhost:9870/
- 在HDFS系统上创建一个input文件夹
./bin/hdfs dfs -mkdir -p /user/test/input
- 将测试文件内容上传到文件系统上
./bin/hdfs dfs -put input/core-site.xml /user/test/input/
- 查看上传的文件是否正确
./bin/hdfs dfs -ls /user/test/input/ ./bin/hdfs dfs -cat /user/test/input/core-site.xml
- 运行mapReduce程序
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/test/input/core-site.xml /user/test/output/ ./bin/hdfs dfs -cat /user/test/output/*
在浏览器中查看:
5. 启动yarn(伪分布式也可以不启动)上述通过 ./sbin/start-dfs.sh 启动 Hadoop,是启动 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
- 修改配置文件 mapred-site.xml:
#修改内容如下mapreduce.framework.name yarn mapreduce.application.classpath $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*
- 修改配置文件 yarn-site.xml:
yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
PS:这里不需要配置resourceManagerName.hostname。
3. 启动 YARN
启动前必须保证NameNode和DataNode已经启动:
# 启动YARN ./sbin/start-yarn.sh # 停止 ./sbin/stop-yarn.sh
这里可以访问 ResourceManager - http://localhost:8088/
4. 开启历史服务器
在Web中查看任务运行情况 - http://localhost:19888/
mapred --daemon start historyserver
关闭
./sbin/stop-all.sh # 历史进程要单独关闭 mapred --daemon stop historyserver6.运行测试实例
$ bin/hdfs dfs -mkdir /user $ bin/hdfs dfs -mkdir /user/input # 将配置文件作为输入文件 $ bin/hdfs dfs -put etc/hadoop/*.xml /user/input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/input/core-site.xml /user/output/ $ bin/hdfs dfs -cat /user/output/* # Hadoop 运行程序时,输出目录不能存在 $ bin/hdfs dfs -rm -r /user/output7. 配置日志保存在HDFS
应用运行完成以后,将程序运行日志信息上传到HDFS系统上,方便的查看到程序运行详情,方便开发调试。
修改配置文件 yarn-site.xml
yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 604800
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
重新执行上面的wordcount,然后在JobHistory里面可以找到相应的日志。
http:localhost:8088
准备好三台服务器,按照前面的前置操作(注意SSH免密要配置好),下载安装的步骤准备好。(如果是Vmware则关机克隆)
注意!!!三台均要配置SSH免密
此处使用ssh-copy-id命令,可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.20 [root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.30 #另外同理
Linux手册——ssh-copy-id
规划| hadoop1 | hadoop2 | hadoop3 | |
|---|---|---|---|
| HDFS | NameNode | SecondaryNameNode | |
| DataNode | DataNode | DataNode | |
| YARN | ResourceManager | ||
| NodeManager | NodeManager | NodeManager |
[root@192.168.100.10 ~] hostnamectl set-hostname hadoop1 [root@192.168.100.20 ~] hostnamectl set-hostname hadoop2 [root@192.168.100.30 ~] hostnamectl set-hostname hadoop3
修改配置文件如果在SecureCRT中,可以用Ctrl+D重新登陆就可显示为hadoop主机名
- hadoop-env.sh
# 指定jdk路径 export JAVA_HOME=/usr/local/java/jdk1.8.0_301
- core-site.xml
fs.defaultFS
hdfs://hadoop1:9000
hadoop.tmp.dir
/opt/data/hadoop/tmp
- hdfs-site.xml
dfs.replication
3
dfs.namenode.secondary.http-address
hadoop3:9868
- yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop2
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
604800
- mapred-site.xml
mapreduce.framework.name
yarn
单点启动
先格式化NameNode,在hadoop1上执行
注意,尽量少格式化NameNode
按规划启动对应服务
# hadoop1 bin/hdfs --daemon start namenode bin/hdfs --daemon start datanode bin/yarn --daemon start nodemanager
如果dataNode节点未启动成功或者是启动自动宕掉
一、清理hadoop数据temp文件
二、重新把初次得namenode clusterID
通过日志查看,得到/var/data/hadoop/dfs/data/current
# hadoop2 bin/hdfs --daemon start datanode bin/yarn --daemon start resourcemanager bin/yarn --daemon start nodemanager
# hadoop3 bin/hdfs --daemon start datanode bin/hdfs --daemon start secondarynamenode bin/yarn --daemon start nodemanager
这里要把/etc/hosts里面的127.0.01的映射注释掉,在没有注释掉的时候启动时节点之间不能连接。
群集启动直接在NameNode节点执行 sbin/start-dfs.sh
# hadoop1 sbin/start-dfs.sh # hadoop2,hadoop3 这里单独去启动了dataNode bin/hdfs --daemon start datanode # hadoop2 sbin/start-yarn.sh # hadoop1,hadoop3 bin/yarn --daemon start nodemanager启动命令汇总说明
sbin/start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager sbin/stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager sbin/start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode sbin/stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode sbin/start-yarn.sh 启动ResourceManager、NodeManager sbin/stop-yarn.sh 停止ResourceManager、NodeManager # 单独启动/停止的 bin/hdfs --daemon start namenode bin/hdfs --daemon start datanode bin/hdfs --daemon start secondarynamenode bin/yarn --daemon start resourcemanager bin/yarn --daemon start nodemanager mapred --daemon start historyserver mapred --daemon stop historyserver -------------------------------------------------------------------------- # 旧版本的命令 sbin/hadoop-daemons.sh start namenode 单独启动NameNode守护进程 sbin/hadoop-daemons.sh stop namenode 单独停止NameNode守护进程 sbin/hadoop-daemons.sh start datanode 单独启动DataNode守护进程 sbin/hadoop-daemons.sh stop datanode 单独停止DataNode守护进程 sbin/hadoop-daemons.sh start secondarynamenode 单独启动SecondaryNameNode守护进程 sbin/hadoop-daemons.sh stop secondarynamenode 单独停止SecondaryNameNode守护进程 sbin/yarn-daemon.sh start resourcemanager 单独启动ResourceManager sbin/yarn-daemons.sh start nodemanager 单独启动NodeManager sbin/yarn-daemon.sh stop resourcemanager 单独停止ResourceManager sbin/yarn-daemons.sh stopnodemanager 单独停止NodeManager sbin/mr-jobhistory-daemon.sh start historyserver 手动启动jobhistory sbin/mr-jobhistory-daemon.sh stop historyserver 手动停止jobhistory
Hadoop 3 端口号的改变云服务器
虚拟机和配置网卡 建议使用NAT模式
| 分类 | 应用 | Haddop 2.x port | Haddop 3 port |
|---|---|---|---|
| NNPorts | Namenode | 8020 | 9820 |
| NNPorts | NN HTTP UI | 50070 | 9870 |
| NNPorts | NN HTTPS UI | 50470 | 9871 |
| SNN ports | SNN HTTP | 50091 | 9869 |
| SNN ports | SNN HTTP UI | 50090 | 9868 |
| DN ports | DN IPC | 50020 | 9867 |
| DN ports | DN | 50010 | 9866 |
| DN ports | DN HTTP UI | 50075 | 9864 |
| DN ports | Namenode | 50475 | 9865 |
- 基于JDK1.8(最低版本要求)
- 剔除过期的API和实现,废弃hftp转为webhfs替代
- Classpath isolation:新增的防止不同版本 jar 包冲突
- Shell重写 (修复了Hadoop2脚本的bug,启动时的脚本命令也有不同,建议运行Hadoop3的脚本,大概有三分之一的地方不一样)
- 支持HDFS的擦除编码 Erasure Encoding:默认EC策略可以节省50%的存储空间,同时还可以承受更多的存储故障(还在Haddoop2的基础上增加恢复功能)
- DataNode 内部添加了负载均衡 Disk Balancer,磁盘之间的负载均衡(假定有3台服务器的磁盘都满了数据,数据存储在DataNode当中,可以在买一块磁盘插入,但其他磁盘还是满的,新磁盘是空的,这就产生了数据倾斜,所以Hadoop3提供了 Disk Balancer 磁盘平衡器自动帮我们将满磁盘分配到其他磁盘当中)
- MapReduce任务级本地优化
- MapReduce内存参数自动推断
- mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts (在Hadoop2中是需要配置这两项,但在3中就会根据任务执行级别自动推断所需要的内存,所以3比2要快)
- 基于 cgroup 的内存隔离和 IO Disk 隔离
- 支持更改分配容器的资源 Container resizing
参考:https://blog.csdn.net/qq_35975685/article/details/84311627
https://blog.csdn.net/qq_35975685/article/details/84311627



