一 大数据概论
1️⃣概念
大数据是指无法在一定时间范围
内用常规的软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发现力和流程优化能力的海量,高增长率和多样化的信息资产
.
2️⃣解决的问题
海量数据的存储
和海量数据的分析计算
问题.
3️⃣存储单位(按照从小到大的顺序排列)
单位 : bit<Byte<K<MB<GB<TB
<PB
<EB
<ZB<YB<BB<NB<DB
4️⃣进制换算
1bit * 8 = 1Byte * 1024 = 1K * 1024 = 1MB * 1024 = 1GB ......
5️⃣大数据特点
1.大量 : 截止目前,人类生产的所有印刷材料的数据量大约200PB
,而历史上全人类总共说过的话的数据量大约是5EB
.当前,典型个人计算机硬盘的容量为TB
量级,而一些大企业的数据量已经接近EB
量级;
2. 高速 : 这是大数据区分于传统挖掘的最显著特征.根据IDC的"数字宇宙"的报告,预计到2020年,全球数据使用量将达到35.2ZB
.在如此海量的数据面前,处理数据的效率就是企业的生命.
3. 多样 : 这种类型的多样性也让数据被分为结构化数据和非结构化数据.相对于以往便于存储的以数据库,文本为主的结构化数据,非结构化数据越来越多
,包括网络日志,音频,视频,图片,地理位置信息等
这些多类型的数据对数据的处理能力提出了更高的要求.
4. 低价值密度 : 价值密度的高低与数据总量的大小成反比.比如在一天的监控视频中我们只关心其中某一个时间段所发生的事情,如何快速对有价值的数据"提纯"称为目前大数据背景下待解决的难题
.
6️⃣大数据应用场景
1. 物流仓储 :大数据分析系统助力商家精细化运营,提升销量,节约成本.
2. 零售 : 分析用户消费习惯,为用户购买商品提供方便,从而提升商品销量.
3. 旅游 : 深度结合大数据能力与旅游行业需求,共建旅游产业智慧管理,智慧服务和智慧营销的未来.
4. 商品广告推荐 : 给用户推荐可能喜欢的商品.
5. 保险 : 海量数据挖掘及风险预测,助力保险行业精准营销,提升精细化定价能力.
6. 金融 : 多维度体现用户特征,帮助金融机构推荐优质客户,防范欺诈风险.
7. 人工智能 : 无人驾驶,BI等.
8. 其他行业 : 比如房产等.
7️⃣大数据部门常见组织结构(适用于部分企业)
二 Hadoop简介
1️⃣Hadoop是什么?
2️⃣Hadoop发展历史
Hadoop百度百科
3️⃣Hadoop三大发行版本介绍
1. Hadoop三大发行版本:Apache
、Cloudera
、Hortonworks
。
Apache
版本最原始(最基础)的版本,对于入门学习最好。
Cloudera
在大型互联网企业中用的较多。
Hortonworks
文档较好。
2.Apache Hadoop
官网地址:http://hadoop.apache.org/releases.html
下载地址:https://archive.apache.org/dist/hadoop/common/
3.Cloudera Hadoop
官网地址:https://www.cloudera.com/downloads/cdh/5-10-0.html
下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/
4.Hortonworks Hadoop
官网地址:https://hortonworks.com/products/data-center/hdp/
下载地址:https://hortonworks.com/downloads/#data-platform
4️⃣Hadoop的优势5️⃣Hadoop的组成1.HDFS架构概述
2.YARN架构概述
3.MapReduce架构概述
MapReduce
将计算过程分为两个阶段:Map
和Reduce
.
1)Map
阶段并行处理输入数据
2)Reduce
阶段对Map
结果进行汇总6️⃣大数据技术生态体系图中涉及的技术名词解释如下:
1)Sqoop
:Sqoop
是一款开源的工具,主要用于在Hadoop
、Hive
与传统的数据库(MySql
)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL
,Oracle
等)中的数据导进到Hadoop
的HDFS
中,也可以将HDFS
的数据导进到关系型数据库中。
2)Flume
:Flume
是Cloudera
提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume
支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume
提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
3)Kafka
:Kafka
是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
(1)通过O(1)
的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
(2)高吞吐量:即使是非常普通的硬件Kafka
也可以支持每秒数百万的消息。
(3)支持通过Kafka
服务器和消费机集群来分区消息。
(4)支持Hadoop
并行数据加载。
4)Storm
:Storm
用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
5)Spark
:Spark
是当前最流行的开源大数据内存计算框架。可以基于Hadoop
上存储的大数据进行计算。
6)Oozie
:Oozie
是一个管理Hdoop
作业(job
)的工作流程调度管理系统。
7)Hbase
:HBase
是一个分布式的、面向列的开源数据库。HBase
不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8)Hive
:Hive
是基于Hadoop
的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL
查询功能,可以将SQL
语句转换为MapReduce
任务进行运行。 其优点是学习成本低,可以通过类SQL
语句快速实现简单的MapReduce
统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9)R
语言:R
是用于统计分析、绘图的语言和操作环境。R
是属于GNU
系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
10)Mahout
:Apache Mahout
是个可扩展的机器学习和数据挖掘库。
11)ZooKeeper
:Zookeeper
是Chubby
一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。ZooKeeper
的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
7️⃣推荐系统框架图
三 Hadoop运行环境搭建
1️⃣虚拟机环境初始化
- 克隆虚拟机
- 修改克隆虚拟机的静态IP
- 修改主机名
- 关闭防火墙
- 创建一般用户
- 配置一般用户具有root权限
- 在/opt目录下创建文件夹
① 在/opt目录下创建module、software文件夹
② 修改module、software文件夹的所有者及组
#!/bin/bash
#环境初始化脚本
#读取用户输入
read -t 10 -p "Enter your user name in 10 seconds " username
read -t 10 -p "Enter your folder name in 10 seconds " foldernameone
read -t 10 -p "Enter your folder name in 10 seconds " foldernametwo
read -t 10 -p "Enter your starting value in 10 seconds " minvalue
read -t 10 -p "Enter your end value in 10 seconds " maxvalue
read -t 10 -p "Enter your ip number in 10 seconds " ip
#关闭防火墙
echo "关闭防火墙"
service iptables stop
chkconfig iptables off
#创建一个一般用户
echo "创建一般用户"
useradd $username
echo "123456" | passwd $username --stdin
#创建目录
echo "创建目录"
mkdir /opt/$foldernameone /opt/$foldernametwo
chown $username:$username /opt/$foldernameone /opt/$foldernametwo
#加入Sudoers
echo "加入Sudoers"
sed -i "/^root/a $username ALL=(ALL) NOPASSWD: ALL" /etc/sudoers
lan=`ifconfig | grep Bcast | cut -d . -f 3`
#改Host
echo "修改hosts"
for ((i=$minvalue;i<$maxvalue;i++))
do
echo "192.168.$lan.$i hadoop$i" >> /etc/hosts
done
#改网卡
echo "修改网卡"
cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.$lan.$ip
PREFIX=24
GATEWAY=192.168.$lan.2
DNS1=192.168.$lan.2
NAME=eth0
EOF
#改主机名
echo "修改主机"
sed -i "s/HOSTNAME=.*/HOSTNAME=hadoop$ip/g" /etc/sysconfig/network
#改网卡脚本
echo "修改网卡"
sed -i '/eth0/d' /etc/udev/rules.d/70-persistent-net.rules
sed -i 's/eth1/eth0/g' /etc/udev/rules.d/70-persistent-net.rules
#重启使配置生效
reboot
2️⃣安装JDK
- 查询是否安装JDK
rpm -qa | grep java
- 卸载系统自带JDK
rpm -e software_name
- 下载JDK到指定目录
/opt/sofrware
- 解压JDK到指定目录
/opt/module
目录下tar -zxvf software_name -C /opt/module
- 配置JDK环境变量
5.1 获取JDK路径pwd
5.2 打开/etc/profile
文件
5.3 在profile文件末尾添加JDK路径#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin
- 保存退出
:wq
- 重新加载配置文件使修改生效
source /etc/profile
- 测试JDK是否安装成功
java -version
- 如果以上步骤没有问题第8步不能正常使用则重启尝试
3️⃣安装Hadoop
- 下载Hadoop到/opt/software目录此处版本为2.7.2
- 进入到Hadoop安装包路径下
cd /opt/software/
- 解压安装文件到/opt/module下
tar -zxvf software_name -C /opt/module
- 配置Hadoop环境变量
4.1 获取Hadoop安装路径pwd
4.2 打开/etc/profile文件vim /etc/profile
4.3 在profile文件末尾添加环境变量#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
- 保存后退出
:wq
- 重新加载配置文件使修改生效
source /etc/profile
- 测试是否安装成功
hadoop version
- 如果以上步骤没有问题第7步不能正常使用则重启尝试
4️⃣Hadoop目录结构
- 查看Hadoop目录结构
ll /opt/module/hadoop-2.7.2 总用量 52 drwxr-xr-x. 2 xxx xxx 4096 5月 22 2017 bin drwxr-xr-x. 3 xxx xxx 4096 5月 22 2017 etc drwxr-xr-x. 2 xxx xxx 4096 5月 22 2017 include drwxr-xr-x. 3 xxx xxx 4096 5月 22 2017 lib drwxr-xr-x. 2 xxx xxx 4096 5月 22 2017 libexec -rw-r--r--. 1 xxx xxx 15429 5月 22 2017 LICENSE.txt -rw-r--r--. 1 xxx xxx 101 5月 22 2017 NOTICE.txt -rw-r--r--. 1 xxx xxx 1366 5月 22 2017 README.txt drwxr-xr-x. 2 xxx xxx 4096 5月 22 2017 sbin drwxr-xr-x. 4 xxx xxx 4096 5月 22 2017 share
- 重要目录简介
(1)bin
目录:存放对Hadoop
相关服务(HDFS
,YARN
)进行操作的脚本;
(2)etc
目录:Hadoop
的配置文件目录,存放Hadoop
的配置文件;
(3)lib
目录:存放Hadoop
的本地库(对数据进行压缩解压缩功能);
(4)sbin
目录:存放启动或停止Hadoop
相关服务的脚本;
(5)share
目录:存放Hadoop
的依赖jar包、文档、和官方案例;
四 Hadoop运行模式
Hadoop
运行模式包括 : 本地模式 伪分布式模式以及完全分布式模式.
Hadoop
官方网站 :http://hadoop.apache.org
1️⃣本地运行模式
- 官方
Grep
案例
① 在hadoop-2.7.2
文件下面创建一个input
文件夹mkdir input
② 将
hadoop
的xml
配置文件复制到input
cp etc/hadoop/*.xml input
③ 执行
share
目录下的MapReduce
程序bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
④ 查看输出结果
cat output/*
- 官方
WordCount
案例
① 在hadoop-2.7.2
文件下面创建一个wcinput
文件夹mkdir wcinput
② 在
wcinput
文件下创建一个wc.input
文件touch wc.input
③ 编辑
wc.input
文件vim wc.input # 在文件中输入如下内容 hadoop yarn hadoop mapreduce test test # : wq 保存退出
④ 回到
Hadoop
目录/opt/module/hadoop-2.7.2
⑤ 执行程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
⑥ 查看结果
cat wcoutput/part-r-00000 # 以下为输出内容 test 2 hadoop 2 mapreduce 1 yarn 1
2️⃣伪分布式运行模式
- 启动
HDFS
并运行MapReduce
程序
- 分析
(1)配置集群
(2)启动、测试集群增、删、查
(3)执行WordCount
案例- 执行步骤
(1)配置集群
(a)配置:hadoop-env.sh
Linux
系统中获取JDK的安装路径:echo $JAVA_HOME
修改路径:export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置:core-site.xml
(c)配置:hdfs-site.xml
(2)启动集群
(a)格式化NameNode
(第一次启动时格式化,以后就不要总格式化):bin/hdfs namenode -format
(b)启动NameNode
:sbin/hadoop-daemon.sh start namenode
(c)启动DataNode
:sbin/hadoop-daemon.sh start datanode
(3)查看集群
(a)查看是否启动成功 :jps
(注意:jps
是JDK
中的命令,不是Linux
命令。不安装JDK
不能使用jps
)
(b)web
端查看HDFS
文件系统 :http://hadoop101:50070/dfshealth.html%23tab-overview
注意:如果不能查看,看如下帖子处理http://www.cnblogs.com/zlslch/p/6604189.html
(c)查看产生的Log
日志
当前目录:/opt/module/hadoop-2.7.2/logs
(d)思考:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。
(4)操作集群
(a)在HDFS
文件系统上创建一个input
文件夹 :bin/hdfs dfs -mkdir -p /user/xxx/input
(b)将测试文件内容上传到文件系统上 :bin/hdfs dfs -put wcinput/wc.input
(c)查看上传的文件是否正确 :bin/hdfs dfs -ls /user/xxx/input/
bin/hdfs dfs -cat /user/xxx/ input/wc.input
(d)运行MapReduce程序 :bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/xxx/input/ /user/xxx/output
(e)查看输出结果 :bin/hdfs dfs -cat /user/xxx/output/*
- 启动
YARN
并运行MapReduce
程序
- 分析
(1)配置集群在YARN
上运行MR
(2)启动、测试集群增、删、查
(3)在YARN
上执行WordCount
案例- 执行步骤
(1)配置集群
(a)配置yarn-env.sh
配置一下JAVA_HOME
:export JAVA_HOME=/opt/module/jdk1.8.0_144
(b)配置yarn-site.xml
(c)配置:mapred-env.sh
配置一下JAVA_HOME
:export JAVA_HOME=/opt/module/jdk1.8.0_144
(d)配置: (对mapred-site.xml.template
重新命名为)mapred-site.xml
mv mapred-site.xml.template mapred-site.xml vim mapred-site.xml <!-- 指定MR运行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
(2)启动集群
(a)启动前必须保证NameNode
和DataNode
已经启动
(b)启动ResourceManager
:sbin/yarn-daemon.sh start resourcemanager
(c)启动NodeManager
:sbin/yarn-daemon.sh start nodemanager
(3)集群操作
(a)YARN
的浏览器页面查看 :http://hadoop101:8088/cluster
(b)删除文件系统上的output
文件 :bin/hdfs dfs -rm -R /user/xxx/output
(c)执行MapReduce
程序bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/xxx/input /user/xxx/output
(d)查看运行结果 :bin/hdfs dfs -cat /user/xxx/output/*
- 配置历史服务器 : 为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下
- 配置
mapred-site.xml
:vim mapred-site.xml
# 在该文件里面增加如下配置 <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property>
- 启动历史服务器 :
sbin/mr-jobhistory-daemon.sh start historyserver
- 查看历史服务器是否启动 :
jps
- 查看
JobHistory
:http://hadoop101:19888/jobhistory
- 配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:
- 配置
yarn-site.xml
:vim yarn-site.xml
# 在该文件里面增加如下配置。 <!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
- 关闭
NodeManager
、ResourceManager
和HistoryServer
sbin/yarn-daemon.sh stop resourcemanager sbin/yarn-daemon.sh stop nodemanager sbin/mr-jobhistory-daemon.sh stop historyserver
- 启动
NodeManager
、ResourceManager
和HistoryServer
sbin/yarn-daemon.sh start resourcemanager sbin/yarn-daemon.sh start nodemanager sbin/mr-jobhistory-daemon.sh start historyserver
- 删除
HDFS
上已经存在的输出文件 :bin/hdfs dfs -rm -R /user/xxx/output
- 执行
WordCount
程序 :hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/xxx/input /user/xxx/output
- 查看日志 :
http://hadoop101:19888/jobhistory
- 配置文件说明
Hadoop
配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。(1)默认配置文件:
(2)自定义配置文件:
core-site.xml
、hdfs-site.xml
、yarn-site.xml
、mapred-site.xml
四个配置文件存放在$HADOOP_HOME/etc/hadoop
这个路径上,用户可以根据项目需求重新进行修改配置。