目录
1 hadoop概述
1.1 hadoop是什么
1.2 hadoop的组成
1.2.1 hdfs架构概述
1.2.2 YARN概述
1.2.3 MapReduce架构概述
1.3 大数据生态体系
1.4 推荐系统架构图
2 Hadoop集群搭建
2.1 虚拟机环境准备
2.2 安装jdk和hadoop
2.3 集群配置
3 集群启动
3.1 集群单点启动
3.2 SSH无密登陆设置
3.3 集群一键启动/停止方式
4 测试
4.1启动集群
4.2 集群基本测试
4.3 集群时间同步
4.3.1 时间服务器配置(必须是root用户)
4.3.2 其他机器配置(root用户)
MapReduce将计算过程分为两个阶段:Map(映射)和Reduce(归约)
图中涉及的技术名词解释如下:
安装所需要的软件链接:请点这里;提取码:i431
也可以去官网自行下载
主机名分别为:hadoop101;hadoop102;hadoop103;
IP分别为:192.168.1.101;192.168.1.102;192.168.1.103
[root@ hadoop101桌面]# vim /etc/hosts
添加如下内容
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
安装测略:现在一台节点上配置,然后通过命令发送到另外两台节点上
1. 卸载现有的jdk
查询是否安装jdk,如果版本低于1.7,卸载该jdk
[root@hadoop101 opt]$ rpm -qa | grep java
[root@hadoop101 opt]$ rpm -e 软件包
2. 将jdk和hadoop上传到/opt/software目录下
3.在Linux系统目录下查看是否上传成功
[root@hadoop101 opt]$ cd software/
[root@hadoop101 software]$ ls
hadoop-2.7.2.tar.gz jdk-8u144-linux-x64.tar.gz
4. 解压jdk和hadoop到/opt/module目录
[root@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
[root@hadoop101 software]# tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
5.配置jdk和hadoop的环境变量
打开/etc/profile文件,在最后添加下列内容
[root@hadoop101 software]$ vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
保存退出 :wq
让配置文件重新生效
[root@ hadoop101 software]$ source /etc/profile
6.测试是否安装成功
[root@hadoop101 ~]# java -version
java version "1.8.0_144"
[root @hadoop101 ~]$ hadoop version
Hadoop 2.7.2
7.重启(如果命令不成功再重启)
1. 集群部署规划
|
hadoop101 |
hadoop102 |
hadoop103 |
HDFS
|
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
2. 配置集群
1. 配置hadoop所使用的Java的环境变量:hadoop-env.sh
[root@hadoop101 hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
2. 核心配置文件:core-site.xml(hdfs的核心配置文件)
[root@hadoop101 hadoop]$ vim core-site.xml
fs.defaultFS
hdfs://hadoop101:9000
hadoop.tmp.dir
/opt/module/hadoop-2.7.2/data/tmp
3. hdfs配置文件:hdfs-site.xml
[root@hadoop101 hadoop]$ vim hdfs-site.xml
dfs.replication
3
辅助namenode工作
dfs.namenode.secondary.http-address
hadoop10 3:50090
4. yarn配置文件
yarn-env.sh
[root@hadoop101 hadoop]$ vim yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
yarn-site.xml
[root@hadoop101 hadoop]$ vim yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop102
5. mapreduce配置文件
mapred-env.sh
[root@hadoop101 hadoop]$ vim mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
[root@hadoop101 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[root@hadoop101 hadoop]$ vim mapred-site.xml
mapreduce.framework.name
yarn
3. 配置集群中从节点的信息
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[root@hadoop101 hadoop]$ vim slaves
hadoop101
hadoop102
hadoop103
4. 分发文件
scp:(secure copy)安全拷贝
①定义:scp可以实现服务器到服务器之间的数据拷贝。(from server1 to server2)
安装scp命令,这个需要每个节点都安装
yum install -y openssh-server openssh-clients
②使用:将hadoop101中/opt/module/目录下的所有文件拷贝到hadoop102、hadoop103
[root@hadoop101 /]$ scp -r /opt/module/* hadoop102:/opt/module
[root@hadoop101 /]$ scp -r /opt/module/* hadoop103:/opt/module
5. 查看文件分发情况(验证一个即可)
[root@hadoop102 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
1. 如果集群是第一次启动,需要格式化NameNode(格式化只进行一次)
[root@hadoop101 hadoop-2.7.2]$ hadoop namenode -format
2. 在hadoop101上启动NameNode
[root@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
[root@hadoop101 hadoop-2.7.2]$ jps
3461 NameNode
3. 在hadoop101、hadoop102、hadoop103上分别启动DataNode
[root@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[root@hadoop101 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[root@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[root@hadoop102 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[root@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[root@hadoop103 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode
(一键启动的必备条件)
1. 配置ssh
1. 基本语法: ssh 另一台主机的ip地址
如果提示command not found,需要安装ssh服务
yum install -y openssh-server openssh-clients
2. ssh连接时出现Host key verification failed 直接输入yes即可
[root@hadoop101 opt] $ ssh hadoop102
The authenticity of host 'hadoop102(192.168.1.102)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
2. 无密钥配置
1. 免密登陆原理
2. 生成密钥对:
[root@hadoop101 .ssh]# pwd //.ssh是一个隐藏的文件夹
/root/.ssh[root@hadoop101 .ssh]$ ssh-keygen -t rsa //然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
3. 将公钥拷贝到要免密登录的目标机器上
[root@hadoop101 .ssh]$ ssh-copy-id hadoop101
[root@hadoop101 .ssh]$ ssh-copy-id hadoop102
[root@hadoop101 .ssh]$ ssh-copy-id hadoop103
4.测试
[root@hadoop101 .ssh]# ssh hadoop102
Last login: Mon Apr 8 17:00:50 2019 from 192.168.1.1
[root@hadoop102 ~]# exit
logout
Connection to hadoop102 closed.
3. .ssh文件夹下(~/.ssh)的文件功能解释
1. 各个服务组件逐一启动/停止
分别启动/停止hdfs组件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
启动/停止yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
2. 各个模块分开启动/停止(配置SSH是前提)常用
整体启动/停止hdfs(namenode节点启动,也就是hadoop101)
[root@hadoop101sbin]# ./start-dfs.sh
[root@hadoop101 sbin]# ./start-dfs.sh
整体启动/停止yarn(在resourceManager节点启动,也就是hadoop102)
[root@hadoop102 sbin]# ./start-yarn.sh
[root@hadoop102 sbin]# ./stop-yarn.sh
1. 如果集群是第一次启动,需要格式化namenode,如果单点启动的时候已将格式化,就不需要格式化了!!
[root@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format
2. 启动HDFS
[root@hadoop101 hadoop-2.7.2]$ sbin/start-dfs.sh
[root@hadoop101 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[root@hadoop101 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[root@hadoop101 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
启动之后查看hdfs的WEBUI界面:http://192.168.1.101:50070/
3. 启动yarn
[root@hadoop102 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。如果不在一台机器上,则ResourceManger所在机器也需要配置到其他机器的ssh免密登录
通过jps命令查看进程:
[root@hadoop101 .ssh]# jps
3584 NameNode
3718 DataNode
4872 NodeManager[root@hadoop102 sbin]# jps
3441 DataNode
5162 NodeManager
5053 ResourceManager[root@hadoop103 ~]# jps
3542 SecondaryNameNode
5095 NodeManager
3434 DataNode
Yarn的web页面查看地址:http://hadoop102:8088/
4. 查看SecondaryNameNode的WEBUI界面
1. 上传文件到集群
上传小文件
[root@hadoop101 hadoop-2.7.2]# hadoop fs -mkdir /upload //在hdfs上创建一个文件夹
[root@hadoop101 hadoop-2.7.2]# hadoop fs -put bigdata.txt /upload/
上传大文件
[root@hadoop101 software]# hadoop fs -put hadoop-2.7.2.tar.gz /upload
2. 上传文件后查看文件存放的位置
查看HDFS文件存储位置
[root@hadoop101 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-327200681-192.168.1.101-1551800072963/current/finalized/subdir0/subdir0
查看HDFS在磁盘存储的文件内容
[root@hadoop101 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
拼接
-rw-rw-r--. 1 hadoop hadoop 134217728 4月 8 20:01 blk_1073741836
-rw-rw-r--. 1 hadoop hadoop 1048583 4月 8 20:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 hadoop hadoop 63439959 4月 8 20:01 blk_1073741837
-rw-rw-r--. 1 hadoop hadoop 495635 4月 8 20:01 blk_1073741837_1013.meta
[root@hadoop101 subdir0]$ cat blk_1073741836>>tmp.file
[root@hadoop101 subdir0]$ cat blk_1073741837>>tmp.file
[root@hadoop101 subdir0]$ tar -zxvf tmp.file
下载
[root@hadoop101 hadoop-2.7.2]$ hadoop fs -get /upload/hadoop-2.7.2.tar.gz ./
时间同步的方式:在集群中找一台机器,作为时间服务器,集群中其他机器与这台机器定时的同步时间,比如,每隔十分钟,同步一次时间。
1. 检查ntp是否安装,没有安装则使用 yum install ntp -y 进行安装
[root@hadoop101 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
2. 修改net配置文件
[root@hadoop101 桌面]# vim /etc/ntp.conf
修改内容如下
a)修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改2(集群在局域网中,不使用其他的网络时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
c)添加3(当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3. 修改/etc/sysconfig/ntpd 文件
[root@hadoop101 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
4. 重新启动ntpd
[root@hadoop101 桌面]# service ntpd status
ntpd 已停
[root@hadoop101 桌面]# service ntpd start
正在启动 ntpd: [确定]
5. 执行:
[root@hadoop101 桌面]# chkconfig ntpd on
1. 在其他机器配置10分钟与时间服务器同步一次
[root@hadoop102 hadoop-2.7.2]# crontab -e
编写脚本
*/10 * * * * /usr/sbin/ntpdate hadoop101
2. 修改任意机器时间
[root@hadoop102 root]# date -s "2017-9-11 11:11:11"
3. 十分钟后查看机器是否与时间服务器同步
[root@hadoop102 root]# date