引言
--------------------------------------------------------------------------------------------------------------
“在古时候,人们用牛来拉重物。当一头牛拉不动一根圆木时,人们从来没有考虑过要想方设法培育出一种更强壮的牛。
同理,我们也不该想方设法打造什么超级计算机,而应该千方百计综合利用更多计算机来解决问题。”
——葛蕾丝-霍珀(Grace Hopper)
大数据应用案例分析
--------------------------------------------------------------------------------------------------------------
http://www.cnzz.com
http://www.mafengwo.cn/
大数据框架简介
--------------------------------------------------------------------------------------------------------------
1. 离线部分
-》Hadoop
- Common:封装了大量的API,为后面的模块服务
- HDFS:分布式文件系统,存储海量数据
namenode:
接收用户操作请求,维护文件系统的目录结构
管理文件与block之间的关系,block与DataNode之间的关系,在整个HDFS集群中只有一个并且只有唯一一个处于激活状态的namenode节点
datanode:
存储文件,文件是被分成block存储在磁盘上
为了保证数据安全,文件会有多个副本
周期性的向namenode节点报告它存了那些文件的block
- MapReduce:分布式计算框架,编程模型
- YARN:一个集群资源管理系统,允许任何分布式程序(不仅仅是MapReduce)基于Hadoop集群的数据而运行
-》HBase:非关系型数据库
-》Hive:类SQL语句,数据仓库,用于分析
2. 实时部分
-》Spark
大数据
-------------------------------------------------------------------------------------------------------------
0. 数据是以字节来衡量大小
-》1Byte = 8bit
-》1024B = 1KB
-》1024KB = 1MB
-》1024MB = 1GB
-》1024GB = 1TB
-》1024TB = 1PB
-》1024PB = 1EB
1. 数据来源:
-》用户行为数据(推荐系统)
- 搜索习惯,关键字
- 消费记录,支付宝
-》业务数据
- 公司内部产生的数据
-》爬虫技术采集
- python,java语言实现对网页的抓取
-》生产机器上的日志文件
- 日志文件
2. “大数据胜于好算法”:
-》对于某些应用(譬如根据以往的偏好来推荐电影和音乐),不论算法有多牛,基于小数据的推荐效果往往都不如基于大量可用数据的
一般算法的推荐效果。
3. 现在有了大量数据,我们必须想方设法好好地存储和分析这些数据
Hadoop发展史
-------------------------------------------------------------------------------------------------------------
2002年,Apache Nutch 网页抓取,数十亿存储瓶颈
2003年,GFS论文
2004年,Nutch开发NDFS,既HDFS前身
2004年,Google发表MapReduce论文
2005年,Nutch应用MR,主要算法转移到MR和NDFS运行
2006年,MapReduce和NDFS从Nutch分离,形成Hadoop作为一个独立Lucene子项目
2006年,Doug Cutting加入Yahoo
2008年2月,Yahoo在1万个内核的集群上部署了Hadoop
2008年4月,Yahoo对1T数据进行排序,耗时209秒,集群有910个节点
2008年11月,Google对1T数据排序用了68秒
2009年5月,Yahoo对1T数据排序用了62秒
初识Hadoop
-------------------------------------------------------------------------------------------------------------
官方网站:hadoop.apache.org
概念性的理论
-------------------------------------------------------------------------------------------------------------
1. hadoop2.x和1.x版本的区别
- Hadoop Common: The common utilities that support the other Hadoop modules.
- Hadoop Distributed File System (HDFS?): A distributed file system that provides high-throughput access to application data.
- Hadoop YARN: A framework for job scheduling and cluster resource management.
- Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
2. 2.x的版本中添加了Yarn平台
3. hadoop三大发行版本
- Apache apache顶级项目http://hadoop.apache.org/
- CDH cloudera
- HDP hortonworks
4. 分布式:
- 分布储存
- 分布计算
5. 课程中用的是2.7.3的版本
- 常用版本:2.2.0, 2.5.0, 2.6.5, 2.7.3
Hadoop三种运行模式
-------------------------------------------------------------------------------------------------------------
1. Local (Standalone) Mode 本地模式 开发人员debug调试使用 local把文件存到本地的文件系统中
2. Pseudo-Distributed Mode 伪分布式 开发人员debug调试使用 在本地搭建HDFS,伪分布式,完全分布
3. Fully-Distributed Mode 完全分布式(集群) 生产环境使用 3,5,7,50,如何搭建,!!HA!!高可用性,比如突然有个节点出问题,保证集群还可用
Hadoop环境部署-JDK部分
-------------------------------------------------------------------------------------------------------------
1. 先修改权限
chown -R beifeng:beifeng /opt/
2. 解压JDK到指定的目录下,目录任意,建议不要装在某个用户主目录下
tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
3. 添加环境变量
修改vi /etc/profile文件,配置jdk环境变量
#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile生效文件
4. 验证是否配置成功:java -version
jps命令可以查看java 进程
echo $JAVA_HOME
Hadoop伪分布式环境部署-Hadoop部分
-------------------------------------------------------------------------------------------------------------
1. 解压Hadoop到指定目录下
tar -zxvf hadoop-2.5.0.tar.gz -C /opt/modules/
2. 清理Hadoop的目录,将hadoop/share/doc目录删除,节省磁盘空间,通过这个命令查看df -h
3. 修改hadoop/etc/hadoop/hadoop-env.sh文件
修改hadoop/etc/hadoop/mapred-env.sh文件
修改hadoop/etc/hadoop/yarn-env.sh文件
指定Java安装路径
export JAVA_HOME=/opt/modules/jdk1.7.0_67
4. 注意:hadoop中的四个核心模块对应四个默认配置文件
指定默认的文件系统为HDFS,文件系统的访问入口,namenode所在的机器
9000端口是早期Hadoop 1.x使用的,现在Hadoop 2.x使用的是8020
端口号用于节点直接内部通信,使用RPC通信机制
5. 修改hadoop/etc/hadoop/core-site.xml文件
指定namenode所在的机器节点,指定使用HDFS作为文件系统
<property>
<name>fs.defaultFS</name>
<value>hdfs://hostname:8020</value>
</property>
重新指定默认的工作目录
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.7.3/data/tmp</value>
</property>
6. 注意:/tmp表示临时存储目录,系统每次重启会按照脚本预先设置好的删除里面的文件
重新自定义系统生成的文件路径,/tmp会被清空,无法保证数据文件安全性
7. 修改hadoop/etc/hadoop/hdfs-site.xml文件
指定HDFS文件存储的副本数个数,默认是3个,这里是单台机器就设置为1,这个数字要小于datanode的节点数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
8. 修改hadoop/etc/hadoop/slaves文件
指定从节点的机器位置,添加主机名即可
hostname 比如:bd1.ibeifeng.com
9. 格式化namenode
bin/hdfs namenode -format
10. 启动命令
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
11. 查看HDFS外部UI界面
bigdata-04或者IP地址 跟上50070端口号,外部通信http
dfs.namenode.http-address 50070
12. 测试HDFS环境
创建文件夹,HDFS中有用户主目录的概念,和Linux一样
bin/hdfs dfs -mkdir -p ibf_test/iuput
13. 上传文件到HDFS
bin/hdfs dfs -put etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml /
14. 读取HDFS的文件
bin/hdfs dfs -text /core-site.xml
15. 下载文件到本地(指定下载到哪里,同时可以重命名成get-site.xml)
bin/hdfs dfs -get /core-site.xml /home/beifeng/get-site.xml
HDFS的缺陷
-------------------------------------------------------------------------------------------------------------
1. HDFS存储的文件是不能够被修改的
2. HDFS不支持多用户并发写入
3. HDFS不适合存储大量小文件