MapReduce分布式编程模型
hdfs的副本的配置
修改hdfs-site.xml文件
<property>
<name>
dfs.namenode.secondary.http-address
</name>
<value>hd-02:50090</value>
</property>
需要同步到其它机器:
scp hdfs-site.xml hd-02:$PWD
hadoop启动方式
1)启动hdfs集群
$ start-dfs.sh
2)启动yarn集群
$ start-yarn.sh
3)启动hadoop集群
$ start-all.sh
大数据干什么的?
1)海量数据的存储(mysql/orcale)
分布式文件系统hdfs
dfs->Hdfs
mapreduce->mapreduce
bigtable->hbase
分而治之!
2)海量数据的计算
分布式计算框架mapreduce
配置checkpoint时间
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>7200</value>
</property>
hadoop2.8.4安装部署
1)准备工作
设置主机名:vi /etc/hostname
注意:需要重启 reboot
设置映射:vi /etc/hosts
设置免密登录:ssh-keygen
ssh-copy-id hd-01
...
2)安装jdk
上传安装包
CRT:alt+p
解压
tar -zxvf .tar.gz
配置环境变量
export JAVA_HOME=/root/hd/jdk1.8.0_141
export PATH=$PATH:$JAVA_HOME/bin
注意:需要source /etc/profile
分发jdk
scp jdk hd-02:/root/hd
scp /etc/profile hd-02:/etc/
source /etc/profile
3)安装hadoop
上传安装包
alt + p
解压
tar -zxvf .tar.gz
修改配置文件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
配置环境变量
export HADOOP_HOME=/
export PATH=$PAYH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改slaves文件加入从节点
格式化namenode
hadoop namenode -format
启动:start-all.sh
hadoopMapReduce
官方:Apache™Hadoop®项目开发了用于可靠,可扩展的分布式计算的开源软件。
Apache Hadoop软件库是一个框架,允许使用简单的编程模型跨计算机集群分布式处理
大型数据集。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和
存储。该库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故
障,从而在计算机集群之上提供高可用性服务,每个计算机都可能容易出现故障。
阿里的Flink(9000万欧元) Blink
MapReduce分布式计算程序的编程框架。基于hadoop的数据分析的应用。
MR优点:
1)框架易于编程
2)可靠容错(集群)
3)可以处理海量数据(1T+ PB+) 1PB = 1024TB
4)拓展性,可以通过动态的增减节点来拓展计算能力
MapReduce的思想
数据:海量单词
hello reba
hello mimi
hello liya
mimi big
需求:对每个单词出现的次数统计出来
思想:分而治之!
解决方式:
1)每个单词记录一次(map阶段)
<hello,1> <reba,1> <hello,1> <mimi,1>
2)相同单词的key不变,value累加求和即可(reduce阶段)
<hello,1+1+1>
对数据进行计算
对wordcount例子程序分析
1)整个wordcount分为几个阶段?
三个
2)有哪几个阶段?
mapper
reducer
driver
3)每个阶段有什么作用
mapper:对数据进行打散<hello,1><mimi,1>
reducer:对数据进行聚合<hello,1+1+1>
driver:提交任务
4)详解
Mapper阶段:
将数据转换为String
对数据进行切分处理
把每个单词后加1
输出到reducer阶段
Reducer阶段:
根据key进行聚合
输出key出现总的次数
Driver阶段:
创建任务
关联使用的Mapper/Reducer类
指定mapper输出数据的kv类型
指定reducer输出的数据的kv类型
指定数据的输入路径与输出路径
提交
hadoop数据类型
我们看到的wordcount程序中的泛型中的数据类型其实是hadoop的序列化的数据类
型。
为什么要进行序列化?用java的类型行不行?
Java的序列化:Serliazable太重。
hadoop自己开发了一套序列化机制。Writable,精简高效。海量数据。
hadoop序列化类型与Java数据类型
Java数据类型 Hadoop序列化类型
int IntWritable
long LongWritable
boolean BooleanWritable
byte ByteWritable
float FloatWritable
double DoubleWritable
String Text
wordcount测试
1)本地模式
2)集群模式
hadoop jar .jar wordcount /wc/in /wc/out