目录
课程大纲(HADOOP快速入门) 2
课程大纲(HADOOP快速入门)
HADOOP快速入门 HADOOP快速入门 HADOOP产生背景
HADOOP在大数据、云计算中的位置和关系
国内外HADOOP应用案例介绍
国内HADOOP的就业情况分析及课程大纲介绍
分布式系统概述
HADOOP生态圈以及各组成部分的简介
Hive快速入门 Hive快速入门 Hive基本介绍
Hive的使用
数据仓库基本知识
数据分析案例演示 需求分析 案列:定义需求、介绍数据格式
数据获取 企业中获取数据的几种方式
将文件直接导入到数据仓库
将数据库的数据导入到数据仓库(sqoop)
数据处理 使用Hive对数进行清洗(ETL的过程)
数据计算 使用Hive对数据进行计算
数据展现 将结果数据导出到mysql(sqoop)
学习目标:
第一天接触具体的大数据框架,总目标是让学习者建立起大数据和分布式的宏观概念
1、理解hadoop是什么,用于做什么,大体上怎么用
2、理解hive是什么,用于做什么,大体上怎么用
3、通过一个案例的演示说明,理解数据挖掘系统的基本流程和结构
HADOOP背景介绍
1.1 什么是HADOOP
HADOOP是apache旗下的一套开源软件平台
HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理
HADOOP的核心组件有
A. HDFS(分布式文件系统)
B. YARN(运算资源调度系统)
C. MAPREDUCE(分布式运算编程框架)
广义上来说,HADOOP通常是指一个更广泛的概念——HADOOP生态圈
1.2 HADOOP产生背景
HADOOP最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。
——分布式文件系统(GFS),可用于处理海量网页的存储
——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。
1.3 HADOOP在大数据、云计算中的位置和关系
云计算是分布式计算、并行计算、网格计算、多核计算、网络存储、虚拟化、负载均衡等传统计算机技术和互联网技术融合发展的产物。借助IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等业务模式,把强大的计算能力提供给终端用户。
现阶段,云计算的两大底层支撑技术为“虚拟化”和“大数据技术”
而HADOOP则是云计算的PaaS层的解决方案之一,并不等同于PaaS,更不等同于云计算本身。
1.4 国内外HADOOP应用案例介绍
1、HADOOP应用于数据服务基础平台建设
2/HADOOP用于用户画像
3、HADOOP用于网站点击流日志数据挖掘
1.5 国内HADOOP的就业情况分析
1、 HADOOP就业整体情况
A. 大数据产业已纳入国家十三五规划
B. 各大城市都在进行智慧城市项目建设,而智慧城市的根基就是大数据综合平台
C. 互联网时代数据的种类,增长都呈现爆发式增长,各行业对数据的价值日益重视
D. 相对于传统JAVAEE技术领域来说,大数据领域的人才相对稀缺
E. 随着现代社会的发展,数据处理和数据挖掘的重要性只会增不会减,因此,大数据技术是一个尚在蓬勃发展且具有长远前景的领域
2、 HADOOP就业职位要求
大数据是个复合专业,包括应用开发、软件平台、算法、数据挖掘等,因此,大数据技术领域的就业选择是多样的,但就HADOOP而言,通常都需要具备以下技能或知识:
A. HADOOP分布式集群的平台搭建
B. HADOOP分布式文件系统HDFS的原理理解及使用
C. HADOOP分布式运算框架MAPREDUCE的原理理解及编程
D. Hive数据仓库工具的熟练应用
E. Flume、sqoop、oozie等辅助工具的熟练使用
F. Shell/python等脚本语言的开发能力
3、 HADOOP相关职位的薪资水平
大数据技术或具体到HADOOP的就业需求目前主要集中在北上广深一线城市,薪资待遇普遍高于传统JAVAEE开发人员,以北京为例:
1.6 HADOOP生态圈以及各组成部分的简介
各组件简介
重点组件:
HDFS:分布式文件系统
MAPREDUCE:分布式运算程序开发框架
HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具
HBASE:基于HADOOP的分布式海量数据库
ZOOKEEPER:分布式协调服务基础组件
Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库
Oozie:工作流调度框架
Sqoop:数据导入导出工具
Flume:日志数据采集框架
2 分布式系统概述
注:由于大数据技术领域的各类技术框架基本上都是分布式系统,因此,理解hadoop、storm、spark等技术框架,都需要具备基本的分布式系统概念
2.1 分布式软件系统(Distributed Software Systems)
² 该软件系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能
² 比如分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。
2.2 分布式软件系统举例:solrcloud
A. 一个solrcloud集群通常有多台solr服务器
B. 每一个solr服务器节点负责存储整个索引库的若干个shard(数据分片)
C. 每一个shard又有多台服务器存放若干个副本互为主备用
D. 索引的建立和查询会在整个集群的各个节点上并发执行
E. solrcloud集群作为整体对外服务,而其内部细节可对客户端透明
总结:利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。
2.3 分布式应用系统模拟开发
需求:可以实现由主节点将运算任务发往从节点,并将各从节点上的任务启动;
程序清单:
AppMaster
AppSlave/APPSlaveThread
Task
程序运行逻辑流程:
一个应用广泛的数据分析系统:“web日志数据挖掘”
3.1 需求分析
3.1.1 案例名称
“网站或APP点击流日志数据挖掘系统”。
3.1.2 案例需求描述
“Web点击流日志”包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率、访客的来源信息,访客的终端信息等。
3.1.3 数据来源
本案例的数据主要由用户的点击行为记录
获取方式:在页面预埋一段js程序,为页面上想要监听的标签绑定事件,只要用户点击或移动到标签,即可触发ajax请求到后台servlet程序,用log4j记录下事件信息,从而在web服务器(nginx、tomcat等)上形成不断增长的日志文件。
形如:
58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] “GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1” 304 0 “http://blog.fens.me/nodejs-socketio-chat/” “Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0”
3.2 数据处理流程
3.2.1 流程图解析
本案例跟典型的BI系统极其类似,整体流程如下:
但是,由于本案例的前提是处理海量数据,因而,流程中各环节所使用的技术则跟传统BI完全不同,后续课程都会一一讲解:
3.2.2 项目技术架构图
3.2.3 项目相关截图(感性认识,欣赏即可)
a) Mapreudce程序运行
b) 在Hive中查询数据
c) 将统计结果导入mysql
./sqoop export --connect jdbc:mysql://localhost:3306/weblogdb --username root --password root --table t_display_xx --export-dir /user/hive/warehouse/uv/dt=2014-08-03
3.3 项目最终效果
经过完整的数据处理流程后,会周期性输出各类统计指标的报表,在生产实践中,最终需要将这些报表数据以可视化的形式展现出来,本案例采用web程序来实现数据可视化
效果如下所示:
本集群搭建案例,以5节点为例进行搭建,角色分配如下:
hdp-node-01 NameNode SecondaryNameNodehdp-node-02 ResourceManagerhdp-node-03 DataNode NodeManagerhdp-node-04 DataNode NodeManagerhdp-node-05 DataNode NodeManager
部署图如下:
4.1.2服务器准备
本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:
ü Vmware 11.0
ü Centos 6.5 64bit
4.1.3网络环境准备
ü 采用NAT方式联网
ü 网关地址:192.168.33.1
ü 3个服务器节点IP地址:192.168.33.101、192.168.33.102、192.168.33.103
ü 子网掩码:255.255.255.0
4.1.4服务器系统设置
ü 添加HADOOP用户
ü 为HADOOP用户分配sudoer权限
ü 同步时间
ü 设置主机名
n hdp-node-01
n hdp-node-02
n hdp-node-03
ü 配置内网域名映射:
n 192.168.33.101 hdp-node-01
n 192.168.33.102 hdp-node-02
n 192.168.33.103 hdp-node-03
ü 配置ssh免密登陆
ü 配置防火墙
4.1.5 Jdk环境安装
ü 上传jdk安装包
ü 规划安装目录 /home/hadoop/apps/jdk_1.7.65
ü 解压安装包
ü 配置环境变量 /etc/profile
4.1.6 HADOOP安装部署
ü 上传HADOOP安装包
ü 规划安装目录 /home/hadoop/apps/hadoop-2.6.1
ü 解压安装包
ü 修改配置文件 $HADOOP_HOME/etc/hadoop/
最简化配置如下:
vi hadoop-env.sh
vi core-site.xml
fs.defaultFShdfs://hdp-node-01:9000hadoop.tmp.dir/home/HADOOP/apps/hadoop-2.6.1/tmp
vi hdfs-site.xml
dfs.namenode.name.dir/home/hadoop/data/namedfs.datanode.data.dir/home/hadoop/data/data dfs.replication3 dfs.secondary.http.addresshdp-node-01:50090
vi mapred-site.xml
mapreduce.framework.nameyarn
vi yarn-site.xml
yarn.resourcemanager.hostnamehadoop01 yarn.nodemanager.aux-servicesmapreduce_shuffle
vi salves
hdp-node-01hdp-node-02hdp-node-03
4.1.7 启动集群
初始化HDFS
bin/hadoop namenode -format
启动HDFS
sbin/start-dfs.sh
启动YARN
sbin/start-yarn.sh
4.1.8 测试
1、上传文件到HDFS
从本地上传一个文本文件到hdfs的/wordcount/input目录下
[HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input[HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt /wordcount/input
2、运行一个mapreduce程序
在HADOOP安装目录下,运行一个示例mr程序
cd $HADOOP_HOME/share/hadoop/mapreduce/hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input /wordcount/output
5 集群使用初步
5.1 HDFS使用
1、查看集群状态
命令: hdfs dfsadmin –report
可以看出,集群共有3个datanode可用
也可打开web控制台查看HDFS集群信息,在浏览器打开http://hdp-node-01:50070/
2、上传文件到HDFS
² 查看HDFS中的目录信息
命令: hadoop fs –ls /
² 上传文件
命令: hadoop fs -put ./ scala-2.10.6.tgz to /
² 从HDFS下载文件
命令: hadoop fs -get /yarn-site.xml
5.2 MAPREDUCE使用
mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序
5.2.1 Demo开发——wordcount
1、需求
从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数
2、mapreduce实现思路
Map阶段:
a) 从HDFS的源数据文件中逐行读取数据
b) 将每一行数据切分出单词
c) 为每一个单词构造一个键值对(单词,1)
d) 将键值对发送给reduce
Reduce阶段:
a) 接收map阶段输出的单词键值对
b) 将相同单词的键值对汇聚成一组
c) 对每一组,遍历组中的所有“值”,累加求和,即得到每一个单词的总次数
d) 将(单词,总次数)输出到HDFS的文件中
4、 具体编码实现
(1)定义一个mapper类
//首先要定义四个泛型的类型//keyin: LongWritable valuein: Text//keyout: Text valueout:IntWritable public class WordCountMapper extends Mapper
(2)定义一个reducer类
//生命周期:框架每传递进来一个kv 组,reduce方法被调用一次@Overrideprotected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {//定义一个计数器int count = 0;//遍历这一组kv的所有v,累加到count中for(IntWritable value:values){count += value.get();}context.write(key, new IntWritable(count));}}
(3)定义一个主类,用来描述job并提交job
public class WordCountRunner {//把业务逻辑相关的信息(哪个是mapper,哪个是reducer,要处理的数据在哪里,输出的结果放哪里。。。。。。)描述成一个job对象//把这个描述好的job提交给集群去运行public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job wcjob = Job.getInstance(conf);//指定我这个job所在的jar包// wcjob.setJar("/home/hadoop/wordcount.jar");wcjob.setJarByClass(WordCountRunner.class);wcjob.setMapperClass(WordCountMapper.class);wcjob.setReducerClass(WordCountReducer.class);//设置我们的业务逻辑Mapper类的输出key和value的数据类型wcjob.setMapOutputKeyClass(Text.class);wcjob.setMapOutputValueClass(IntWritable.class);//设置我们的业务逻辑Reducer类的输出key和value的数据类型wcjob.setOutputKeyClass(Text.class);wcjob.setOutputValueClass(IntWritable.class);//指定要处理的数据所在的位置FileInputFormat.setInputPaths(wcjob, “hdfs://hdp-server01:9000/wordcount/data/big.txt”);//指定处理完成之后的结果所保存的位置FileOutputFormat.setOutputPath(wcjob, new Path(“hdfs://hdp-server01:9000/wordcount/output/”));//向yarn集群提交这个jobboolean res = wcjob.waitForCompletion(true);System.exit(res?0:1);}
5.2.2 程序打包运行
将程序打包
准备输入数据
vi /home/hadoop/test.txt
Hello tomHello jimHello kettyHello worldKetty tom
在hdfs上创建输入数据文件夹:
hadoop fs mkdir -p /wordcount/input
将words.txt上传到hdfs上
hadoop fs –put /home/hadoop/words.txt /wordcount/input
将程序jar包上传到集群的任意一台服务器上
使用命令启动执行wordcount程序jar包
$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out
查看执行结果
$ hadoop fs –cat /wordcount/out/part-r-00000
视频第六天
一、hadoop在实际项目中架构分析
项目分析:网站或APP点击流日志数据挖掘
1.京东的日志采集模块,可以进行转换率的计算。
https://mercury.jd.com/log.gif?
t=magic.000001
&m=UA-J2011-1
&pin=-
&uid=1413998405
&sid=1413998405|4
&v=je=0 s c = 24 − b i t sc=24-bit sc=24−bitsr=1920x1080 u l = z h − c n ul=zh-cn ul=zh−cncs=GBK$dt=【小米小米8】小米8青春版 镜面渐变AI双摄 6GB+64GB 梦幻蓝 全网通4G 双卡双待 全面屏拍照游戏智能手机【行情 报价 价格 评测】-京东
h n = i t e m . j d . c o m hn=item.jd.com hn=item.jd.comfl=28.0r0 o s = w i n os=win os=winbr=chrome b v = 58.0.3029.110 bv=58.0.3029.110 bv=58.0.3029.110wb=1539503778 x b = 1539694117 xb=1539694117 xb=1539694117yb=1539700452 z b = 4 zb=4 zb=4cb=6 u s c = w w w . q v t i a o . c o m usc=www.qvtiao.com usc=www.qvtiao.comucp=t_1000865418_e073167d01ff59fa u m d = t u i g u a n g umd=tuiguang umd=tuiguanguct=2bfbf094d74440718cdbec6e21e93fbe c t = 1539700532958 ct=1539700532958 ct=1539700532958lt=0 t a d = − tad=- tad=−t1=magictree t 2 = X t2=X t2=Xp0=%252F%252F*%255B%2540id%253D%2522big-image-3d%2522%255D%252Fdiv%255B2%255D%252Fdiv%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%252Ful%252Fli%252Fa%252Fimg%7C%7C%7C%252F%252F*%255B%2540id%253D%2522big-image-3d%2522%255D%252Fdiv%255B2%255D%252Fdiv%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%252Ful%252Fli%252Fa%7C%7C%7C%252Fhtml%252Fbody%252Fdiv%255B32%255D%252Fdiv%255B2%255D%252Fdiv%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%252Ful%252Fli%252Fa%252F%7C%7C%7C14%7C%7C%7C943x557%7C%7C%7C2210x20001%7C%7C%7C345%7C%7C%7C-%7C%7C%7C-%7C%7C%7Chttps%253A%252F%252Fitem.jd.com%252F100000503295.html%253Fjd_pop%253D2f44003f-61ab-4dfa-8846-1a22a1c99719%2526abt%253D0%2523none%7C%7C%7C-%7C%7C%7Chttp%253A%252F%252Fimg14.360buyimg.com%252Fn5%252Fs54x54_jfs%252Ft1%252F2617%252F6%252F6143%252F237736%252F5ba1f42aE71124526%252Fe242e3e39ec95d66.jpg p i n i d = − pinid=- pinid=−jdv=122270672|www.qvtiao.com|t_1000865418_e073167d01ff59fa|tuiguang|2bfbf094d74440718cdbec6e21e93fbe|1539503779107 d a t a v e r = 0.1 dataver=0.1 dataver=0.1unpl=V2_ZzNtbUEEFEYiCU5RLh9ZAGICFF1LBRZGIVpBAHgZCA1lVEEJclRCFXwURlVnGVkUZwcZWUVcQxxFCEdkexhdBG4EFlhCXnNBdA5EVHwfCQRnVEVZSgATJUULRmR7KVwAZwEaVUtSQhFFOEFkexhdAW4DFVhyjvKlobbFVHMRXTVnBhZcQFFLE3UJdlVLGGxXCduk65ry8gmhosmB844RBWIDEFVKXkYUcThHZHg%3d
&ref=https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA
&enc=utf-8
&wq=%E6%89%8B%E6%9C%BA
&pvid=1dd3228d17b642c5820aeea23fefcfef
&rm=1539700532959
二、hadoop安装环境准备
三、hadoop集群安装
1.通过mobaxterm一次操作批量安装
四、hadoop生态圈介绍和就业前景
五、hadoop shell命令
1.hdfs命令:
hadoop fs -ls / 启动一个hdfs客户端查看其根目录
hadoop fs -ls hdfs://hadoop1:9000/
drwxrwx— - root supergroup 0 2018-10-27 15:50 /tmp
hadoop fs -put cls.avi / 将cls.avi上传到/
2.怎么查看hadoop环境配置是否正确?
1.将文件从Linux上传到hdfs成功,则配置成功
hadoop fs -put cls.avi / 将cls.avi上传到/
最终文件存在hdfs的finalized目录下。如blk_1073741825。
默认128M才开始分块。
分块后,将所有块拼接起来,在变成原来的文件。
cat blk_xxx >>tmp.file
cat blk_2xxx >>tmp.file
tar -zxvf tmp.file
hadoop fs -get /hadoop.tar 下载,由客户端将块拼接成完整的文件
3.MapReduce测试:
hadoop fs -mkdir -p /wordcount/input 在hdfs上创建文件夹
hadoop fs -put a.txt b.txt /wordcount/input 上传数据
hadoop jar hadoop-mapreduce-examples.jar wordcount /wordcount/input /wordcount/output(目录不能存在,存回会覆盖)
六、java api操作HDFS文件系统
maven的pom.xml中添加:hadoop-client.jar
java api操作hdfs会报错:
解决方案:https://blog.csdn.net/medier/article/details/80572584
环境设置:windows系统需要和Linux上版本相同的编译版本,或者说将hadoop解压,在网上找bin和lib少的东西。
设置环境变量HADOOP_HOME。
客户端取操作hdfs时,是有一个用户身份的。
默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份。
方法1:运行时添加JVM参数:-DHADOOP_USER_NAME=hadoop1(hdfs所属用户)
方法2:代码实现,FileSystem.get(new URI(“hdfs://hadoop1:9000”),conf,“hadoop1”)
疑问:
hdfs namenode -format 只是初始化了namenode的工作目录,而datanode的工作目录是在datanode启动后自己初始化的。
1.datanode不识别
namenode在format初始化时会形成两个标识:blockPoolId和clusterId,新的datanode加入时,会获取这两个标识作为自己工作目录的标识,一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不能被namenode识别。
解决办法:在namenode格式化之前删除datanode的工作目录
2.datanode下线识别
datanode不是一下线就会被namenode认定为下线了,有超时时间的设置。
如果不设置超时时间,网络卡一下,datanode就会认为下线了。
3.finalized目录找不到
/hddf_data/dfs/data/current/BP-1053187184-192.168.25.128-1540654610136/current/finalized
4.replication数量问题
副本数由客户端的参数dfs.replication决定。
优先级:客户端Configuration.set>自定义配置文件>hdfs的jar包中hdfs.default.xml
5.resourcemanager问题
原因:没有启动yarn或者yarn启动失败
解决办法:
secureCRT->chat windown->send chat to all sessions
date -s “2018-10-27 16:24:00” 对所有启动的Linux修改时间
6.运行报错说live node为0。?
先停止hadoop,删除指定存储hadoop临时文件的目录,重新启动hadoop
stop-all.sh (命令过时,用stop-dfs.sh和stop-yarn.sh代替)
start-dfs.sh
start-yarn.sh
7.可以连接到http://192.168.25.128:8088 ,但是连接不上http://192.168.25.128:50070。使用
jps命令后并没有出现Namenode。
重启后,重新格式化namenode即可。
作业:
视频1:
11分钟作业讲解。
视频2中推荐系统架构图,自己绘制出来。
作业:自己写一个netty类似的rpc框架。
模拟ndfs分块数据的上传和下载。
视频第七条
一、客户端向HDFS写数据的流程
二、namenode管理元数据的机制
学习资料:
https://blog.csdn.net/u011170921/article/details/80437937
https://blog.csdn.net/yucdsn/article/details/78402137