我接触大数据准确来说是在我上大二的时候,我在跟我的系主任一起做项目的时候,那个时候处理的国外的数据,大约是由500W的数据,当时我用的舍友的笔记本,直接卡到打不开,也就是在那个时候,才有了大数据的概念。
好了,进入正题!
1.大数据概念
大数据:指无法在一定时间范围内用日常的软件工具进行分析、处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长和多样化的信息资产。
所以学习大数据就是主要解决海量数据的存储和海量数据的分析计算问题。
2.大数据特点
大数据的特点主要是Volume(大量)、Velocity(高速)、Variety(多样)、及(value)低价值密度,简称4V。
3.大数据的应用场景
其实我本身是统计学出身,我们统计学出身的人有个习惯,就是喜欢研究数据之间的关联性,这大概也许是投身进入大数据的原因。
大数据现在已经充斥进入各行各业,物流仓储(比如京东)、零售(啤酒与尿布多经典啊)、旅游业、广告推荐(大家在购物App上的感受就不用我说了吧)、保险业、金融业,以及现在大家开始关注的人工智能,都是基于大数据的。
1.Hadoop是什么
既然大家看到了这里,也就证明大家对数据产生了兴趣,那么我就真正的带大家进入到大数据,首先我们要先来讲Hadoop,为什么呢?因为Hadoop的出现就是解决我们以往无法处理大量的数据而诞生的。
Hadoop是一个由Apache基金协会所开发的分布式系统基础架构,主要是为了解决海量数据的存储和海量数据的分析计算问题,广义上来说,Hadoop是指一个更加广泛的概念----Hadoop生态圈。一会我会给大家展示Hadoop的生态圈。
2.Hadoop的优势
现在我们来看以下Hadoop的优势,Hadoop优势主要是4高
(1)高可靠性:Hadoop底层维护了多个数据副本,所以就算Hadoop某个数据存储出现故障,也不会导致数据的丢失。
(2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
(3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
(4)高容错性:能够自动将失败的任务重新分配。
3.Hadoop的组成
Hadoop主要分为Common(辅助工具)、HDFS(数据存储)、Yarn(资源调度) 和 MapReduce(计算) 四个部分,这个是在2.0更新后的,在2.0之前的MapReduce和Yarn是在一起的,大家可以参考以下图片
主要是由三个部分组成:
(1)NameNode:存储文件的元数据,如文件名、文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等,大家理解成目录就成了。
(2)DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。
(3)SecondaryNode:每隔一段时间对NameNode元数据备份,它的角色就是NameNode的助手。
5.YARN架构概述
YARN由ResourceManager、NodeManager、ApplicationMaster、Container组成。
(1)ResourceManager主要作用如下:
(a)处理客户端请求
(b)监控NodeManager
(c)启动或监控ApplicationManager
(d)资源的分配与调度
(2)NodeManager主要作用如下:
(a)管理单个结点上的资源
(b)处理来自ResourceManager的命令
(c)处理来自ApplicationMaster的命令
(3)ApplicationMaster作用如下
(a)负责数据的切分
(b)为应用程序申请资源并分配给内部的任务
(c)任务的监控与容错
(4)Container
它是YARN上的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
5.MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
(1)Map阶段并行处理输入数据
(2)Reduce阶段对Map结果进行汇总
6.大数据技术生态体系
大数据不是一个单单的一个框架就能够的,他需要一整套的系统,接下来就带大家看看大数据生态体系,大家先参考下图
上面的这个图就是我们的一个大数据的生态系统,这里就不每一个给大家介绍了。
接下来给大家讲一下Hadoop的运行环境怎么搭建
1.虚拟机模板环境准备
(1)准备一台模板虚拟机hadoop100,虚拟环境配置要求如下:
我用的是Linux系统环境是CentOS7.5哈,好啦,开始准备模板虚拟机。
模板虚拟机:内存4G,硬盘50G,安装必要环境,为安装Hadoop集群做准备。[root@hadoop100 ~]# yum install -y epel-release [root@hadoop100 ~]# yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
因为我们的虚拟机都是最小化安装的,所以它没有vim编辑器等插件,所以需要上面的代码帮助我们下载以供我们下面的配置安装!!但是是需要我们虚拟机连上网的,一般情况下虚拟机安装好后是可以连网的,大家可以测试一下
[root@hadoop100 ~]# ping www.baidu.com
(2)关闭防火墙,关闭防火墙开机自启
[root@hadoop100 ~]# systemctl stop firewalld [root@hadoop100 ~]# systemctl disable firewalld
(3)创建atguigu用户,并修改atguigu用户的密码
[root@hadoop100 ~]# useradd atguigu [root@hadoop100 ~]# passwd atguigu
(4)修改atguigu用户具有root权限,方便后期加sudo执行root权限的命令
[root@hadoop100 ~]# vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL atguigu ALL=(ALL) NOPASSWD:ALL
(5)在/opt目录下创建文件夹,并修改所属主和所属组
[root@hadoop100 ~]# mkdir /opt/module [root@hadoop100 ~]# mkdir /opt/software [root@hadoop100 ~]# chown atguigu:atguigu /opt/module [root@hadoop100 ~]# chown atguigu:atguigu /opt/software
(6)卸载虚拟机自带的open JDK(可不操作)
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
(7)重启虚拟机
[root@hadoop100 ~]# reboot
2.克隆虚拟机
(1)利用模板机hadoop100,克隆三台虚拟机:Hadoop102、hadoop103、hadoop104
(2)修改虚拟机IP,以下以hadoop102举例
修改克隆虚拟机的静态IP[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
改成
DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static NAME="ens33" IPADDR=192.168.202.102 PREFIX=24 GATEWAY=192.168.202.2 DNS1=192.168.202.2
这里的每个人的网关不一样,大家根据自己电脑生成的自行修改,保证一致就可以了
(3)修改克隆机主机名[root@hadoop100 ~]# vim /etc/hostname hadoop102
配置Linux克隆机主机名映射hosts文件,打开/etc/hosts
[root@hadoop100 ~]# vim /etc/hosts #添加如下内容 192.168.1.100 hadoop100 192.168.1.101 hadoop101 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 192.168.1.105 hadoop105 192.168.1.106 hadoop106 192.168.1.107 hadoop107 192.168.1.108 hadoop108
(4)重启克隆机hadoop102
[root@hadoop100 ~]# reboot
(5)修改windows的主机映射文件(hosts文件)
这里操作的是windows10系统,进入C:\Windows\System32\drivers\etc路径
打开hosts文件并添加如下内容192.168.1.100 hadoop100 192.168.1.101 hadoop101 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 192.168.1.105 hadoop105 192.168.1.106 hadoop106 192.168.1.107 hadoop107 192.168.1.108 hadoop108
3.在hadoop102上安装hadoop以及jdk
对了,这里我使用的是finalshell这个工具,大家把下载好的jdk和hadoop拖拽到上面创建好的software目录下,可参考下图:
标红的地方点击就可以上传压缩包了,上传成功后我下面的标红的地方就会有两个压缩包
然后进入到software路径下,进行解压
[atguigu@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/ [atguigu@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
解压成功后,我们需要配置jdk和hadoop的环境变量。
(1)新建一个/etc/profile.d/my_env.sh文件[atguigu@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin #HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
(2)保存退出后加载一下配置文件,让新的环境变量PATH生效
[atguigu@hadoop102 ~]$ source /etc/profile
(3)测试安装是否成功
[atguigu@hadoop102 ~]$ java -version [atguigu@hadoop102 hadoop-3.1.3]$ hadoop version Hadoop 3.1.3
如果以上都可以那我们的虚拟机可克隆成功了!!!大家可以接下来的学习了。
Hadoop的运行模式包括:本地模式、伪分布模式以及完全分布式模式。
本地模式和伪分布式模式就不给大家展示了,我们在实际开发中都是完全分布式,那就直接进入正题。
完全分布式我们一共分为9个步骤来进行
1)准备3台客户机(关闭防火墙、静态ip、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群
前5个步骤我在上面已经给大家配置完毕了,大家参照步骤准备好配置好的3台虚拟机就行了,在配置集群之前,我先编写了一个集群分发脚本和配置ssh(免密登录到其他虚拟机)。
在atguigu用户目录下创建xsync文件
[atguigu@hadoop102 ~]$ vim xsync
在该文件中编写如下代码
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
修改脚本xsync具有执行权限
[atguigu@hadoop102 bin]$ chmod +x xsync
将脚本复制到/bin目录下,以便全局调用
[atguigu@hadoop102 bin]$ sudo cp xsync /bin/
进入到atguigu的家目录下,输入以下代码,生成id_rsa(私钥)、id_rsa.pub(公钥)
[atguigu@hadoop102 ~]$ cd .ssh [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
然后连接一下自己
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
这个时候就会生成一个授权authorized_keys
[atguigu@hadoop102 .ssh]$ ll total 16 -rw-------. 1 atguigu atguigu 798 Sep 2 15:08 authorized_keys -rw-------. 1 atguigu atguigu 1679 Sep 2 15:02 id_rsa -rw-r--r--. 1 atguigu atguigu 399 Sep 2 15:02 id_rsa.pub -rw-r--r--. 1 atguigu atguigu 561 Sep 2 13:11 known_hosts
最后一步最关键,分发公钥和私钥
[atguigu@hadoop102 ~]xsync .ssh
好啦,免密ssh就配置好啦!
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SNN DataNode |
YARN | NodeManager | RM NM | NodeManager |
SNN是SecondaryNameNode的缩写RM是ResourceManager的缩写,NM是NodeManager的缩写。
(1)核心配置文件
配置core-site.xml[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop [atguigu@hadoop102 hadoop]$ vim core-site.xml
文件的内容如下
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9820</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> <!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 --> <property> <name>hadoop.proxyuser.atguigu.hosts</name> <value>*</value> </property> <!-- 配置该atguigu(superUser)允许通过代理用户所属组 --> <property> <name>hadoop.proxyuser.atguigu.groups</name> <value>*</value> </property> </configuration>
(2)HDFS配置文件
配置hdfs-site.xml[atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration>
(3)YARN配置文件
配置yarn-site.xml[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- yarn容器允许分配的最大最小内存 --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <!-- yarn容器允许管理的物理内存大小 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <!-- 关闭yarn对物理内存和虚拟内存的限制检查 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
(4)MapReduce配置文件
配置mapred-site.xml[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(5)在集群上分发已经配置好的hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
配置workers,这个地方主要是配置DataNode从机的启动
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102 hadoop103 hadoop104
同步所有节点配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
启动集群
注意:如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)[atguigu@hadoop102 ~]$ hdfs namenode -format
接下来启动HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
启动YARN(在配置了ResourceManager的节点(hadoop103))
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
至此,我们的集群就启动成功啦!!!大家可以测试一下,上传一个文件
[atguigu@hadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
然后去端口查看就可以啦,感谢各位阅读嚯。