hadoop

字数 5361阅读 829

hadoop是什么?HDFS与MapReduce
Hive:数据仓库,在HDFS之上,后台执行,帮你执行。facebook开源,设计目的,类似SQL语言,来做转换。
Hadoop:集群的安装部署,建立在伪分布式安装基础上。
分布式数据库Nosql数据库,类似于oracle,存储几十亿行数据,上万列数据。准实时查询,与MapReduce很好集成,进行计算,处理数据,体系架构,访问(shell、API)

Linux系统:

  • Hadoop生成环境都是Linux,不过Hadoop2.x开始支持Windows环境,开始支持。掌握Linux环境熟悉基本命令和Linux环境的基本配置。
  1. Linux环境搭建,使用VMWare虚拟机搭建。安装百度看看。
  2. Linux系统版本很多,使用CentOS6.4版本。Linux系统一般下都是用:RedHat 6.X 环境都是64位。
  3. Linux下的基本命令操作和基本的常识。
  4. Linux系统环境的基本配置,配置IP地址、配置主机名,关闭防火墙等。
  5. 远程连接Linux系统的工具,FTP工具,命令行工具,桌面化远程工具。

Linux命令

查看主机ip地址:
ifconfig ipconfig(windows下)
清除屏幕:
clear

Paste_Image.png

在Linux系统中,系统中有默认的超级管理员用户root,就相当与win中的默认超级管理员用户administrator
配置主机名称:
查看当前系统主机名称:hostname
设置主机名称:

  1. root用户 hostname peter:仅仅当前生效。
  2. root用户 more /etc/sysconfig/network
    文件查看:
  3. more :一页一页查看,翻页查看内容
    more /etc/sysconfig/network(要改主机名,在这个地址下去改)
  4. tail:看文件最后几行内容,一般用于查看日志文件,滚动
    tail -f /ect/sysconfig/network
    tail -100f /data/jilu.log 查看日志文件最后100行内容
  5. cat:查看所有文件

一些基本命令:
pwd 显示当前用户所在的目录
ls 列出当前目录下的所有文件
cd data 进入当前目录的子目录data
mkdir 创建文件夹
touch hello.TXT 创建一个文件
vim 编辑:按下i,进入编辑


Paste_Image.png
Paste_Image.png

~:当前用户主目录

在Linux环境下,针对文件有三种格式:

  1. 文件 用-表示
  2. 目录 用d
  3. 链接 用l表示
    每个文件针对于三类用户来说:文件的所有者,文件的同组用户,系统的其他用户。权限如何?
    权限有三种: 可读(r/4) 可写(w/2) 可执行(x/1)
Paste_Image.png
  1. 使用远程命令行登陆Linux系统,首先进入的是用户的主目录。
  2. 在Linux环境下,通常每创建一个用户,就会在/home目录下创建一个以用户名命名的文件夹,比如创建一个hadoop,则用户主目录为/home/hadoop/

ls显示

Paste_Image.png

基本操作命令

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

用户减去可读可写可执行


Paste_Image.png

文件的改法

Paste_Image.png

Hadoop

  1. 存储:分布式,集群的概念。
    分布式:很多台机器去储存数据,管理(主节点(班长)、从节点(学生))
    HDFs(Hadoop Distributed FileSystem)
  2. 分析:分布式,并行,离线计算框架。管理(主节点,从节点),MapReduce

大数据 云计算
大数据:数据量大、数据有价值,分析挖掘。
云计算:由三层构成:
IAAS:OpenStack:构建公司内部自由云平台。
PAAS
SAAS

Paste_Image.png

Hadoop MapReduce:核心就是对数据的排序优化。

Apache Hadoop版本:

  • 经典版本:0.20.2(这个版本资料最多)
    1.0.0版本(第一个1.0.0正式版本),1.0.3或者1.0.4非常好(应用最多的版本)1.1.2、1.2.1(目前最新的版本)
  • 0.23.0(跨越版本,出现YARN框架,第二代MapReduce框架,资源管理和任务调度框架) 0.23.10版本最新的,与2.x系列版本区别在于,没有HDFS和HA和Federation特性。
  • 2.X版本(将1.x系列版本与0.23.0系列版本的集合):1)2.0.X版本:属于2.x系列版本的alpha版本。 2) 2.1.x版本:属于2.x系列版本的beta版本。 3)2.2.0、2.3.0、2.4.0正式版本,可用于实际生产环境中。其中2.2.0是最好的。

lesson 4

对Apache Hadoop生态系统的认识

Paste_Image.png

