流程

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
在虚拟机中先安装linux

子网掩码 255.255.255.0
网关 192.168.217.2

规划节点和IP地址
node1 192.168.217.80 NN
node2 192.168.217.81 DN
node3 192.168.217.82 SN

角色分配
node1配置为 NameNode 和 ResourceManager。
node2配置为 DataNode 和 NodeManager。
node3配置为 DataNode、SecondaryNameNode 和 NodeManager


centos的yum源停止维护,更改
①打开CentOS-Base.repo
sudo vi /etc/yum.repos.d/CentOS-Base.repo
②将CentOS-Base.repo里的内容全部替换为:
# CentOS-Base.repo
#
# 这里配置了CentOS的yum源,使用了阿里云和清华大学的镜像点。
#

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

# 使用failovermethod指定优先级,这里设置为随机(roundrobin),也可以改为priority并指定每个URL的优先级
failovermethod=roundrobin

③清理YUM缓存并更新
sudo yum clean all
sudo yum makecache
sudo yum update(一路y)
sudo reboot重启






虚拟机设置管理员
用户名:yixin
密码:1234

使用MobaXtem连接192.168.2.80(如果连接不上需要打开控制面板->网络和Internet->网络和共享中心->更改适配器设置->启用两个以太网VMware)
安装基础工具
sudo yum install net-tools
sudo yum install vim

在yixin的~目录下新建文件夹 mkdir software,修改权限 chmod -R 777 software
将Hadoop和jdk(后缀为gz的)安装包放到soft文件夹下,注意,Java版本要求Java8及以下

rpm -qa|grep java //查看已安装的openjdk
rpm -e --nodeps 加名字 //卸载已经安装openjdk的

然后进入到上传目录:cd software
tar -zxvf jdk-8u351-linux-x64.tar.gz #解压压缩包

解压完成后,当前目录会有一个jdk1.8.0_351的文件夹。将文件夹移动到/usr/local/java下(一般安装的软件都会放到/usr/local/目录下)。
mv jdk1.8.0_351/ /usr/local/java #将文件移动到usr/local/目录下,并将文件夹名改为java

vim /etc/profile #编辑profile文件,设置环境变量
在文件底部写入下面内容:
#Java environment
JAVA_HOME=/usr/local/java
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

source /etc/profile //使文件生效
验证是否成功:
java -version
javac -version


使用sudo tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/ 将Hadoop解压到/usr/local目录下
使用sudo chown -R yixin:yixin /usr/local/hadoop-3.3.4/ 将hadoop-3.3.4改为yixin用户组的yixin用户


关闭防火墙(如果不关闭可能出现节点间无法通信的情况)
sudo systemctl stop firewalld.service (停止防火墙)
sudo systemctl disable firewalld.service (彻底关闭防火墙)

关闭selinux(防止传输文件时出问题)
sudo vim /etc/selinux/config
修改为 SELINUX=disabled

添加hadoop环境变量(把hdfs命令直接加到环境变量中,这样在任意地方执行hdfs命令都可以,不需要在进入hadoop-3.3.4/bin目录下执行)
也可以直接在/etc/profile里改,但为了方便维护,就直接在profile.d文件夹下新增一个.sh文件hdfs.sh,如果后期不想要这个命令,可直接删除hdfs.sh文件hdfs
新增一个sh文件sudo vim /etc/profile.d/hdfs.sh
填入如下内容:
export HADOOP_HOME=/usr/local/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

vim /etc/profile

# hadoop environment
export HADOOP_HOME=/usr/local/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

source /etc/profile

创建HDFS的NN和DN工作主目录:
cd /usr/local/hadoop-3.3.4
sudo mkdir tmp
sudo mkdir var
sudo mkdir dfs
sudo mkdir dfs/name
sudo mkdir dfs/data

sudo chown -R yixin:yixin /usr/local/hadoop-3.3.4/dfs
sudo chown -R yixin:yixin /usr/local/hadoop-3.3.4/tmp
sudo chown -R yixin:yixin /usr/local/hadoop-3.3.4/var


配置Hadoop(一般.sh文件都是寻找Java运行环境,因此主要配置JAVA_HOME)
进入 cd /usr/local/hadoop-3.3.4/etc/hadoop 目录下
vim hadoop-env.sh
(注意路径为你的java路径)
修改export JAVA_HOME=/usr/local/java

为Yarn任务、资源管理器提供Java运行环境(hadoop-3.3.4无需配置)
vim yarn-env.sh
(注意路径为你的java路径)
export JAVA_HOME=/usr/local/java

vim mapred-env.sh
export JAVA_HOME=/usr/local/java

配置HDFS主节点信息、持久化和数据文件的主目录(如果tab不是4个空格,改一下sudo vim /etc/vimrc,添加set ts=4)
cd /usr/local/hadoop-3.3.4/etc/hadoop
vim core-site.xml 在<configuration>中添加如下配置
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-3.3.4/tmp</value>
</property>

<property>
<name>hadoop.proxyuser.yixin.hosts</name>
<value>*</value>
</property>

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



配置HDFS默认的数据存放策略
vim hdfs-site.xml
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop-3.3.4/dfs/name</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop-3.3.4/dfs/data</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:9868</value>
</property>

<property>
<name>dfs.replication</name>
<value>2</value>
</property>

配置mapreduce任务调度策略
vim mapred-site.xml

<property>
<name>mapred.local.dir</name>
<value>/usr/local/hadoop-3.3.4/var</value>
</property>

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>



配置Yarn资源管理角色的信息
vim yarn-site.xml

<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>

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




配置datanode节点信息
vim workers
node2
node3

提前准备主机名解析文件,为后面的克隆机器做好准备(可选,若不做,克隆后为每台机器重新添加亦可,不用删除hosts自带的)
sudo vim /etc/hosts
192.168.217.80 node1
192.168.217.81 node2
192.168.217.82 node3

重启 sudo reboot


克隆其他集群信息
关闭机器,准备克隆
克隆后,修改node2、node3的IP和主机名
修改主机名sudo vim /etc/hostname
修改IP:sudo vim /etc/sysconfig/network-scripts/ifcfg-ens32
注意:在这里克隆后的机器他们的网卡uuid也相等,可以使用uuidgen生成uuid并进行修改
如7008eef7-8634-45d7-b604-50194a799d11


重启网卡
systemctl restart network

然后重启:sudo reboot

下面开始配置集群的ssh免密
在3台机器上执行产生自己的公钥:
ssh-keygen -t rsa
///home/yixin/.ssh/id_rsa
按照默认值回车确定
将每台机器的公钥拷贝给每台机器,注意下面的指令要求3台机器都要执行:
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3

格式化hdfs(三台集群都要)
hdfs namenode -format

开启集群(在node1执行即可)
start-all.sh

查看进程
jps

关闭
stop-all.sh

cd /usr/local/hadoop-3.3.4/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.3.4.jar pi 10 10



日志的地方
/usr/local/hadoop-3.3.4/logs

# hadoop的可视化界面
http://192.168.217.80:9870

#yarn的可视化界面
http://192.168.217.80:8088/


执行mapreduce测试用例报错:找不到主类
进入到hadoop文件中的/etc/hadoop
执行命令hadoop classpath
修改yarn-site.xml
vim yarn-site.xml
<property>
<name>yarn.application.classpath</name>
<value>这里的value填写hadoop classpath输出的值</value>
</property>