Hadoop学习笔记

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

  1. Map阶段并行处理输入数据
  2. Reduce阶段对Map结果进行汇总

图中涉及的技术名词解释如下:

  1. Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
  2. Flume:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
  3. Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
    1. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
    2. 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
    3. 支持通过Kafka服务器和消费机集群来分区消息。
    4. 支持Hadoop并行数据加载。
  4. Storm:Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
  5. Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
  6. Oozie:Oozie是一个管理Hdoop作业(job)的工作流程调度管理系统。
  7. Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
  8. Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
  9. R语言:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
  10. Mahout:ApacheMahout是个可扩展的机器学习和数据挖掘库。
  11. 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查询虚拟机网卡名称
inet是centos101的IP地址 netmask是子网掩码 ether是MAC地址
  • 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案例

  1. 创建在hadoop-2.7.2文件下面创建一个input文件夹
  2. 将Hadoop的xml配置文件复制到input
  3. 执行share目录下的MapReduce程序
  4. 查看输出结果
  $ 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案例

  1. 创建在hadoop-2.7.2文件下面创建一个wcinput文件夹:$ mkdir wcinput
  2. 在wcinput文件下创建一个wc.input文件
$ cd wcinput
$ touch wc.input
  1. 编辑wc.input文件$ vi wc.input,在文件中输入如下内容
hadoopyarn
hadoopmapreduce
atguigu
atguigu

保存退出::wq

  1. 回到Hadoop目录/opt/module/hadoop-2.7.2
  2. 执行程序
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcouput
  1. 查看结果
$ cat wcoutput/part-r-00000
atguigu    2
hadoop    2
mapreduce   1
yarn    1

常见错误

标签: