hadoop 3.2 集群搭建

hadoop 集群 3.2 搭建过程其实很简单。

选择自己想要的版本,我第一次搭建用的是2.7.5,虽然也搭建出来了,但是在web管理页面没有看到文件管理的相关按钮:

自我感觉不完美,后来看同事的集群,页面访问是有相关按钮的:

所以仔细对比了下配置文件,并未发现有什么异同,唯一不同的是版本不同,他用的是3.0版本,而我是2.7.5,索性重新装一个高版本的试下,下面是过程:

我的集群是三台机器:

hostnameip主节点namenode从节点datanode
CentOS121192.168.18.121truetrue
CentOS122192.168.18.122falsetrue
CentOS123192.168.18.123falsetrue

(基础知识不再科普,有需要自行查阅资料)

首先声明:我并不会关闭防火墙,防火墙的存在是为了保护系统,我觉得开着还是有必要的。

准备工作(三台机器都需要做):

  • 防火墙:大多数的教程都是先关闭防火墙,其实不关闭也是可以实现的,新建一个防火墙富规则即可,使三台机器相互信任。
    在CentOS121上需要如此配置,信任另外两台机器(另外两台同理):
    
    firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.18.122/24 accept'
    
    firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.18.123/24 accept'
    
    
    如此可实现内部通信畅通,无需再关闭防火墙。   

                                                                                                                        

  • hostname(修改后需重启机器):

    vim /etc/hostname

  • ssh免密登录:参见我另一篇博客:https://blog.csdn.net/qq_39314099/article/details/103503870

  • 开放namenode网页web访问端口:9870(2.7.5版本是50070)
firewall-cmd --zone=public --add-port=9870/tcp --permanent

firewall-cmd --reload
  • 另外,java环境需要提前配好。

将下载后的压缩包上传到linux中,或者用wget直接下载也可。

然后解压,我的目录是/usr/local/software/hadoop。

然后配置环境变量,关于环境变量我认为放在/etc/profile.d/下是比较合适的,新建一个自己的sh脚本文件:

然后使配置文件生效,

source /etc/profile

如果此处操作成功,可以查看hadoop版本:

hadoop version

  • 首先在hadoop安装目录下建立几个文件夹:
假设当前在hadoop安装目录下:

mkdir tmp 用来存储临时文件

mkdir -p hdfs/name 作为namenode的数据目录

mkdir hdfs/data 作为datanode的数据目录

最终的结构是这样的:

  • 接下来配置核心的几个配置文件:
core-site.xml:核心配置文件。
hdfs-site.xml:hdfs存储相关配置。
mapred-site.xml:MapReduce相关的配置。
yarn-site.xml:和yarn相关的一些配置。
workers(2.7.5 版本叫 slaves):用来指定从节点,文件中默认是localhost。
hadoop-env.sh:配置hadoop相关变量(3.2需要配置java_home和user,2.7.5只需要配置java_home)。

进入hadoop安装目录下,进入hadoop目录下的etc/hadoop目录,这五个文件都存放于这个目录下。

  1. core-site.xml:核心配置文件中指定默认文件系统和临时文件目录。
     <configuration>
         <property>
             <name>fs.defaultFS</name>
             <value>hdfs://CentOS121:9000</value>
         </property>
         <property>
             <name>hadoop.tmp.dir</name>
             <value>/usr/local/software/hadoop/tmp</value>
         </property>
     </configuration>

     

  2. hdfs-site.xml:关于hdfs存储系统相关配置。
    <configuration>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>CentOS121:50090</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/software/hadoop/hdfs/name</value>
            <final>true</final>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/software/hadoop/hdfs/data</value>
            <final>true</final>
        </property>
        <property>
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
        </property>
        <property>
            <name>dfs.permissions.enabled</name>
            <value>false</value>
        </property>
    </configuration>
    

  3. mapred-site.xml:MapReduce的相关配置项。

    <configuration>
    
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>CentOS121:10020</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>CentOS121:19888</value>
        </property>
        <property>
            <name>mapreduce.application.classpath</name>
            <value>
                /usr/local/software/hadoop/etc/hadoop,
                /usr/local/software/hadoop/share/hadoop/common/*,
                /usr/local/software/hadoop/share/hadoop/common/lib/*,
                /usr/local/software/hadoop/share/hadoop/hdfs/*,
                /usr/local/software/hadoop/share/hadoop/hdfs/lib/*,
                /usr/local/software/hadoop/share/hadoop/mapreduce/*,
                /usr/local/software/hadoop/share/hadoop/mapreduce/lib/*,
                /usr/local/software/hadoop/share/hadoop/yarn/*,
                /usr/local/software/hadoop/share/hadoop/yarn/lib/*
            </value>
        </property>
    </configuration>
    

  4. yarn-site.xml:yarn相关配置。

    <configuration>
    
    <!-- Site specific YARN configuration properties -->
    
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.resourcemanager.address</name>
            <value>CentOS121:8032</value>
        </property>
        <property>
            <name>yarn.resourcemanager.scheduler.address</name>
            <value>CentOS121:8030</value>
        </property>
        <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
        </property>
        <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
            <value>CentOS121:8031</value>
        </property>
        <property>
            <name>yarn.resourcemanager.admin.address</name>
            <value>CentOS121:8033</value>
        </property>
        <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>CentOS121:8088</value>
        </property>
    </configuration>
    

  5. workers(2.7.5版本为slaves):用以指定datanode从节点。

    CentOS121
    CentOS122
    CentOS123

  6. hadoop-env.sh:(3.2需要配置,2.7.5只需要配置java_home)

    # java_home若已配过,这里可以直接引用,否则应配置完整jdk路径
    export JAVA_HOME=${JAVA_HOME}
    # 安装用的是root用户,所以这里都设置为root
    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

配置完成,然后将整个hadoop文件夹分发到另外两个机器上,用scp命令即可:

scp -r hadoop/ CentOS122:/usr/local/software/

scp -r hadoop/ CentOS123:/usr/local/software/

然后将环境变量等配置好
  • 接下来格式化namenode:
    hdfs namenode -format

    这个操作需要在主节点进行。成功的话会看到成功格式化的日志:

  • 启动hadoop,可以单独启动,也可以用hadoop提供的脚本一次性都启动:

    hadoop/sbin/start-all.sh

    启动成功的话可以看到如下日志,分别用 jps 命令查看三个机器:

  • 验证:访问页面。访问namenode主节点端口为9870,

  • 访问yarn管理界面:这里也可以看到三个节点成功起来了。


接下来看看hdfs文件系统,并用python连接。

简单的一个写入csv文件,并读取的过程:

# -*- coding: utf-8 -*-
import pandas as pd
import hdfs
_author_ = 'luwt'
_date_ = '2019/12/18 18:20'


hdfs_user = 'root'
hdfs_addr = 'http://192.168.18.121:9870'
client = hdfs.InsecureClient(hdfs_addr, user=hdfs_user)
df = pd.read_csv("D:\\Data.csv")
print(df)
hdfs_path = '/test/a.csv'
client.write(hdfs_path, df.to_csv(index=False), overwrite=True, encoding='utf-8')
read = client.read(hdfs_path, encoding='utf-8')
with read as reader:
    for row in reader:
        print(row)

运行成功:

接着查看web页面:

大功告成。

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值