本次测试所用软件及环境
Centos7
jdk-8u171-linux-x64.rpm
VMware 12 Pro
hadoop 3.1.1
环境配置(配置3台centos服务器)
配置主机名和hosts文件
1 | [root@localhost etc]# hostnamectl set-hostname mini-1 |
yum安装jdk
1 | [root@mini-1 /]# java -version |
配置免密登录
1 | 1.在"192.168.17.130"服务器上使用"ssh-keygen -t rsa"命令来创建公钥 |
下载安装hadoop
1 | 1.下载地址: |
将hadoop添加到环境变量
1 | vim /etc/profile |
关闭防火墙
1 | systemctl stop firewalld |
伪分布式运行Hadoop
启动HDFS并运行MapReduce程序
配置hadoop资源
1 | [root@mini-1 hadoop]# pwd |
修改hadoop-env.sh
1 | 大约54行,替换本机的JAVA_HOME目录: |
修改core-site.xml
1 | 1.文件最后<configuration> </configuration> 替换为: |
修改hdfs-site.xml
1 | 文件最后<configuration> </configuration> 替换为: |
启动单机hadoop
格式化namenode
第一次启动时格式化,以后就不要总格式化1
2
3
4
5
6
7
8
9[root@mini-1 hadoop-3.1.1]# pwd
/data/hadoop/hadoop-3.1.1
[root@mini-1 hadoop-3.1.1]# cd
[root@mini-1 ~]# pwd
/root
[root@mini-1 ~]# hadoop namenode -format
[root@mini-1 ~]# jps -l
20027 sun.tools.jps.Jps
[root@mini-1 ~]#
表示成功格式化1
2018-10-17 12:21:23,333 INFO common.Storage: Storage directory /data/hadoop/hadoop-3.1.1/tmp/dfs/name has been successfully formatted.
启动namenode
1 | [root@mini-1 ~]# pwd |
启动datanode
1 | [root@mini-1 ~]# hadoop-daemon.sh start datanode |
停止的命令
1 | 停止datanode |
查看Hadoop
查看是否启动成功
1 | [root@mini-1 ~]# jps -l |
查看产生的log日志
1 | /data/hadoop/hadoop-3.1.1/logs |
web端查看HDFS文件系统
1 | ( 50070端口 -> 9870端口了) |
操作hadoop
在hdfs文件系统上创建一个/data/input文件夹 (创建)
hadoop fs -mkdir -p /data/input
1 | [root@mini-1 ~]# hadoop fs -mkdir -p /data/input |
将测试文件内容上传到文件系统上 (上传)
1 | [root@mini-1 ~]# ll |
查看上传的文件是否正确
1 | [root@mini-1 ~]# ll |
运行mapreduce程序
1 | [root@mini-1 ~]# hadoop fs -put tmp.log /data/input |
查看运行mapreduce程序的输出结果
1 | [root@mini-1 hadoop-3.1.1]# hadoop fs -ls / |
YARN上运行MapReduce程序
配置hadoop资源
hadoop-env.sh,core-site.xml,hdfs-site.xml 的配置同上.
配置yarn-env.sh
未做配置…………
配置yarn-site.xml
1 | 文件最后<configuration> </configuration> 替换为: |
配置mapred-env.sh
未做配置…………
配置mapred-site.xml
1 | 文件最后<configuration> </configuration> 替换为: |
启动集群
启动resourcemanager, 启动nodemanager1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[root@mini-1 sbin]# jps -l
4528 org.apache.hadoop.hdfs.server.namenode.NameNode
4624 org.apache.hadoop.hdfs.server.datanode.DataNode
4724 sun.tools.jps.Jps
[root@mini-1 sbin]# yarn-daemon.sh start resourcemanager
WARNING: Use of this script to start YARN daemons is deprecated.
WARNING: Attempting to execute replacement "yarn --daemon start" instead.
[root@mini-1 sbin]# jps -l
4528 org.apache.hadoop.hdfs.server.namenode.NameNode
4624 org.apache.hadoop.hdfs.server.datanode.DataNode
4816 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
4838 sun.tools.jps.Jps
[root@mini-1 sbin]# yarn-daemon.sh start nodemanager
WARNING: Use of this script to start YARN daemons is deprecated.
WARNING: Attempting to execute replacement "yarn --daemon start" instead.
[root@mini-1 sbin]# jps -l
4528 org.apache.hadoop.hdfs.server.namenode.NameNode
4624 org.apache.hadoop.hdfs.server.datanode.DataNode
4816 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
5281 sun.tools.jps.Jps
5260 org.apache.hadoop.yarn.server.nodemanager.NodeManager
[root@mini-1 sbin]#
操作集群
yarn的浏览器页面查看
1 | http://192.168.17.133:8088/cluster |
停止集群
1 | [root@mini-1 hadoop-3.1.1]# pwd |
配置文件说明
1 | Hadoop 配置文件分两类: |
完全分布式部署Hadoop
虚拟机准备
1 | 准备3台虚拟机 |
scp
1 | scp可以实现服务器与服务器之间的数据拷贝 |
rsync
1 | rsync 远程同步工具,主要用于备份和镜像。具有速度快、 避免复制相同内容和支持符 |
编写集群分发脚本 xsync
1 | 1.需求分析:循环复制文件到所有节点的相同目录下 |
配置集群
集群部署规划
mini-1 | mini-2 | mini-3 | |
---|---|---|---|
hdfs | NameNode, DataNode | DataNode | SecondaryNameNode,DataNode |
yarn | NodeManager | ResourceManager,NodeManager | NodeManager |
配置文件
core-site.xml
1 | <configuration> |
hdfs
1 hadoop-env.sh1
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
2 hdfs-site.xml1
2
3
4
5
6
7
8
9
10<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>mini3:50090</value>
</property>
</configuration>
3 slaves
vim slaves1
2
3mini1
mini2
mini3
yarn
1.yarn-env.sh1
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
2.yarn-site.xml1
2
3
4
5
6
7
8
9
10
11
12
13<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>mini2</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapreduce
1.mapred-env.sh1
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
2.mapred-site.xml1
2
3
4
5
6
7<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在集群上分发以上所有文件
1 | [root@mini-1 etc]# pwd |
查看文件分发情况
1 | [root@mini-2 hadoop]# pwd |
集群启动及测试
启动集群(NameNode节点)
1.如果集群是第一次启动,需要在格式化namenode,先删除集群节点的 /data/hadoop/hadoop-3.1.1/logs文件夹1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[root@mini-1 hadoop-3.1.1]# pwd
/data/hadoop/hadoop-3.1.1
[root@mini-1 hadoop-3.1.1]# ll
total 184
drwxr-xr-x. 2 1000 1001 183 Aug 2 13:05 bin
drwxr-xr-x. 3 1000 1001 20 Aug 2 12:28 etc
drwxr-xr-x. 2 1000 1001 106 Aug 2 13:05 include
drwxr-xr-x. 3 1000 1001 20 Aug 2 13:05 lib
drwxr-xr-x. 4 1000 1001 4096 Aug 2 13:05 libexec
-rw-r--r--. 1 1000 1001 147144 Jul 29 07:13 LICENSE.txt
drwxr-xr-x. 3 root root 4096 Oct 20 10:32 logs
-rw-r--r--. 1 1000 1001 21867 Jul 29 07:13 NOTICE.txt
-rw-r--r--. 1 1000 1001 1366 Jul 29 04:41 README.txt
drwxr-xr-x. 3 1000 1001 4096 Aug 2 12:28 sbin
drwxr-xr-x. 4 1000 1001 31 Aug 2 13:17 share
drwxr-xr-x. 5 root root 51 Oct 20 10:32 tmp
[root@mini-1 hadoop-3.1.1]# rm -rf logs/
[root@mini-1 hadoop-3.1.1]# bin/hdfs namenode -format
2.启动HDFS1
2
3
4
5
6
7
8
9
10
11
12[root@mini-1 hadoop-3.1.1]# sbin/start-dfs.sh
[root@mini-1 hadoop-3.1.1]# sbin/start-dfs.sh
Starting namenodes on [mini1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [mini3]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
[root@mini-1 hadoop-3.1.1]#
出现错误,解决办法:
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本1
2
3
4
5
6
7$ vim sbin/start-dfs.sh
$ vim sbin/stop-dfs.sh
在顶部空白处添加内容:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本1
2
3
4
5
6$ vim sbin/start-yarn.sh
$ vim sbin/stop-yarn.sh
在顶部空白处添加内容:
YARN_RESOURCEMANGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANGER_USER=root
修改后,同步到其他集群:1
[root@mini-1 hadoop-3.1.1]# xsync sbin/
然后再次启动:1
2
3
4
5
6
7
8
9
10
11[root@mini-1 hadoop-3.1.1]# sbin/start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [mini1]
Last login: Thu Dec 6 08:41:57 CST 2018 from 192.168.17.1 on pts/3
Starting datanodes
Last login: Thu Dec 6 08:47:28 CST 2018 on pts/2
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Starting secondary namenodes [mini3]
Last login: Thu Dec 6 08:47:31 CST 2018 on pts/2
mini3: WARNING: /data/hadoop/hadoop-3.1.1/logs does not exist. Creating.
[root@mini-1 hadoop-3.1.1]#
3.启动yarn
集群基本测试
hadoop启动停止方式
集群时间同步
配置集群常见问题
配置hadoop资源
1 | [root@mini-1 hadoop]# pwd |
修改hadoop-env.sh
1 | 大约54行,替换本机的JAVA_HOME目录: |
修改core-site.xml
1 | 1.文件最后<configuration> </configuration> 替换为: |
修改hdfs-site.xml
1 | 文件最后<configuration> </configuration> 替换为: |
修改mapred-site.xml
1 | 文件最后<configuration> </configuration> 替换为 |
修改yarn-site.xml文件
1 | 文件最后<configuration> </configuration> 替换为: |