路标
- 背景
- 大数据背景
- Hadoop 诞生
- 环境搭建--基于CentOS7搭建
- 环境准备
- HADOOP安装
背景
随着信息化互联网|物联网发展要求,万物互联趋势势在必行。随之引发架构的演变由单一架构向高并发分布式架构演变。数据的存储也开始由原始的单机存储演变为分布式存储。
- JavaWeb:为了应对高并发和分布式提出的是LNMP(Linux、Nginx、MySQL、PHP)思想。
- 海量数据存储|数据分析 :存储方案(HDFS)、计算方案(Map Reduce、Storm、Spark、Flink)
大数据背景
分布式:服务间出现跨机器、跨进程通信统一称为分布式
- 存储
- 单机存储:容量限制、扩展性差、数据灾备问题
- 分布式存储:使用存储的集群实现对海量数据的并行化的读写,提升系统写的吞吐能力。目前针对传统业务领域的分布式文件存储方案有 文件存储、块存储。
- 计算(分析)
- 单机分析/计算:速度慢,受限于单机存储的内存、CPU、网络等因素限制
- 分布式计算:将计算任务交给专门的计算集群负责任务的计算。打破单机计算的瓶颈,实现并行计算,模拟多核CPU的计算能力。可以实现在一定的时间内达到对数据的有效分析。
Hadoop 诞生
为了解决海量数据引发的一系列问题,人们通过借鉴Googl发布Google File System和simple Data processing on large cluster的论文在早期的Nutch项目中实现了Hadoop的雏形,早期在Nutch中有两个板块:NDFS(Nutch Distribute File System)、MapReduce分别解决该工程的存储和计算两个问题,而后将该板块冲Nutch中剥离形成独立的模块,最后更名为Hadoop。
- HDFS :Hadoop Distribute File System 分布式文件存储。
- MapReduce :
分发-->汇总
,MapReduce是hadoop中通用的分布式并行计算框架
人称Hadoop之父的
Doug Cutting
,Apache软件基金会主席,是Lucene、Nutch 、Hadoop等项目的发起人。最开始Hadoop只是Apache Lucene的子项目Nutch的一部分。Lucene
是全球第一个开源的全文检索引擎工具包,Nutch
基于Lucene,并具有网页抓取和解析的功能,可以实现一个搜索引擎的开发,但是如果投入使用的话就必须在极短时间内做出反应,并且能够实现短时间内对亿级数量的网页进行分析处理,这就需要考虑分布式任务处理、故障恢复、负载均衡这些问题。后来Doug Cutting 借鉴谷歌的Google File System
和MapReduce:Simplified Data Processing On Large Clusters
两篇论文,移植了其中的技术,并将其命名为:Hadoop。
下载地址:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
环境搭建–基于CentOS7搭建
环境准备
- 安装虚拟器并且安装CentOS-7 64位
详见:Linux操作系统之CentOS7安装图文详细教程 - 安装JDK,并且配置环境变量
- JDK下载:
链接:百度网盘 提取码:thmn
①以rpm方式安装JDK
[root@CentOS ~]# rpm -ivh jdk-8u191-linux-x64.rpm
警告:jdk-8u191-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:jdk1.8-2000:1.8.0_191-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
默认情况乱下,JDK安装在
/usr/java
路径下
②配置环境变量
[root@CentOS ~]# vi .bashrc
JAVA_HOME=/usr/java/latest
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
# 按键盘esc shift+zz保存退出
# 使用source命令重新加载变量
[root@CentOS ~]# source ~/.bashrc
- 配置主机名
[root@CentOS ~]# vi /etc/hostname
CentOS
修改完成主机名之后需要
reboot
重启
- 配置主机名与IP的映射关系
- ① 查看ip
[root@CentOS ~]# ip addr # CentOS6命令为 ifconfig
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:3c:e6:31 brd ff:ff:ff:ff:ff:ff
inet 192.168.73.130/24 brd 192.168.73.255 scope global noprefixroute dynamic ens33
valid_lft 1427sec preferred_lft 1427sec
inet6 fe80::fffe:2129:b1f8:2c9b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
可以看到ens33这一块网卡的地址为192.168.73.130
然后再/etc/hosts
中映射主机名和IP的关系.
[root@CentOS ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 在末尾加入如下内容
192.168.73.130 CentOS
- 配置SSH免密码认证
① 生成认证所需的公私钥对
[root@CentOS ~]# ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KIx5N+++qLzziq6LaCBT2g5Dqcq0j+TxGV3jJXs7cwc root@CentOS
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . |
| o.+ . |
|o+o + ++S. |
|O....ooo= E |
|*B.. . o.. . |
|*+=o+ o.o.. . |
|**++=*o.+o+ . |
+----[SHA256]-----+
② 添加信任列表,继而实现免密码认证
[root@CentOS ~]# ssh-copy-id CentOS
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'centos (192.168.73.130)' can't be established.
ECDSA key fingerprint is SHA256:WnqQLGCjyJjgb9IMEUUhz1RLkpxvZJxzEZjtol7iLac.
ECDSA key fingerprint is MD5:45:05:12:4c:d6:1b:0c:1a:fc:58:00:ec:12:7e:c1:3d.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@centos's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'CentOS'"
and check to make sure that only the key(s) you wanted were added.
③ 测试是否设置ssh免密码成功
[root@CentOS ~]# ssh root@CentOS # CentOS为之前所配置的主机名
Last failed login: Fri Sep 25 14:19:39 CST 2020 from centos on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri Sep 25 11:58:52 2020 from 192.168.73.1
如果无需输入密码说明SSH免密码认证成功!
- 关闭防火墙
[root@CentOS ~]# systemctl stop firewalld.service # 关闭服务
[root@CentOS ~]# systemctl disable firewalld.service # 关闭开机自启
[root@CentOS ~]# firewall-cmd --state # 查看防火墙状态
not running
HADOOP安装
- 解压并安装Hadoop,下载
Hadoop下载 - 解压
[root@CentOS ~]# tar -zxf hadoop-2.9.2.tar.gz -C /usr/ # 将Hadoop安装至/usr/ 目录下
- 配置HADOOP_HOME环境变量
[root@CentOS ~]# vi .bashrc # 配置环境变量
JAVA_HOME=/usr/java/latest
HADOOP_HOME=/usr/hadoop-2.9.2/
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
export HADOOP_HOME
# esc shift+zz保存退出
# 重新加载HADOOP_HOME环境变量
[root@CentOS ~]# source .bashrc
- 配置Hadoop配置文件etc/hadoop/{core-site.xml、hdfs-site.xml、slaves}
①配置core-site.xml
[root@CentOS ~]# cd /usr/hadoop-2.9.2/
[root@CentOS hadoop-2.9.2]# vi etc/hadoop/core-site.xml
<!--nn访问入口-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://CentOS:9000</value>
</property>
<!--hdfs工作基础目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop-2.9.2/hadoop-${user.name}</value>
</property>
</configuration>
②配置hdfs-site.xml
[root@CentOS ~]# cd /usr/hadoop-2.9.2/
[root@CentOS hadoop-2.9.2]# vi etc/hadoop/hdfs-site.xml
<configuration>
<!--block副本因子-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置Sencondary namenode所在物理主机-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>CentOS:50090</value>
</property>
</configuration>
③配置slaves文本文件
CentOS
- 启动HDFS系统
①在第一次启动HDFS系统的时候,需要对系统做一次格式化,主要为后续的启动做准备,这里需要注意只有再第一次启动的时候才需要这么做,以后再次启动HDFS的时候可以忽略这一步骤!
[root@CentOS ~]# hdfs namenode -format
...
20/09/25 14:31:23 INFO common.Storage: Storage directory /usr/hadoop-2.9.2/hadoop-root/dfs/name has been successfully formatted.
...
在创建HDFS中NameNode服务启动时候需要加载的镜像文件。
②启动HDFS服务
启动脚本放置再sbin目录下,因为我们已经将sbin目录设置到PATH中了,所以可以直接使用start-dfs.sh
脚本启动HDFS,如果想关闭HDFS系统可以使用stop-dfs.sh
[root@CentOS ~]# start-dfs.sh
Starting namenodes on [CentOS]
CentOS: starting namenode, logging to /usr/hadoop-2.9.2/logs/hadoop-root-namenode-CentOS.out
CentOS: starting datanode, logging to /usr/hadoop-2.9.2/logs/hadoop-root-datanode-CentOS.out
Starting secondary namenodes [CentOS]
CentOS: starting secondarynamenode, logging to /usr/hadoop-2.9.2/logs/hadoop-root-secondarynamenode-CentOS.out
启动成功以后,用户可以使用JDK自带的jsp
指令查看java进程,正常可以看到DataNode、NameNode、SecondaryNameNode三个服务
[root@CentOS ~]# jps
3457 DataNode
3691 SecondaryNameNode
3325 NameNode
4237 Jps
[root@CentOS ~]#
最后用户可以访问NameNode服务内嵌的WEB页面,查看HDFS的运行状态,默认该服务的监听端口是50070
,访问效果如下:
http://虚拟机主机ip地址:50070
看到如上页面说明Hadoop环境搭建成功!
– End –