1 大数据概论
1.1 大数据概念
大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大数据主要解决海量数据的存储和分析计算问题。
1.2 大数据特点(4V)
- Volume 大量
bit, byte, kb, mb, gb, tb, pb, eb, zb, yb, bb, nb, db - Velocity 高速
增长速度快,双十一瞬间交易量几百亿 - Variety 多样
结构化和非结构化数据都有,网络日志、音频、视频、图片、地理位置信息等 - Value 低价值密度
数据量越多,有价值的数据密度越少,需要提纯。
1.3 应用场景
- 物流仓储:大数据分析助力精细化运营、提升销量、节约成本。
- 零售:分析用户消费习惯,提升销量,例如纸尿布+啤酒。
- 旅游:深度结合大数据与旅游行业需求,智慧管理、智慧服务、智慧营销。
- 商品广告推荐:给用户推荐可能购买的商品。
- 保险:海量数据挖掘及风险预测。
- 金融:分析用户特征,挑选优质客户,防范欺诈风险。
- 人工智能:机器学习,数据分析。
1.4 部门业务流程
- 产品人员提出需求,例如统计总用户数、日活跃用户数、回流用户数等。
- 数据部门搭建数据平台、分析数据指标
- 数据可视化,报表、邮件、大屏幕等。
1.5 部门组织结构
- 平台组
- Hadoop、Flume、Kafka、HBase、Spark等框架平台搭建
- 集群性能监控
- 集群性能调优
- 数据仓库组
- ETL工程师-数据清洗
- Hive工程师-数据分析、数据仓库建模
- 数据挖掘组
- 算法工程师
- 推荐系统工程师
- 用户画像工程师
- 报表开发组
- JavaEE工程师
2 Hadoop概论
2.1 Hadoop是什么
- Hadoop是由Apache基金开发的分布式系统基础架构。
- 主要解决海量数据的存储和分析计算分体。
- 广义上Hadoop通常指Hadoop生态圈,包括:hadoop(hdfs mapreduse\common)、hive、pig、solr、hbase、zookeeper等。
2.2 三大发行版本
- Apache版,最原始最基础的版本;
- Cloudera,在大型互联网企业中使用的较多;
- Hortonworks,文档比较友好;
2.3 优势
- 高可靠性:底层维护了多个数据副本;
- 高扩展性:可方便扩展数以千计的节点;
- 高效性:MapReduce思想下,Hadoop是并行工作的,可以加快任务处理速度;
- 高容错性:可自动将失败的任务重新分配;
2.4 组成
- Hadoop1.x组成
- MapReduce:计算 + 资源调度
- HDFS:数据存储
- Common:辅助工具
- Hadoop2.x组成
- MapReduce:计算
- Yarn:资源调度
- HDFS:数据存储
- Common:辅助工具
2.4.1 HDFS架构概述
- NameNode(nn):存储文件的元数据,如文件名、文件目录结构、文件属性,以及每个文件的块列表和块所在的DataNode等。
- DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
- SecondaryNameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
2.4.2 YARN架构

- Resource Manager 主要作用
- 处理客户端请求
- 监控Node Manager
- 启动或监控Application Master
- 资源的分配与调度
- Node Manager 主要作用
- 管理单个节点上的资源
- 处理来自Resource Manager的命令
- 处理来自Application Master的命令
- Application Master 作用
- 负责数据的切分
- 为应用程序申请资源并分配给内部的任务
- 任务的监控与容错
- Container
Container是YARN中的资源抽象,封装了某个节点上的多维资源,如内存、cpu、磁盘、网络等。
2.4.3 MapReduce架构概述
将计算过程分为两个阶段:Map和Reduce:
- Map阶段并行处理输入数据
- Reduce阶段对Map结果进行汇总
2.5 大数据技术生态体系


