这里搭建的是3个节点的完全分布式,即1个nameNode,2个dataNode,分别如下:
master nameNode 192.168.0.249
node1 dataNode 192.168.0.251
node2 dataNode 192.168.0.252
1.首先创建好一个CentOS虚拟机,将它作为主节点我这里起名为master,起什么都行,不固定要求
2.VMware中打开虚拟机,输入java -version,检查是否有JDK环境,不要用系统自带的openJDK版本,要自己安装的版本
3.输入 firewall-cmd --state,若防火墙处于running状态,则关闭防火墙
systemctl stop firewalld.service 关闭防火墙
systemctl disable firewalld.service 禁用防火墙
4.输入mkdir /usr/local/hadoop 创建一个hadoop文件夹
5.将hadoop-3.0.3.tar.gz放到刚创建好的hadoop文件夹中
6.进入hadoop目录,输入tar -xvf hadoop-3.0.3.tar.gz 解压tar包
[root@master sbin]# cd /usr/local/hadoop/
[root@master hadoop]# ls
hadoop-3.0.3 hadoop-3.0.3.tar.gz
7.输入 vi /etc/profile,配置环境变量。加入如如下内容
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.0.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
eg:
8. 输入 souce /etc/profile ,使环境变量改动生效
9.任意目录输入hado,然后按Tab,如果自动补全为hadoop,则说明环境变量配的没问题,否则检查环境变量哪出错了
[root@master ~]# hadoop
10.创建3个之后要用到的文件夹,分别如下:
mkdir /usr/local/hadoop/tmp
mkdir -p /usr/local/hadoop/hdfs/name
mkdir /usr/local/hadoop/hdfs/data
创建结果如下:
11.进入hadoop-3.0.3解压后的 /etc/hadoop 目录,里面存放的是hadoop的配置文件,接下来要修改里面一些配置文件
12. 有两个 .sh 文件,需要指定一下java的目录,首先输入 vi hadoop-env.sh 修改配置文件
[root@master hadoop]# vi hadoop-env.sh
将原有的JAVA_HOME注释掉,根据自己的JDK安装位置,精确配置JAVA_HOME如下,保存并退出
export JAVA_HOME=/usr/local/java/jdk1.8.0_161/
13. 输入 vi yarn-env.sh 修改配置文件
[root@master hadoop]# vi yarn-env.sh
加入如下内容,指定JAVA_HOME,保存并退出
export JAVA_HOME=/usr/local/java/jdk1.8.0_161/
14. 输入 vi core-site.xml 修改配置文件
[root@master hadoop]# vi core-site.xml
在configuration标签中,添加如下内容,保存并退出,注意这里配置的hdfs:master:9000是不能在浏览器访问的
fs.defaultFS
hdfs://master:9000
HDFS的URI
hadoop.tmp.dir
file:/usr/local/hadoop/tmp
节点上本地的hadoop临时文件夹
15. 输入 vi hdfs-site.xml 修改配置文件
[root@master hadoop]# vi hdfs-site.xml
在configuration标签中,添加如下内容,保存并退出
dfs.namenode.http-address
master:50070
dfs.namenode.name.dir
file:/usr/local/hadoop/hdfs/name
namenode上存储hdfs名字空间元数据
dfs.datanode.data.dir
file:/usr/local/hadoop/hdfs/data
datanode上数据块的物理存储位置
dfs.replication
1
副本个数,默认是3,应小于datanode机器数量
dfs.webhdfs.enabled
true
dfs.permissions.enabled
false
16. 输入 vi mapred-site.xml 修改配置文件
[root@master hadoop]# vi mapred-site.xml
在configuration标签中,添加如下内容,保存并退出
mapreduce.framework.name
yarn
指定mapreduce使用yarn框架
17. vi yarn-site.xml 修改配置文件
[root@master hadoop]# vi yarn-site.xml
在configuration标签中,添加如下内容,保存并退出
yarn.resourcemanager.hostname
master
指定resourcemanager所在的hostname
yarn.nodemanager.aux-services
mapreduce_shuffle
NodeManager上运行的附属服务。
需配置成mapreduce_shuffle,才可运行MapReduce程序
18. 输入 vi workers 修改配置文件(老版本是slaves文件,3.0.3 用 workers 文件代替 slaves 文件)
[root@master hadoop]# pwd
/usr/local/hadoop/hadoop-3.0.3/etc/hadoop
[root@master hadoop]# vi workers
将localhost删掉,加入如下内容,即dataNode节点的主机名
node1
node2
19. 将虚拟机关闭,再复制两份虚拟机,重命名为node1,node2,注意这里一定要关闭虚拟机,再复制
20. 将3台虚拟机都打开,后两台复制的虚拟机打开时,都选择“我已复制该虚拟机”
21. 在master机器上,输入vi /etc/hostname,将localhost改为master,保存并退出
22. 在node1机器上,输入 vi /etc/hostname,将localhost改为node1,保存并退出
23. 在node2机器上,输入 vi /etc/hostname,将localhost改为node2,保存并退出
24. 在三台机器分别输入 vi /etc/hosts 修改文件,其作用是将一些常用的网址域名与其对应的IP地址建立一个关联,当用户在访问网址时,系统会首先自动从Hosts文件中寻找对应的IP地址
三个文件中都加入如下内容,保存并退出,注意这里要根据自己实际IP和节点主机名进行更改,IP和主机名中间要有一个空格
192.168.0.249 master
192.168.0.251 node1
192.168.0.252 node2
25. 配置三台机器间的免密登录ssh (搭hadoop必须要配免密登录)
可参见https://blog.csdn.net/wudinaniya/article/details/80845845
26. 如果node节点还没有hadoop,则master机器上分别输入如下命令将hadoop复制
scp /usr/local/hadoop/* root@node1:/usr/local/hadoop
scp /usr/local/hadoop/* root@node2:/usr/local/hadoop
27. 在master机器上,任意目录输入 hdfs namenode -format 格式化namenode,第一次使用需格式化一次,之后就不用再格式化,如果改一些配置文件了,可能还需要再次格式化
hdfs namenode -format
格式化完成。
28. 在master机器上,进入hadoop的sbin目录,输入 ./start-all.sh 启动hadoop(若只配了hdfs,则可以 输入 ./start-dfs.sh 启动hdfs)
[root@master sbin]# ./start-dfs.sh
29. 输入jps查看当前java的进程,
该命令是JDK1.5开始有的,作用是列出当前java进程的PID和Java主类名,nameNode节点除了JPS,还有3个进程,启动成功
若为了只使用hdfs而只配了hdfs,采用 ./start-dfs.sh 启动, 则
30. 在node1机器和node2机器上分别输入 jps 查看进程如下,说明配置成功
若只配置了hdfs, 采用 ./start-dfs.sh 启动。 则
31. 在浏览器访问nameNode节点的8088端口和50070端口可以查看hadoop的运行状况
32. 在master机器上,进入hadoop的sbin目录,输入 ./stop-all.sh 关闭hadoop 或 输入 ./stop-dfs.sh 关闭dfs
写在最前注意:
1、master,slave都需要修改start-dfs.sh,stop-dfs.sh,start-yarn.sh,stop-yarn.sh四个文件
2、如果你的Hadoop是另外启用其它用户来启动,记得将root改为对应用户
HDFS格式化后启动dfs出现以下错误:
[root@master sbin]# ./start-dfs.sh
Starting namenodes on [master]
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 [slave1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
在/usr/local/hadoop/hadoop-3.0.3/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
修改后重启 ./start-dfs.sh,成功!