hadoop 集群 3.2 搭建过程其实很简单。
选择自己想要的版本,我第一次搭建用的是2.7.5,虽然也搭建出来了,但是在web管理页面没有看到文件管理的相关按钮:

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

所以仔细对比了下配置文件,并未发现有什么异同,唯一不同的是版本不同,他用的是3.0版本,而我是2.7.5,索性重新装一个高版本的试下,下面是过程:
我的集群是三台机器:
hostname | ip | 主节点namenode | 从节点datanode | CentOS121 | 192.168.18.121 | true | true | CentOS122 | 192.168.18.122 | false | true | CentOS123 | 192.168.18.123 | false | true |
(基础知识不再科普,有需要自行查阅资料)
首先声明:我并不会关闭防火墙,防火墙的存在是为了保护系统,我觉得开着还是有必要的。
准备工作(三台机器都需要做):
- 防火墙:大多数的教程都是先关闭防火墙,其实不关闭也是可以实现的,新建一个防火墙富规则即可,使三台机器相互信任。
在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
将下载后的压缩包上传到linux中,或者用wget直接下载也可。
然后解压,我的目录是/usr/local/software/hadoop。
然后配置环境变量,关于环境变量我认为放在/etc/profile.d/下是比较合适的,新建一个自己的sh脚本文件:

然后使配置文件生效,
source /etc/profile
如果此处操作成功,可以查看hadoop版本:
hadoop version

假设当前在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目录,这五个文件都存放于这个目录下。

- 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> - 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>
 -
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>
 -
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>
 -
workers(2.7.5版本为slaves):用以指定datanode从节点。 CentOS121
CentOS122
CentOS123  -
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页面:

大功告成。 |