3 Hadoop运行环境搭建
3.1 虚拟机环境准备
- 克隆/创建虚拟机
- 修改虚拟机的静态IP
- 修改主机名
- 关闭防火墙
- 创建hadoop用户
- 配置hadoop用户具有root权限
- 在
/opt
目录下创建文件夹module、software
,并修改文件夹所有者
cd /opt
# 因为opt在root下,所以需要sudo
sudo mkdir module
sudo mkdir software
sudo chown hadoop:hadoop module/ software/
3.2 安装JDK
如果安装版本低于1.7,则卸载该JDK
# 查询是否安装
rpm -qa | grep java
# 卸载
sudo rpm -e 软件包
# 查看JDK安装路径
which java
将jdk上传到/opt/software
,解压并配置jdk环境变量,这里不再赘述。
3.3 安装Hadoop
hadoop-2.7.2
将hadoop-2.7.2.tar.gz
上传到/opt/software
,然后解压添加环境变量就可以,和JDK安装类似。
cd /opt/software/
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
ls /opt/module/
sudo vi /etc/profile
### 尾部添加
## HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 刷新文件
source /etc/profile
# 验证
hadoop version
# 如果不成功则重启
sync
sudo reboot
3.4 Hadoop目录结构
- bin:存放对Hadoop相关服务进行操作的脚本;
- etc:存放Hadoop的配置文件;
- lib:存放Hadoop的本地库;
- sbin:存放启动或停止Hadoop相关服务的脚本;
- share:存放Hadoop的依赖jar包、文档和官方案例;
4.Hadoop运行模式
Hadoop官方网站:http://hadoop.apache.org/
Hadoop运行模式包括:本地模式、伪分布式模式和完全分布式模式。
4.1 本地运行模式
4.1.1 官方Grep案例
cd /opt/moudle/hadoop-2.7.2
mkdir input
cp etc/hadoop/*.xml input
# 执行MapReduce程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
# 查看结果
cat output/*
4.1.2 官方WorkCount案例
cd /opt/moudle/hadoop-2.7.2
mkdir wcinput
cd wcinput
# 创建文件
touch wc.input
vi wc.input
# 在文件里输入待统计数据
cd /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-0000
4.2 伪分布式模式
4.2.1 启动HDFS并运行MapReduce
-
配置集群
-
配置
hadoop-env.sh
,修改JAVA_HOME
# 查看JDK安装路径 echo $JAVA_HOME # 修改JAVA_HOME vi hadoop-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_144
-
配置
core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
-
配置
hdfs-site.xml
<!-- 指定HDFS副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property>
-
-
启动集群
-
格式化
NameNode
,只有第一次启动时格式化,以后不需要bin/hdfs namenode -format
格式化
NameNode
会产生新的集群id,导致NameNode
和DataNode
的集群id不一致,集群找不到以往数据。格式化NameNode
时一定要先删除data
和log
。 -
启动
NameNode
sbin/hadoop-daemon.sh start namenode
-
启动
DataNode
sbin/hadoop-daemon.sh start datanode
-
可以用
jps
查看启动是否成功
-
-
查看集群
-
查看log日志
在实际使用中遇到bug,可以根据日志去分析。
cd /opt/module/hadoop-2.7.2/logs
-
操作集群
-
在HDFS上创建一个input文件夹
bin/hdfs dfs -mkdir -p /user/chadJ/input
-
将测试文件内容上传到HDFS文件系统
bin/hdfs dfs -put wcinput/wc.input /user/chadJ/input/
-
查看上传文件是否正确
bin/hdfs dfs -ls bin/hdfs dfs -cat /user/chadJ/input/wc.input
-
运行MapReduce程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/chadJ/input/ /user/chadJ/output
-
查看结果
bin/hdfs dfs -cat /user/chadJ/output/*
也可在浏览器中查看。
-
将测试内容下载到本地
bin/hdfs dfs -get /user/chadJ/output/part-r-0000 ./wcoutput/
-
删除输出结果
hdfs dfs -rm -r /user/chadJ/output
-
网友评论