Hadoop学习----源码编译,集群搭建

Hadoop源码下载重新编译

软件下载: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,现在将编译之后的文件进行安装。
在这里插入图片描述
配置文件概述:

  • 集群规划
主机角色
node1NN DN RM NM
node2SNN DN NM
node3DN 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模块配置

<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
</property>

<!-- 设置Hadoop本地保存数据路径 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop-3.3.0</value>
</property>

<!-- 设置HDFS web UI用户身份 -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

<!-- 整合hive 用户代理设置 -->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

<!-- 文件系统垃圾桶保存时间 -->
<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

3、hdfs-site.xml

<!-- 设置SNN进程运行机器位置信息 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2:9868</value>
</property>

4、mapred-site.xml

<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

<!-- MR程序历史服务地址 注意自己节点名称 -->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>node1:10020</value>
</property>
 
<!-- MR程序历史服务器web端地址 -->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>node1:19888</value>
</property>

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

5、yarn-site.xml

<!-- 设置YARN集群主角色运行机器位置 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>node1</value>
</property>

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 是否将对容器实施物理内存限制 真实环境中去掉 因为学习环境是虚拟机 -->
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 是否将对容器实施虚拟内存限制。 真实环境中去掉 因为学习环境是虚拟机 -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 开启日志聚集 -->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!-- 设置yarn历史服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
</property>

<!-- 历史日志保存的时间 7天 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>

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都会显示在这里

文件上传
shell命令
# 在任何一个节点上
hadoop fs -ls /     # 查看 指定路径(/  根路径)
hadoop fs -mkdir /文件夹路径    # 在hadoop中创建文件夹
hadoop fs -put 文件名  /文件夹   # 上传指定文件到指定文件夹目录

在这里插入图片描述
在这里插入图片描述

Web UI页面操作

在这里插入图片描述
HDFS本质上就是一个文件系统
有目录结构,和Linux类似,分文件、文件夹

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值