Google大数据领域三篇论文
Hadoop的优势
- 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
- 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
- 高容错性:能够自动将失败的任务重新分配。
Hadoop组成
Hadoop1.x和Hadoop2.x的区别
Hadoop1.x组成 | Hadoop2.x组成 | |
MapReduce(计算+资源调度) | MapReduce(计算) | |
Yarn(资源调度) | ||
HDFS(数据存储) | HDFS(数据存储) | |
Common(辅助工具) | Common(辅助工具) |
在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大,在Hadoop2.x时代,增加了Yarn。Yarn只负责资源的调度,MapReduce只负责运算,利用了解耦和模块化的思想提高了Hadoop的性能。
HDFS架构概述
- NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),记忆每个文件的快列表和块所在的DataNode等。
- DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
- Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
Yarn架构
YARN 的全称是 Yet Another Resource Negotiator,YARN 整体上是 Master/Slave 结构,在整个框架中,ResourceManager 为 Master,NodeManager 为 Slave,如下图所示:

ResourceManager(RM)的主要作用
- 处理客户端请求
- 监控NodeManager
- 启动或监控ApplicationMaster
- 资源的分配与调度
NodeManager(NM)的主要作用
- 管理单个节点上的资源
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster(AM)的主要作用
- 负责数据的切分
- 为应用程序申请资源并分配给内部的任务
- 任务的监控和容错
Container
Container是Yarn中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
- Map阶段并行处理输入数据
- Reduce阶段对Map结果进行汇总

图中涉及的技术名词解释如下:
- Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
- Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
- Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
- 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
- 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
- 支持通过Kafka服务器和消费机集群来分区消息。
- 支持Hadoop并行数据加载。
- Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
- Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
- Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。
- Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
- Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
- R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
- Mahout:ApacheMahout是个可扩展的机器学习和数据挖掘库。
- ZooKeeper:Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
配置多台虚拟机静态ip和主机名
关闭虚拟机防火墙
CentOS配置多台虚拟机静态ip
修改虚拟机主机名
这些博客忘记命令行的时候看一下就行了,针对自己的场景要结合实际情况,自行分析解决,下面是我的配置过程:
对1号机进行配置
- 关闭防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service - 设置VMware虚拟网络编辑器,将设置设为如下所示,并记住网关192.168.***.2

- 设置虚拟机网卡连接方式为NAT模式,并在虚拟机关机状态生成新的MAC地址

- ifconfig查询虚拟机网卡名称

- CentOS7.x不会自动生成70-persistent-net.rules和/lib/udev/write_net_rules解决办法:
1、在/etc/udev/rules.d/ 目录中创建一个网卡规则 70-persistent-net.rules
vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTR{address}=="00:50:56:3B:14:B1",ATTR{type}=="1" ,KERNEL=="eth*",NAME="eth33"
1、直接配置/etc/sysconfig/network-scripts/ifcfg-ens33文件 (cat查看ifcfg-ens0和ifcfg-ens33文件都为空)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
HWADDR=00:50:56:3B:14:B1
IPADDR=192.168.245.3
NETMASK=255.255.255.0
GATEWAY=192.168.245.2
DNS1=114.114.114.114
DNS2=8.8.8.8
#UUID=14ea676e-8a64-4b73-9c12-a95f3eb93df2
参数说明
- HWADDR:MAC地址
- IPADDR:IP地址
- NETMASK:子网掩码
- GATEWAY:网关
- NAME=ens33:网卡物理设备名称
- DEVICE=ens33:网卡设备名称, 必须和 NAME 值一样
- TYPE:网卡类型:以太网
- PROXY_METHO:代理方式:关闭状态
- BROWSER_ONLY:只是浏览器:否
- BOOTPROTO:网卡的引导协议:DHCP[中文名称: 动态主机配置协议]
- DEFROUTE:默认路由:是
- IPV4_FAILURE_FATAL:是否开启IPV4致命错误检测:否
- IPV6INIT:IPV6是否自动初始化: 是[不会有任何影响, 现在还没用到IPV6]
- IPV6_AUTOCON:IPV6是否自动配置:是[不会有任何影响, 现在还没用到IPV6]
- IPV6_DEFROUTE:IPV6是否可以为默认路由:是[不会有任何影响, 现在还没用到IPV6]
- IPV6_FAILURE_FATAL:是否开启IPV6致命错误检测:否
- IPV6_ADDR_GEN_MODE:IPV6地址生成模型:stable-privacy [这只一种生成IPV6的策略]
- ONBOOT:是否开机启动, 要想网卡开机就启动或通过 systemctl restart network控制网卡,必须设置为 yes
- UUID:通用唯一识别码,每一个网卡都有,不能重复,否则两台linux只有一台网卡可用,删掉即可
克隆虚拟机
克隆虚拟机后、关机状态生成新的MAC地址并复制

