IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 快速搭建一个hadoop集群 -> 正文阅读

[大数据]快速搭建一个hadoop集群


快速搭建一个hadoop集群

本文不讲原理,只记录一下快速搭建hadoop集群的过程。参考:https://www.bilibili.com/video/BV1Qp4y1n7EN

系统:CentOS7.7

hadoop版本:3.3.2

jdk版本:1.8.0_321

一、准备虚拟机

1、安装三台虚拟机,安装过程可参考 超详细的CentOS7.4下载与图文安装_运维_浅末年华的博客

2、安装完毕后,修改三台虚拟机的hostname分别为hadoop-node1hadoop-node2hadoop-node3,并在三台虚拟机的hosts中将其他虚拟机的ip加进去,原先的localhost可以删除,保留也不影响。修改后结果如下

[root@hadoop-node1 ~]# cat /etc/hostname
hadoop-node1
[root@hadoop-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.133.21 hadoop-node1
192.168.133.22 hadoop-node2
192.168.133.23 hadoop-node3

二、配置ssh免密登录

1、在三台机器上分别执行下面的命令来生成密钥对

# 如果文件夹不存在,则手动创建一下 mkdir ~/.ssh
cd ~/.ssh

# 输入下面的命令,连续敲三次回车,生成秘钥
ssh-keygen -t rsa

2、分别在三台机器上个执行下面的命令,将公钥复制到需要免登录的目标机器上,这一步需要输目标机器的密码

ssh-copy-id hadoop-node1
ssh-copy-id hadoop-node2
ssh-copy-id hadoop-node3

3、执行完成后就可以测试免密登录是否OK了

# 测试免密登录到node2
ssh hadoop-node2

三、编写文件同步脚本

1、编写同步脚本

cd ~
vim xsync

将下面的内容完整粘贴进去,根据对应机器的host进行修改

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hadoop-node1 hadoop-node2 hadoop-node3
do
    echo ------ 正在同步文件,目标主机:$host
    #3. 遍历所有目录,挨个发送

    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

2、修改文件权限

chmod +x xsync

3、将文件移动到/bin目录下

mv ~/xsync /bin/

4、将脚本同步到其他机器上

xsync /bin/xsync

四、安装jdk和hadoop

1、卸载openjdk

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

2、到官网下载jdk和hadoop的tar包,下载完成后上传到所有服务器上,路径为/opt/software,同时创建再创建一个目录用于存放解压后的应用

mkdir -p /opt/software /opt/module

3、解压jdk和hadoop

tar -zxvf jdk-8u321-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.3.2.tar.gz -C /opt/module/

4、配置环境变量

新建并编辑文件,文件名无所谓,只要是sh就行,至于为啥会这样,可以查看/etc/profile文件最后的那个for循环就可以知道了

vim /etc/profile.d/my_env.sh

将下面内容添加到文件中

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_321
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

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

上面的环境变量中,最后的5行,如果不是使用root用户启动,不用加,估计官方也不建议使用root用户启动吧。毕竟是自己搭建了玩的,所以就简单粗暴,直接使用root用户。

上述的环境变量配置好了之后,需要执行一下source命令来让环境变量生效(所有虚拟机上都需要执行)

source /etc/profile

上面的操作中,前三步由于文件较大,所以不建议使用xsync脚本进行同步,还是挨个上传手动解压。至于第四步,则可以通过xsync脚本将my_env.sh同步到所有主机,然后在所有虚拟机上挨个执行source命令即可。

五、hadoop集群配置

1、考虑到资源的合理运用,所以三台虚拟机的应用部署如下

hadoop-node1hadoop-node2hadoop-node3
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YARNNodeManagerResourceManager
NodeManager
NodeManager

2、修改配置文件

下面的命令都是在hadoop安装目录下执行,即/opt/module/hadoop-3.3.2目录,修改的时候仅需要修改其中一台机器上的就行,修改完成后,直接通过xsync同步到其他所有节点上

(1)core-site.xml

vim etc/hadoop/core-site.xml

将下面的内容完整复制到configuration标签内

<!-- 指定NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop-node1:8020</value>
</property>

<!-- 指定hadoop数据的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-3.3.2/data</value>
</property>

<!-- 配置用户为root -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

(2)hdfs-site.xml

vim etc/hadoop/hdfs-site.xml

将下面的内容完整复制到configuration标签内

<!-- nn web端访问地址-->
<property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop-node1:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop-node3:9868</value>
</property>

(3)yarn-site.xml

vim etc/hadoop/yarn-site.xml

将下面的内容完整复制到configuration标签内

<!-- 指定MR走shuffle -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定ResourceManager的地址-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-node2</value>
</property>

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop-node1:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

(4)mapred-site.xml

vim etc/hadoop/mapred-site.xml

将下面的内容完整复制到configuration标签内

<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.2</value>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.2</value>
</property>
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.2</value>
</property>

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop-node1:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop-node1:19888</value>
</property>

(5)workers

vim etc/hadoop/workers

将所有的工作节点配置到里面,里面最初是有一个localhost,要去掉,需要注意的是,前后不能有空格,也不能有空行,文件内容如下

hadoop-node1
hadoop-node2
hadoop-node3

最后将上述修改的配置文件同步到所有机器

xsync etc/hadoop

六、启动集群

下面的命令若无特殊说明,都默认是在hadoop安装目录执行

1、初始化NameNode,在hadoop-node1上执行

hdfs namenode -format

2、启动hdfs,在hadoop-node1上执行

sbin/start-dfs.sh

3、启动yarn,注意,这一步是在hadoop-node2上执行

sbin/start-yarn.sh

4、启动历史服务器,又回到hadoop-node1上执行

mapred --daemon start historyserver

5、执行完上述的命令之后,应用的启动情况如下

[root@hadoop-node1 hadoop-3.3.2]# jps
6241 Jps
4050 NodeManager
4198 JobHistoryServer
3545 NameNode
3724 DataNode


[root@hadoop-node2 hadoop-3.3.2]# jps
3184 DataNode
3553 NodeManager
59767 Jps
3401 ResourceManager


[root@hadoop-node3 hadoop-3.3.2]# jps
3203 DataNode
3315 SecondaryNameNode
4964 Jps
3420 NodeManager

一切ok,打开浏览器依次查看下面的页面是否正常

(1)NameNode页面:http://hadoop-node1:9870

(2)SecondaryNameNode页面:http://hadoop-node3:9868

(3)ResourceManager页面:http://hadoop-node2:8088

(4)JobHistoryServer页面:http://hadoop-node1:19888

6、如果要关闭集群,则步骤与启动集群时刚好相反,其中的start换为stop

# node1
mapred --daemon stop historyserver

# node2
sbin/stop-yarn.sh

# node1
sbin/stop-dfs.sh
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:00:40  更:2022-05-14 10:02:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 6:52:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码