集群的搭建
实验环境
安装前,3台虚拟机IP及机器名称如下:
主机名 IP地址 角色
yunzu63.cn 192.168.1.63 NameNode
yunzu64.cn 192.168.1.64 DataNode1
yunzu62.cn 192.168.1.62 DataNode2
实验前期环境准备:
三台机器上配置hosts文件,如下:
[root@yunzu63 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 yunzu63.cn
192.168.1.64 yunzu64.cn
192.168.1.62 yunzu62.cn
yunzu62 yunzu64 同样的配置
创建运行hadoop用户账号和Hadoop目录。 尽量不用root帐号运行
[root@yunzu63 ~]# useradd -u 8000 hadoop #为了保障,在其它服务器上创建的hadoop用户ID保持一致,创建时,尽量把UID调大
[root@yunzu63 ~]# echo 123456 | passwd --stdin hadoop
yunzu62 yunzu64 同样的配置且都必须是8000
(4)给hadoop账户增加sudo权限: vim /etc/sudoers ,增加内容:
[root@yunzu63 ~]# vim /etc/sudoers
hadoop ALL=(ALL) ALL
注意:第93行,root下面,以上对于每一台机器都要执行
配置在yunzu63上,可以ssh无密码登录机器yunzu63,yunzu64,yunzu62 ,方便后期复制文件和启动服务。因为namenode启动时,会连接到datanode上启动对应的服务
[hadoop@yunzu63 ~]# ssh-keygen
一路回车
导入公钥到其他datanode节点认证文件
[hadoop@yunzu63 ~]# ssh-copy-id root@192.168.1.62
[hadoop@yunzu63 ~]# ssh-copy-id root@192.168.1.64
配置Hadoop环境,安装Java环境JDK:三台机器上都要配置
yunzu63安装jdk
上传jdk-8u161-linux-x64.rpm软件包到yunzu63
[root@yunzu63 ~]# rpm -ivh jdk-8u161-linux-x64.rpm
1、安装及配置Java运行环境—jdk。升级了jdk的版本
[root@yunzu63 ~]# rpm -ivh jdk-8u161-linux-x64.rpm
[root@yunzu63 ~]#rpm -pql /root/jdk-8u161-linux-x64.rpm #通过查看jdk的信息可以知道jdk的安装目录在/usr/java
[root@yunzu63 ~]#vim /etc/profile #在文件的最后添加以下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_161
export JAVA_BIN=/usr/java/jdk1.8.0_161/bin
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
{JAVA_HOME}/bin:
JAVAHOME/bin:PATH
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
{JAVA_HOME}/lib/dt.jar:
JAVAHOME/lib/dt.jar:{JAVA_HOME}/lib/tools.jar
[root@yunzu63 ~]#source /etc/profile #使配置文件生效
验证java运行环境是否安装成功:
[root@yunzu63 ~]# java -version
将jdk部署到其它两台机器上:
[root@yunzu63 ~]# scp jdk-8u161-linux-x64.rpm root@192.168.1.62:/root
[root@yunzu63 ~]# scp jdk-8u161-linux-x64.rpm root@192.168.1.64:/root
[root@yunzu63 ~]# scp /etc/profile 192.168.1.62:/etc/profile
[root@yunzu63 ~]# scp /etc/profile 192.168.1.64:/etc/profile
安装
[root@yunzu64 ~]# rpm -ivh jdk-8u161-linux-x64.rpm
[root@yunzu62 ~]# rpm -ivh jdk-8u161-linux-x64.rpm
重新参加java运行环境:
[root@yunzu64 ~]# source /etc/profile
[root@yunzu62 ~]# source /etc/profile
测试:
[root@yunzu64 ~]# java -version
[root@yunzu62 ~]# java -version
在yunzu63安装Hadoop 并配置成namenode主节点
Hadoop安装目录:/home/hadoop/hadoop-3.0.0
使用root帐号将hadoop-3.0.0.tar.gz 上传到服务器
[root@yunzu63 ~]# mv hadoop-3.0.0.tar.gz /home/hadoop/
注意:以下步骤使用hadoop账号操作。
[root@yunzu63 ~]# su - hadoop
[hadoop@yunzu63 ~]$ tar zxvf hadoop-3.0.0.tar.gz #只要解压文件就可以,不需要编译安装
创建hadoop相关的工作目录
[hadoop@yunzu63 ~]$ mkdir -p /home/hadoop/dfs/name /home/hadoop/dfs/data /home/hadoop/tmp
[hadoop@yunzu623 ~]$ ls
dfs hadoop-3.0.0 hadoop-3.0.0.tar.gz tmp
配置Hadoop:需要修改7个配置文件。
文件位置:/home/hadoop/hadoop-3.0.0/etc/hadoop/
文件名称:hadoop-env.sh、yarn-evn.sh、workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
1、配置文件hadoop-env.sh,指定hadoop的java运行环境
该文件是hadoop运行基本环境的配置,需要修改的为java虚拟机的位置。
[hadoop@yunzu63 hadoop-3.0.0]$ vim
/home/hadoop/hadoop-3.0.0/etc/hadoop/hadoop-env.sh
改:54 # export JAVA_HOME=
为:export JAVA_HOME=/usr/java/jdk1.8.0_161
2、配置文件yarn-env.sh,保存yarn框架的运行环境
该文件是yarn框架运行环境的配置,同样需要修改java虚拟机的位置。
[hadoop@yunzu63 hadoop-3.0.0]$ vim /home/hadoop/hadoop-3.0.0/etc/hadoop/yarn-env.sh 不需要修改。
4、配置文件core-site.xml,指定访问hadoop web界面访问路径
这个是hadoop的核心配置文件,这里需要配置的就这两个属性,fs.default.name配置了hadoop的HDFS系统的命名,位置为主机的9000端口;
[hadoop@yunzu63 hadoop-3.0.0]$ vim /home/hadoop/hadoop-3.0.0/etc/hadoop/core-site.xml
改:
19
20
注: 在和中间插入以一下红色和蓝色标记内容:
为:
fs.defaultFS
hdfs://yunzu63.cn:9000
io.file.buffer.size
13107
hadoop.tmp.dir
file:/home/hadoop/tmp
Abase for other temporary directories.
5、配置文件hdfs-site.xml
这个是hdfs的配置文件,dfs.http.address配置了hdfs的http的访问位置;
dfs.replication配置了文件块的副本数,一般不大于从机的个数。
[root@yunzu63 ~]# vim /home/hadoop/hadoop-3.0.0/etc/hadoop/hdfs-site.xml
改:19
20
21
为:
dfs.namenode.secondary.http-address
yunzu63.cn:9001
dfs.namenode.name.dir
file:/home/hadoop/dfs/name
dfs.datanode.data.dir
file:/home/hadoop/dfs/data
dfs.replication
2
dfs.webhdfs.enabled
true
6、配置文件mapred-site.xml
这个是mapreduce任务的配置
[hadoop@yunzu63 hadoop-3.0.0]$ vim /home/hadoop/hadoop-3.0.0/etc/hadoop/mapred-site.xml
改:19
20
21
为:
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
0.0.0.0:10020
mapreduce.jobhistory.webapp.address
0.0.0.0:19888
7、配置节点yarn-site.xml
该文件为yarn框架的配置,主要是一些任务的启动位置
[hadoop@yunzu63 hadoop-3.0.0]$ vim /home/hadoop/hadoop-3.0.0/etc/hadoop/yarn-site.xml
改:
编辑datanode节点host
[hadoop@yunzu63 hadoop]$ vim workers
yunzu62.cn
yunzu64.cn
复制到其他datanode节点: yunzu64和yunzu62
[hadoop@yunzu63 hadoop-3.0.0]$ scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml workers 192.168.1.62:/home/hadoop/hadoop-3.0.0/etc/hadoop/
[hadoop@yunzu63 hadoop-3.0.0]$ scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml workers
192.168.1.64:/home/hadoop/hadoop-3.0.0/etc/hadoop/
在yunzu63上启动Hadoop
格式化
hadoop namenode的初始化,只需要第一次的时候初始化,之后就不需要了
[hadoop@yunzu63 hadoop-3.0.0]$ /home/hadoop/hadoop-3.0.0/bin/hdfs namenode -format
[root@yunzu63 hadoop-3.0.0]# echo KaTeX parse error: Expected 'EOF', got '#' at position 33: …root@yunzu63 ~]#̲ rpm -ivh /mnt/… tree /home/hadoop/dfs/
生成基于hadoop用户的不输入密码登录:因为后期使用hadoop用户启动datanode节点使用需要直接登录到对应的服务器上启动datanode相关服务。
[hadoop@yunzu63 hadoop-3.0.0]$ ssh-keygen
[hadoop@yunzu63 hadoop-3.0.0]$ ssh-copy-id 192.168.1.64
[hadoop@yunzu63 hadoop-3.0.0]$ ssh-copy-id 192.168.1.62
[hadoop@yunzu63 hadoop-3.0.0]$ ssh-copy-id 192.168.1.63
启动hdfs: ./sbin/start-dfs.sh,即启动HDFS分布式存储
[root@yunzu63 hadoop-3.0.0]# /home/hadoop/hadoop-3.0.0/sbin/start-dfs.sh
Starting namenodes on [yunzu63.cn]
yunzu63.cn: starting namenode, logging to
/home/hadoop/hadoop-3.0.0/logs/hadoop-root-namenode-yunzu63.cn.out
yunzu64.cn: starting datanode, logging to
/home/hadoop/hadoop-3.0.0/logs/hadoop-root-datanode-yunzu64.cn.out
yunzu62.cn: starting datanode, logging to
/home/hadoop/hadoop-3.0.0/logs/hadoop-root-datanode-yunzu62.cn.out
Starting secondary namenodes [yunzu63.cn]
yunzu63.cn: starting secondarynamenode, logging to
/home/hadoop/hadoop-3.0.0/logs/hadoop-root-secondarynamenode-yunzu63.cn.out
注:如果报错,如:
yunzu64.cn: Host key verification failed.
解决:
[hadoop@yunzu63 ~]$ ssh 192.168.1.64 #确认可以不输入密码直接连接上yunzu64
关闭后再重启:
[root@yunzu63 hadoop-3.0.0]# /home/hadoop/hadoop-3.0.0/sbin/stop-dfs.sh
[root@yunzu63 hadoop-3.0.0]# /home/hadoop/hadoop-3.0.0/sbin/start-dfs.sh
查看进程,此时master有进程:namenode和 secondarynamenode进程:
[root@yunzu63 ~]# ps -axu | grep namenode --color
Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.8/FAQ
root 8214 4.1 9.5 1882176 110804 ? Sl 17:39 0:17 /usr/java/jdk1.8.0_161/bin/java -Dproc_namenode -Xmx1000m
yunzu64和yunzu62上有进程:DataNode
[root@yunzu64 ~]# ps -axu | grep datanode --color
Warning: bad syntax, perhaps a bogus ‘-’?See/usr/share/doc/procps-3.2.8/FAQ
root 5749 8.8 5.2 1851956 60656 ? Sl 17:55 0:06 /usr/java/jdk1.8.0_161/bin/java -Dproc_datanode -Xmx1000m
在yunzu63上启动yarn: ./sbin/start-yarn.sh 即,启动分布式计算
[hadoop@yunzu63 hadoop-3.0.0]# /home/hadoop/hadoop-3.0.0/sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to
/home/hadoop/hadoop-3.0.0/logs/yarn-root-resourcemanager-yunzu63.cn.out
yunzu62.cn: starting nodemanager, logging to
/home/hadoop/hadoop-3.0.0/logs/yarn-root-nodemanager-yunzu62.cn.out
yunzu64.cn: starting nodemanager, logging to
/home/hadoop/hadoop-3.0.0/logs/yarn-root-nodemanager-yunzu64.cn.out
查看进程:
查看yunzu63上的ResourceManager进程,yunzu62和yunzu64上的进程:DataNode NodeManager
[root@yunzu63 ~]# ps -axu | grep resourcemanager --color
[root@yunzu62 ~]# ps -axu | grep nodemanager --color
[root@yunzu64 ~]# ps -axu | grep nodemanager --color
注:start-dfs.sh 和 start-yarn.sh 这两个脚本可用start-all.sh代替。
[hadoop@yunzu63 ~]$ /home/hadoop/hadoop-3.0.0/sbin/start-all.sh
关闭:
[hadoop@yunzu63 ~]$ /home/hadoop/hadoop-3.0.0/sbin/stop-all.sh
启动: jobhistory服务,查看mapreduce运行状态
[hadoop@yunzu63 hadoop-3.0.0]#
/home/hadoop/hadoop-3.0.0/sbin/mr-jobhistory-daemon.sh start historyserver
在主节点上启动存储服务和资源管理主服务。使用命令:
[hadoop@yunzu63 ~]$ /home/hadoop/hadoop-3.0.0/sbin/hadoop-daemon.sh start datanode #启动从存储服务
[hadoop@yunzu63 ~]$ /home/hadoop/hadoop-3.0.0/sbin/yarn-daemon.sh start
nodemanager #启动资源管理从服务
登录从结点:启动存储从服务和资源管理从服务
[hadoop@yunzu62 ~]$ /home/hadoop/hadoop-3.0.0/sbin/hadoop-daemon.sh start datanode #启动从存储服务
[hadoop@yunzu62 ~]$ /home/hadoop/hadoop-3.0.0/sbin/yarn-daemon.sh start
nodemanager #启动资源管理从服务
[hadoop@yunzu64 ~]$ /home/hadoop/hadoop-3.0.0/sbin/hadoop-daemon.sh start datanode #启动从存储服务
[hadoop@yunzu64 ~]$ /home/hadoop/hadoop-3.0.0/sbin/yarn-daemon.sh start nodemanager #启动资源管理从服务
查看HDFS分布式文件系统状态:
[hadoop@yunzu63 hadoop-3.0.0]$ /home/hadoop/hadoop-3.0.0/bin/hdfs dfsadmin -report
查看文件块组成部分:
[hadoop@yunzu63 hadoop-3.0.0]$ ./bin/hdfs fsck / -files -blocks
或:
http://192.168.1.63:9870/dfshealth.html#tab-datanode
通过web界面来查看HDFS状态: http://192.168.1.63:9001/status.html
通过Web查看hadoop集群状态: http://192.168.1.63:8088
查看JobHistory的内容:
http://192.168.1.63:19888/jobhistory
设置HADOOP_HOME环境变量,方便后期调用命令。
[root@yunzu63 ~]# vim /etc/profile #添加追加以下内容:
export HADOOP_HOME=/home/hadoop/hadoop-3.0.0
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:HADOOP_HOME/bin:
H
A
D
O
O
P
H
O
M
E
/
s
b
i
n
:
HADOOP_HOME/sbin:
HADOOPHOME/sbin:PATH
[root@yunzu63 ~]# source /etc/profile
[root@yunzu63 ~]# start #输入start 按两下tab键,测试命令补齐
测试:
运行Hadoop计算任务,Word Count 字数统计
[hadoop@yunzu63 ~]$ source /etc/profile
(1)/home/hadoop目录下有两个文本文件file01.txt和file02.txt,文件内容分别为:
[hadoop@yunzu63 ~]$ vim file01.txt
随便输入单词
[hadoop@yunzu63 ~]$ vim file02.txt
随便输入单词
(2)将这两个文件放入hadoop的HDFS中:
[hadoop@yunzu63 ~]$ hadoop fs -ls //查看hdfs目录情况
[hadoop@yunzu63 ~]$ hadoop fs -mkdir -p input
[hadoop@yunzu63 ~]$ hadoop fs -put /home/hadoop/file*.txt input
[hadoop@yunzu63 ~]$ hadoop fs -cat input/file01.txt //查看命令
(3)计执行 wordCount单词统计汇总并查看结果:
[hadoop@yunzu63 ~] hadoop jar hadoop-3.0.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar wordcount input output
查看运行之后产生的文件
hadoop fs -ls output
查看运行结果
hadoop fs -cat output/part-r-00000