hadoop

作者: Babus | 来源:发表于2017-09-05 20:25 被阅读0次

    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流量监控部分代码没看懂

    相关文章

      网友评论

        本文标题:hadoop

        本文链接:https://www.haomeiwen.com/subject/nskkjxtx.html