Hive就相当于仓库里的小库(画目录)
pig数据流处理

ETL(提取-转化-加载)从数据库中获取数据,并进行一系列的数据清理和清洗筛选,将合格的数据进行转换成一定的格式数据进行存储,将格式化的数据存储到HDFS文件系统上,以供计算框架进行数据分析和挖掘。格式化数据:TSV格式(每行数据的每列之间以制表符\t进行分割)、CSV格式:每行数据的每列之间以逗号分割。
sqoop:将关系型数据库中的数据与HDFS(HDFS文件,HBase中的表,Hive中的表)上的数据进行相互导入导出。

Flume:
收集各个应用系统和框架的日志,并将其放到HDFS分布式文件系统的相应制定的目录下。

Ambari:安装、部署、配置、管理(图形化界面让我们来管理)

Hadoop1.x组成

DM[O0P0S`5}IQCSG]DX{U@W.png

对于分布式系统和框架的架构来说,一般分为两部分:

  1. 管理层(用于管理应用程序)
  2. 应用层(工作的)

HDFS,分布式文件系统:
NameNode,属于管理层,用于管理数据的存储。
SecondaryNameNode,属于管理层,辅助NameNode管理。
DataNode:属于应用层,用户进行数据的
存储,被NameNode进行管理,要定时的向NameNode进行工作汇报,执行NameNode分配分发的任务。

MapReduce,分布式的并行计算框架:
JobTracker:属于管理层,管理集群资源和对任务进行资源调度,监控任务的执行。
TaskTracker:属于应用层,执行JobTracker分配分发的任务,并向 JobTracker汇报工作情况。

Paste_Image.png

HDFS系统架构图

NameNode:存储文件的元数据

  1. 文件名称
  2. 文件的目录结构
  3. 文件的属性(权限、副本数、生成时间)
  4. 文件——对应的块(Block)——(存储在)DataNode上
Paste_Image.png

MapReduce思想:
Map:分而治之(分成几块去执行)
reduce:归约(把分散的结果进行整合)

Paste_Image.png
Paste_Image.png
Paste_Image.png

日志有两种,分别以log和out结尾。

  1. 以log结尾的日志,通过log4j日志记录格式进行记录的日志,采用日常滚动方式,文件后缀策略来命名日志文件。内容比较全面。
  2. 以out结尾的日志。记录标准输出和标准错误的日志,内容少,默认的情况系统保留最新的5个日志文件。
    日志文件的存储位置,用户可以自定义的配置,在conf下hadoop-env.sh
    hadoop-hadoop-datanode-hadoop-master.log
    表示框架名称,启动守护进程的用户名,守护进程的名称,hadoop-master(运行守护进程的主机名称),log格式

三种启动停止

  1. 第一种方式:启动停止方式,分别启动hdfs和mapreduce,命令如下:
    start-dfs.sh或者star-mapred.sh
    停止:stop-mapred.sh,start-dfs.sh(谁先启动先关谁)
  2. 第二种方式,启动start-all.sh
    停止stop-all.sh
  3. 第三种方式不管他了
Paste_Image.png

hadoop1.2.1五个服务与配置文件的关系

1. 三大基础配置文件:

  1. core-site.xml:配置hadoop common project相关属性的配置,hadoop1.x框架基础属性配置。
  2. hdfs-site.xml:配置hdfs project文件系统相关属性。
  3. mapred-site.xml:配置与mapreduce 框架相关的属性。

普通配置文件:

  1. masters:主节点,并不是配置hadoop中的主节点的相关信息,配置HDFS辅助节点的信息。
  2. slaves:从节点,配置hadoop1.x中hdfs和mapreduce框架的从节点信息。

hadoop1.x五大服务(守护进程):

  1. namenode
  2. datanode
  3. secondarynamenode
  4. jobtracker
  5. tasktracker
    前三属于hdfs,后二mapred
Paste_Image.png
Paste_Image.png
Paste_Image.png

另外两个配置文件,masters(secondarynamenode)(一行代表一个主机可以配置多节点)
slaves(datanode和tasktracker)

Paste_Image.png

分析启动shell脚本

  1. 查看start-all.sh
    第一点,此shell脚本,仅仅在主节点上执行。
Paste_Image.png
Paste_Image.png

hadoop运行的java警告:

Paste_Image.png
Paste_Image.png

hadoop相关命令中config和cinfigdir作用

相当于一个快捷键,因为可能有很多个hadoop版本。


Paste_Image.png
Paste_Image.png

hadoop1.X的目录结构

Paste_Image.png
Paste_Image.png

设计得越来越好。

Paste_Image.png

contrib是功能拓展的那个包。
share是一些模板的包。

libexec
bin目录的上级目录的libexec。上级目录就是hadoop-1.2.1


Paste_Image.png

HDFS设计目标

hadoop distributed file system
移动计算比移动数据便宜:以前做数据处理,是把分散的数据拿到一台机器,现在用同一种计算方法,把该方法分散到不同的机器,每台机器进行他的计算,然后在汇总


Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

默认一个块的大小是64M

Paste_Image.png

HDFS文件系统架构概述

Paste_Image.png

主从结构:主节点namenode存储文件元数据(名称,权限,拥有者,多少个块,路径,块的id),从节点datanode(存储文件,都是以块的形式来进行存储的)
rack:机架

每个块都会存在不同的节点上。
信息是一一对应的,块名,个数等等

Paste_Image.png
Paste_Image.png

块数据的校验和:针对块形成一个算法,把它存储在系统中,每过一段去检查这个校验和去判断是否文件破坏等等。

每个块有三个副本块。


Paste_Image.png
Paste_Image.png
Paste_Image.png

datanode与namenode的联系通过心跳信号和块状态报告等等。


Paste_Image.png

主从结构。名字节点namenode,数据节点datanode。
默认为三个副本(冗余)
回收机制:也有类似windows的东西。


Paste_Image.png

Paste_Image.png

HDFS副本放置策略:

Paste_Image.png

数据损坏处理:

Paste_Image.png

HDFS中Client(客户端)和SNN

Paste_Image.png

Paste_Image.png

目的:辅助合并,减小下一次重启的时间


Paste_Image.png
Paste_Image.png

hadoop操作命令

最近使用hive做一些etl工作,除了日常sql的编写,了解hadoop及hive的一些底层原理性质的东西包括调优非常有必要,一次hive调优就把原来的零散文件做了合并。首先记下hadoop常用的命令:(hadoop fs -help列出全部)

1,hadoop fs –fs [local | <file system URI>]:声明hadoop使用的文件系统,如果不声明的话,使用当前配置文件配置的,按如下顺序查找:hadoop jar里的hadoop-default.xml->HADOOPCONFDIR下的hadoop?default.xml?>HADOOP_CONF_DIR下的hadoop-site.xml。使用local代表将本地文件系统作为hadoop的DFS。如果传递uri做参数,那么就是特定的文件系统作为DFS。

2,hadoop fs –ls <path>:等同于本地系统的ls,列出在指定目录下的文件内容,支持pattern匹配。输出格式如filename(full path) <r n> size.其中n代表replica的个数,size代表大小(单位bytes)。

3,hadoop fs –lsr <path>:递归列出匹配pattern的文件信息,类似ls,只不过递归列出所有子目录信息。

4,hadoop fs –du <path>:列出匹配pattern的指定的文件系统空间总量(单位bytes),等价于unix下的针对目录的du –sb <path>/*和针对文件的du –b <path> ,输出格式如name(full path) size(in bytes)。

5,hadoop fs –dus <path>:等价于-du,输出格式也相同,只不过等价于unix的du -sb。

6,hadoop fs –mv <src> <dst>:将制定格式的文件 move到指定的目标位置。当src为多个文件时,dst必须是个目录。

7,hadoop fs –cp <src> <dst>:拷贝文件到目标位置,当src为多个文件时,dst必须是个目录。

8,hadoop fs –rm [-skipTrash] <src>:删除匹配pattern的指定文件,等价于unix下的rm <src>。

9,hadoop fs –rmr [skipTrash] <src>:递归删掉所有的文件和目录,等价于unix下的rm –rf <src>。

10,hadoop fs –rmi [skipTrash] <src>:等价于unix的rm –rfi <src>。

11,hadoop fs –put <localsrc> … <dst>:从本地系统拷贝文件到DFS。

12,hadoop fs –copyFromLocal <localsrc> … <dst>:等价于-put。

13,hadoop fs –moveFromLocal <localsrc> … <dst>:等同于-put,只不过源文件在拷贝后被删除。

14,hadoop fs –get [-ignoreCrc] [-crc] <src> <localdst>:从DFS拷贝文件到本地文件系统,文件匹配pattern,若是多个文件,则dst必须是目录。

15,hadoop fs –getmerge <src> <localdst>:顾名思义,从DFS拷贝多个文件、合并排序为一个文件到本地文件系统。

16,hadoop fs –cat <src>:展示文件内容。

17,hadoop fs –copyToLocal [-ignoreCrc] [-crc] <src> <localdst>:等价于-get。

18,hadoop fs –mkdir <path>:在指定位置创建目录。

19,hadoop fs –setrep [-R] [-w] <rep> <path/file>:设置文件的备份级别,-R标志控制是否递归设置子目录及文件。

20,hadoop fs –chmod [-R] <MODE[,MODE]…|OCTALMODE> PATH…:修改文件的权限,-R标记递归修改。MODE为a+r,g-w,+rwx等,OCTALMODE为755这样。

21,hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH…:修改文件的所有者和组。-R表示递归。

22,hadoop fs -chgrp [-R] GROUP PATH…:等价于-chown … :GROUP …。

23,hadoop fs –count[-q] <path>:计数文件个数及所占空间的详情,输出表格的列的含义依次为:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,FILE_NAME或者如果加了-q的话,还会列出QUOTA,REMAINING_QUOTA,SPACE_QUOTA,REMAINING_SPACE_QUOTA。

最后就是万能的hadoop fs –help [cmd]啦~~

演示截图:

Paste_Image.png
Paste_Image.png
Paste_Image.png

创建目录


Paste_Image.png

复制+删除


Paste_Image.png

拷贝到当前的目录


Paste_Image.png

hadoop读取与写入流程

Paste_Image.png

读取:


Paste_Image.png
Paste_Image.png

写入:

Paste_Image.png
Paste_Image.png

HDFS JAVA API

使用HDFS FileSystem详解

Paste_Image.png

讲解分析configuration和filesystem类

点开没有源码就需要找关联包

Paste_Image.png

按住crlt再点击 可以看详细的

需要完成的

Paste_Image.png

url来读取文件

Paste_Image.png

文件流读取文件

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

有问题的地方:查看目录,获取节点信息,查看集群信息

HDFS实际应用之文件合并

./表示当前目录
减小了本地空间,也提高了上传的效率
hadoop也有这个命令:
getmerge

Paste_Image.png

命令操作演示

Paste_Image.png

保持格式一致,所以移除了一个

Paste_Image.png
Paste_Image.png

先通过fs没找到fsshell,进而找到这个类。

Paste_Image.png

Paste_Image.png

先建他,通过f12看源码,在源码中找到copymerge。

源码没看懂

Paste_Image.png
Paste_Image.png

getmerge功能实现思路

文件的上传下载,实质就是字符流的读写操作。
读文件:打开输入流--》read
写文件:打开输出流--》write

把这六个格子的文件上传到HDFS

Paste_Image.png

百度网盘功能的实现以及HDFS API相应说明

上传 新建 下载 删除 重命名 移动都有对应的功能。
作业:按照百度网盘 实现自己的网盘,界面功能实现就好,使用jsp界面就好。

Hadoop章末作业布置

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

MapReduce章节

Paste_Image.png

MapReduce特点

  • 易于编程
  • 良好拓展性
  • 适合海量数据(离线计算)
  • 高容错性

相关概念

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

输出文件包括三部分:
success(成功与否)
logs (日志文件)
输出结构

首先文件到map,map传输文件(进行排序),拷贝给reduce,然后进行后续过程。

shuffling包含拷贝排序。


Paste_Image.png

num task 显示了有几个map,几个reduce

Paste_Image.png

表示的进度,map就只有map
reduce拷贝,排序,reduce

Paste_Image.png

Map处理

Paste_Image.png

key是0,12 因为hello hadoop!我们看成12个字符。

Paste_Image.png
Paste_Image.png

Reduce分析

Paste_Image.png

总的来说:

Input---key,value--map()--key,value--分区、排序、组合、拷贝排序(以key,value来做)--reduce--key,value--output

MapReduce编程模型

Paste_Image.png

利用hadoop计算pi
利用的是蒙地卡罗算法,常用这个方法来看Hadoop的mapreduce性能。


Paste_Image.png

几个监控图

Paste_Image.png
Paste_Image.png

MapReduce负责的一些功能

Paste_Image.png

MapReduce的八股文结构

Paste_Image.png

map转化的key与value

Paste_Image.png
Paste_Image.png
Paste_Image.png

打包程序在hadoop下面运行

  • 步骤
Paste_Image.png
  • 打包成jar包
    在eclipse下面选择项目右键,选择export,然后在linux下运行。
    hadoop jar <jar> 目标目录 输出目录

  • 代码示例

Paste_Image.png

优化MyWordCount程序

消除此段警告提示
17/10/17 10:28:21 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.

加入此类GenericOptionsParser

Paste_Image.png

增加代码95-99行

Paste_Image.png

加入hadoop-eclipse-plugins插件

把这个jar包放入eclipse下的dorpins,配置文件如下

Paste_Image.png

改tmp.dir 以及false和3的那个参数

Paste_Image.png
Paste_Image.png

运行的时候(不太清楚)
为了简单起见直接配置参数有两种方式:

  1. 加入93-95行代码


    Paste_Image.png

args = new String[] {"hdfs://192.168.38.129:9000/opt/wc/input", "hdfs://192.168.38.129:9000/opt/wc/output4"};

  1. 右键run as 在最后一行
    点进去直接配置
Paste_Image.png

先会出现错误
解决方案(原理不懂):

Paste_Image.png

MyWordCount处理过程详解

先分割:

Paste_Image.png
Paste_Image.png

自然先按字母表来排列

Paste_Image.png
Paste_Image.png

MapReduce作业运行流程

Paste_Image.png
Paste_Image.png

数据本地化:运算移动,数据不移动:不是随机分配,每个map任务需要一些文件,首先看哪台机器有满足此任务的条件。
spot 槽 指hadoop1.0中的资源
hadoop2.0用的是container 容器


Paste_Image.png
Paste_Image.png

MapReduce执行流程shuffle map之后 reduce之前的过程

Paste_Image.png
Paste_Image.png

一个reduce任务对应一个分区数据


Paste_Image.png
Paste_Image.png

数据压缩:一开始用Gzip后来用Lzo与snappy

Paste_Image.png
Paste_Image.png

Reduce端口分析

Paste_Image.png

排序是hadoop的灵魂

Paste_Image.png

先往内存里面写,然后不够的话,写到文件里去(绿色方框),最后再次合并到菱形,不断的合并与排序

Paste_Image.png

MapReduce Shuffle(混淆)过程讲解

Paste_Image.png

map端洗牌过程

Paste_Image.png

在3过程中(溢出过程中):进行了排序、合并

Paste_Image.png
Paste_Image.png

可以定制分区,经过partitioner返回0,说明第一个就完全足够(取余数)

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

partion分区就来放key与value。
0,1,2各个分区。


Paste_Image.png
Paste_Image.png

reduce端口洗牌过程

同样如果没有到阈值也不用到disk


Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

源代码跟踪查看Map Task和Reduce Task数目的个数

Paste_Image.png
Paste_Image.png
Paste_Image.png

MapReduce回顾

Paste_Image.png
Paste_Image.png
Paste_Image.png

Hadoop MapReduce数据类型

Paste_Image.png
Paste_Image.png

重写相当于方法的重载,函数名字一样但是功能不一样,例如一个求和函数但是他只能算整理,如果我们要让他算小数,就需要重载。


Paste_Image.png
Paste_Image.png

Hadoop中Comparator中的讲解(第67课,没看懂)

Paste_Image.png
Paste_Image.png

提出问题,原本当数据写入磁盘时候,首先需要....,能不能对字节直接进行比较

Paste_Image.png

以下以InterWritable为例查看


Paste_Image.png
Paste_Image.png

分为如上四步的一个说明


QQ图片20171107222257.png
QQ图片20171107222435.png

自定义数据类型

QQ图片20171107222627.png
QQ图片20171107222754.png
QQ图片20171107222828.png
QQ图片20171107223020.png
QQ图片20171107223135.png

数据类型这里不太明白

MapReduce应用案例之手机流量分析统计

  1. 分析业务需求:用户使用手机上网,存在流量的消耗,流量消耗有两部分:其一上行流量(发送信息流行),其二下行流量(接受信息流量),每种流量在网络传输过程中,都有两种形式说明:包的大小,流量的大小。使用手机上网,以手机号为唯一标识符,进行记录。需要的信息字段:


    QQ图片20171108155229.png

实际需要的字段:

  • 手机号码
  • 上行数据包数
  • 下行数据包数
  • 上行总流量
  • 下行总流量
  1. 自定义数据类型(5个字段):
    DataWritable 实现WritableComparable接口

  2. 分析MapReduce写法,哪些业务逻辑在Map阶段执行,哪些业务逻辑在Reduce阶段执行。
    Map阶段:从文件中获取数据,抽取出需要的五个字段,输出的key为手机号码,输出的value为数据流量的类型DataWritable对象。
    Reduce阶段:将相同手机号码的value中的数据流量进行相加,得出手机流量的总数(数据包和数据流量)输出到文件中,以制表符分开。

69与70流量监控部分代码没看懂

推荐阅读更多精彩内容