vim /etc/udev/rules.d/70-persistent-ipoib.rules

vim /etc/sysconfig/network-scripts/ifcfg-ens33

hostnamectl set-hostname centos103 # 修改主机名
reboot # 重启
[root@centos103 ~]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=73.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=57.6 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=128 time=55.8 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=128 time=55.4 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 55.408/60.568/73.337/7.422 ms
对centos102添加配置 vim /etc/hosts
192.168.245.3 centos101
192.168.245.4 centos102
192.168.245.5 centos103
192.168.245.6 centos104
参考资料
使用VMware克隆的centos7虚拟机网卡配置找不到的问题
centos7网卡改名
RedHat文档:联网指南
Hadoop运行环境搭建
- 虚拟机环境准备
- 安装JDK
- 安装Hadoop
Hadoop目录结构
[codexy@centos101 hadoop-2.7.2]$ ll
总用量 28
drwxr-xr-x. 2 codexy codexy 194 1月 26 2016 bin
drwxr-xr-x. 3 codexy codexy 20 1月 26 2016 etc
drwxr-xr-x. 2 codexy codexy 106 1月 26 2016 include
drwxr-xr-x. 3 codexy codexy 20 1月 26 2016 lib
drwxr-xr-x. 2 codexy codexy 239 1月 26 2016 libexec
-rw-r--r--. 1 codexy codexy 15429 1月 26 2016 LICENSE.txt
-rw-r--r--. 1 codexy codexy 101 1月 26 2016 NOTICE.txt
-rw-r--r--. 1 codexy codexy 1366 1月 26 2016 README.txt
drwxr-xr-x. 2 codexy codexy 4096 1月 26 2016 sbin
drwxr-xr-x. 4 codexy codexy 31 1月 26 2016 share
重要目录
- bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
- etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
- lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
- sbin目录:存放启动或停止Hadoop相关服务的脚本
- share目录:存放Hadoop的依赖jar包、文档、和官方案例
Hadoop运行模式
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
Hadoop官方网站
Hadoop2.7.2官方文档
官方Grep案例
- 创建在hadoop-2.7.2文件下面创建一个input文件夹
- 将Hadoop的xml配置文件复制到input
- 执行share目录下的MapReduce程序
- 查看输出结果
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
$ cat output/*
执行第三个命令时,输出文件夹如果已经存在会报错:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/opt/module/hadoop-2.7.2/output already exists
* | 匹配前面的子表达式零次或多次。例如,zo*能匹配“z ”以及“zoo ”。*等价于{0,}。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,“[a-z] ”可以匹配“a ”到“z ”范围内的任意小写字母字符。 |
---|---|
. | 匹配除“\ n ”之外的任何单个字符。要匹配包括“\ n ”在内的任何字符,请使用像“(.|\n) ”的模式。 |
官方WordCount案例
- 创建在hadoop-2.7.2文件下面创建一个wcinput文件夹:
$ mkdir wcinput
- 在wcinput文件下创建一个wc.input文件
$ cd wcinput
$ touch wc.input
- 编辑wc.input文件
$ vi wc.input
,在文件中输入如下内容
hadoopyarn
hadoopmapreduce
atguigu
atguigu
保存退出::wq
- 回到Hadoop目录/opt/module/hadoop-2.7.2
- 执行程序
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcouput
- 查看结果
$ cat wcoutput/part-r-00000
atguigu 2
hadoop 2
mapreduce 1
yarn 1
常见错误
- MapReduce运行卡在running job解决方法
MapReduce任务卡在Running Job状态的多种解决方法