软件下载:https://hadoop.apache.org/releases.html
建议是下载源码包。
源码包和官方编译安装包有什么不一样呢?
正常情况下,非生产环境直接使用官方编译安装包即可,但是官方提供的安装包不支持本地库。
为什么要源码包?
第一,里面有一些写的不好,我可以修改源码,这个略过。第二,软件运行需要操作系统支持,操作系统之间存在差异。Linux有很多发行版,那么之间本地库环境存在差异。Hadoop某些操作需要本地库支持,例如数据压缩,读写IO流操作。所以为了让hadoop更加稳定适应你的平台最好的是下载源码重新编译。
如何编译?
再源码包根目录下,有BUILDING.txt文件,描述了你需要做哪些动作。
1、安装编译相关的依赖
yum install gcc gcc-c++ make autoconf automake libtool curl lzo-devel zlib-devel openssl openssl-devel ncurses-devel snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst zlib -y
yum install -y doxygen cyrus-sasl* saslwrapper-devel*
2、手动安装cmake
#yum卸载已安装cmake 版本低
yum erase cmake
#解压
tar zxvf CMake-3.19.4.tar.gz
#编译安装 根据自己安装情况进入路径
cd /export/server/CMake-3.19.4
./configure
make && make install
#验证
[root@node4 ~]# cmake -version
cmake version 3.19.4
#如果没有正确显示版本 请断开SSH连接 重写登录
3、手动安装snappy
#卸载已经安装的
rm -rf /usr/local/lib/libsnappy*
rm -rf /lib64/libsnappy*
#上传解压
tar zxvf snappy-1.1.3.tar.gz
#编译安装 根据自己安装情况进入路径
cd /export/server/snappy-1.1.3
./configure
make && make install
#验证是否安装
[root@node4 snappy-1.1.3]# ls -lh /usr/local/lib |grep snappy
-rw-r--r-- 1 root root 511K Nov 4 17:13 libsnappy.a
-rwxr-xr-x 1 root root 955 Nov 4 17:13 libsnappy.la
lrwxrwxrwx 1 root root 18 Nov 4 17:13 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx 1 root root 18 Nov 4 17:13 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x 1 root root 253K Nov 4 17:13 libsnappy.so.1.3.0
4、安装配置JDK 1.8
#解压安装包
tar zxvf jdk-8u65-linux-x64.tar.gz
#配置环境变量 根据自己安装情况设置JAVA_HOME路径
vim /etc/profile
export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
#验证是否安装成功
java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
5、安装配置maven
#解压安装包
tar zxvf apache-maven-3.5.4-bin.tar.gz
#配置环境变量
vim /etc/profile
export MAVEN_HOME=/export/server/apache-maven-3.5.4
export MAVEN_OPTS="-Xms4096m -Xmx4096m" # 这个大小根据自己实际情况修改
export PATH=:$MAVEN_HOME/bin:$PATH
source /etc/profile
#验证是否安装成功
[root@node4 ~]# mvn -v
Apache Maven 3.5.4
#添加maven 阿里云仓库地址 加快国内编译速度,路径地址根据自己安装情况
vim /export/server/apache-maven-3.5.4/conf/settings.xml
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
6、安装ProtocolBuffer 3.7.1
#卸载之前版本的protobuf
#解压
tar zxvf protobuf-3.7.1.tar.gz
#编译安装
cd /export/server/protobuf-3.7.1
./autogen.sh
./configure
make && make install
#验证是否安装成功
[root@node4 protobuf-3.7.1]# protoc --version
libprotoc 3.7.1
7、编译hadoop
#上传解压源码包
tar zxvf hadoop-3.3.0-src.tar.gz
#编译
cd /root/hadoop-3.3.0-src
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib
#参数说明:
Pdist,native :把重新编译生成的hadoop动态库;
DskipTests :跳过测试
Dtar :最后把文件以tar打包
Dbundle.snappy :添加snappy压缩支持【默认官网下载的是不支持的】
Dsnappy.lib=/usr/local/lib :指snappy在编译机器上安装后的库路径
编译之后的安装包路径,在你安装目录下有一个hadoop-dist目录。
....../hadoop-3.3.0-src/hadoop-dist/target
在打包过程中,第60个模块遇到问题,到github上下载tar包失败,就自己取下载一下放到报错的目录里面,再重新执行maven命令就好了。
cmkae 3.24.3
jdk 1.8
maven 3.8.6
protobuf 3.21.10
snappy 1.1.13
hadoop 3.3.4
基础环境
# 主机名
vim /etc/hostname
# hosts映射
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 以后就不用输入ip,node2 就代表192.168.93.128,后面配置文件中的节点名称和这儿保持一致
192.168.93.128 node2 hadoop02
192.168.93.129 node1 hadoop01
192.168.93.130 node3 hadoop03
# 集群时间同步
ntpdate ntp5.aliyun.com
# 防火墙关闭
firewall-cmd --state #查看防火墙状态
systemctl stop firewalld.service #停止firewalld服务
systemctl disable firewalld.service #开机禁用firewalld服务
# ssh免密登录(只需要配置node1至node1、node2、node3即可)
#node1生成公钥私钥 (一路回车)
ssh-keygen
#node1配置免密登录到node1 node2 node3 节点名称和你上面设置的保持一致
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
前面是使用源码编译Hadoop,现在将编译之后的文件进行安装。
配置文件概述:
主机 | 角色 |
---|---|
node1 | NN DN RM NM |
node2 | SNN DN NM |
node3 | DN NM |
HDFS 主角色:NameNode 从角色:DataNode 主角色辅助角色:SecondaryNameNode
YARN 主角色:ResourceManager 从角色:NodeManager
所有配置文件都在 etc目录下
1、hadoop-env.sh
告诉hadoop,java在哪儿,指定各个进程的用户名
#文件最后添加 根据自己情况更改路劲
export JAVA_HOME=/export/server/jdk1.8.0_241
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
2、core-site.xml
xxx-site.xml 表示用户定义的配置,会覆盖default中的默认配置
core-site.xml 核心配置模块
hafs-site.xml hdfs文件系统配置模块
mapred-site.xml MapReduce模块配置
yarn-site.xml yarn模块配置
fs.defaultFS
hdfs://node1:8020
hadoop.tmp.dir
/export/data/hadoop-3.3.0
hadoop.http.staticuser.user
root
hadoop.proxyuser.root.hosts
*
hadoop.proxyuser.root.groups
*
fs.trash.interval
1440
3、hdfs-site.xml
dfs.namenode.secondary.http-address
node2:9868
4、mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
node1:10020
mapreduce.jobhistory.webapp.address
node1:19888
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=${HADOOP_HOME}
mapreduce.map.env
HADOOP_MAPRED_HOME=${HADOOP_HOME}
mapreduce.reduce.env
HADOOP_MAPRED_HOME=${HADOOP_HOME}
5、yarn-site.xml
yarn.resourcemanager.hostname
node1
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
yarn.log-aggregation-enable
true
yarn.log.server.url
http://node1:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
6、workers 文件
将自己设置的节点设置进去,
hadoop01
hadoop02
hadoop03
上面所有操作,三台虚拟机都保持一致。
7、将hadoop添加到环境变量(3台机器)
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
/soft/hadoop/hadoop-3.3.4-src/hadoop-dist/target/hadoop-3.3.4
source /etc/profile
#别忘了scp给其他两台机器哦
最后测试,输入 hadoop,三台虚拟机都成功
以上成功之后,首次启动HDFS时,必须对其进行格式化操作,格式化操作本质上是初始化工作,进行HDFS清理和准备工作。
因为首次启动之前,我们得文件系统HDFS在物理层面上并不存在,它得一些状态和数据都没有,因此我们需要对它做一个format操作。
这个初始化动作只能执行一次,在首次搭建首次启动之前执行。千万不能执行多次,执行多次相当于又初始化了,会导致数据丢失。另外还会导致集群角色之间互相不认识。只能配置文件删除,数据目录删除,重新格式化。
一下命令在集群主角色上执行即可。
命令: hdfs namenode -format
出现一下信息即format成功,这个路径对应上面core-site.xml文件中你自己设置得路径
里面会生成一些元数据相关得文件。
上面操作之后我们就可以启动集群了
方式一:手动逐个进程启停
每台机器上每次手动启动关闭一个角色进程,可以精准控制每个进程启停,避免群起群停
HDFS集群:
# hadoop 3.x 版本命令
hdfs --daemon start|stop namenode|datanode|secondarynamenode
YARN集群:
# hadoop 3.x版本命令
yarn --daemon start|stop resourcemanager|nodemanager
方式二:shell脚本一键启停
在node1上,使用软件自带得shell脚本一键启停。脚本是官方提供好了得
前提:配置号机器之间得SSH免密登录和works文件
HDFS集群:
start-dfs.sh
stop-dfs.sh
YARN集群:
start-yarn.sh
stop-yarn.sh
Hadoop集群:(控制上面两个集群)
start-all.sh
stop-all.sh
启动成功:并查看进程
node1
node2
node3
查看进程我们可以知道全部进程启动成功。
另外就是Hadoop启动日志,在你安装包目录下得log日志可以查看。
我的是编译源码过来得,所以我的日志目录在…/hadoop-3.3.0-src/hadoop-dist/target/hadoop-3.3.4/logs
官方针对这两个集群,提供了两个web页面让我们进行查看
HDFS集群:
http://namenode_host:9870
namenode_host是namenode运行所在得机器名或者ip,如果使用主机名访问,别忘了在windows配置hosts文件
可以通过这儿查看文件系统
YARN集群:
http://resourcenamager_host:8088
resourcenamager_host是resourcemanager运行所在机器得主机名或者ip
这里会显示当前集群当中有哪些程序正在执行,不仅仅包括MapReduce ,还有Spark Flink都会显示在这里
# 在任何一个节点上
hadoop fs -ls / # 查看 指定路径(/ 根路径)
hadoop fs -mkdir /文件夹路径 # 在hadoop中创建文件夹
hadoop fs -put 文件名 /文件夹 # 上传指定文件到指定文件夹目录