• 【Python大数据笔记_day04_Hadoop】


    分布式和集群

    分布式:多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)

    集群:多台服务器联合起来独立做相同的任务(多个服务器分担客户发来的请求)

    注意:集群如果客户端请求量(任务量)多,多个服务器同时处理不同请求(不同任务),如果请求量少,一台服务器干活,其他服务器备份使用

    Hadoop框架

    概述

    Hadoop简介:是Apache旗下的一个用Java语言实现的存储个计算大规模数据的软件平台.

    Hadoop起源:Doug Cutting 创建的最早起源一个Nutch项目.

    三驾马车:谷歌的三篇论文加速了Hadoop的研发

    Hadoop框架意义:作为大数据解决方案,越来越多的企业将Hadoop技术作为进入大数据领域的必备技术.

    狭义上来说:Hadoop指Apache这款开源框架,他的核心组件有:HDFS,MR,YANR

    广义上来说:Hadoop通常是指一个更广泛的概念——Hadoop生态圈

    Hadoop发行版本:分为开源社区版和商业版

    开源社区版:指由Apache软件基金会维护的版本,是官方维护的版本体系,版本丰富,兼容性稍差

    商业版:指由第三方商业公司在社区版Hadoop基础上进行了一些修改、整合以及各个组件兼容性测试而发行的版本,如cloudera的CDH等。

     版本更新

     1.x版本系列: hadoop的第二代开源版本,该版本基本已被淘汰        hadoop组成:  HDFS(存储)和MapReduce(计算和资源调度)

    2.x版本系列: 架构产生重大变化,引入了Yarn平台等许多新特性       hadoop组成:  HDFS(存储)和MapReduce(计算)和YARN(资源调度)

    3.x版本系列: 因为2版本的jdk1.7不更新,基于jdk1.8升级产生3版本   hadoop组成:  HDFS(存储)和MapReduce(计算)和YARN(资源调度)

     Hadoop架构解析[重点]

    简单聊下hadoop架构?

    当前版本hadoop组成: HDFS , MapReduce ,YARN

    HDFS:(分布式文件系统),解决海量数据存储
        元数据: 描述核心数据的数据
        NameNode:集群当中的主节点,主要用于管理集群当中的各种数据
        SecondaryNameNode:主要能用于辅助NameNode进行文件块元数据存储
        DataNode:集群当中的从节点,主要用于存储真实的海量的业务数据
    YARN:(作业调度和集群资源管理的框架),解决资源任务调度
        ResourceManager: 接收用户的计算请求任务,并负责集群的资源管理和分配
        NodeManager: 负责执行主节点分配的任务(给MR的计算程序提供资源)
    MapReduce:(分布式运算编程框架),解决海量数据计算
        如何计算: 核心思想就是分而治之   Map负责分解,Reduce负责合并
        MR程序: 使用java/python然后去编写MR程序,成本高           如何解决?  在hive平台上编写sql,执行sql底层自动转为MR程序
        
    MapReduce计算需要的数据和产生的结果需要HDFS来进行存储
    MapReduce的运行需要由Yarn集群来提供资源调度。

    Hadoop集群启动[练习]

    启动

    1. # 一键启动hdfs和yarn集群
    2. [root@node1 ~]# start-all.sh
    3. # 单独启动mr计算任务历史服务
    4. [root@node1 ~]# mapred --daemon start historyserver

    页面

    如果没有做一下配置,需要使用ip地址访问:

            HDFS: http://192.168.88.161:9870/

            YARN: http://192.168.88.161:8088/

            jobhistory: http://192.168.88.161:19888/

    可以进入C:\Windows\System32\drivers\etc 目录打开hosts文件,添加以下内容:

    192.168.88.161 node1
    192.168.88.162 node2
    192.168.88.163 node3

     配置完成后,可以直接通过node1访问

            HDFS: http://node1:9870/

            YARN: http://node1:8088/

            jobhistory: http://node1:19888/

    官方示例

     在Hadoop的安装包中,官方提供了MapReduce程序的示例examples,以便快速上手体验MapReduce。该示例是使用java语言编写的,被打包成为了一个jar文件。

    官方示例jar路径: /export/server/hadoop-3.3.0/share/hadoop/mapreduce

     圆周率练习

    hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi x y

    第一个参数pi:表示MapReduce程序执行圆周率计算;

    第二个参数x:用于指定map阶段运行的任务次数,并发度,举例:x=10

    第三个参数y:用于指定每个map任务取样的个数,举例: y=50

     

    1. [root@node1 ~]# cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
    2. [root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 10 50
    3. ...
    4. Job Finished in 29.04 seconds
    5. Estimated value of Pi is 3.16000000000000000000

    词频统计[重点]

    需求:

            WordCount算是大数据统计分析领域的经典需求了,相当于编程语言的HelloWorld。统计文本数据中, 相同单词出现的总次数。用SQL的角度来理解的话,相当于根据单词进行group by分组,相同的单词 分为一组,然后每个组内进行count聚合统计。 ​ 已知hdfs中word.txt文件内容如下,计算每个单词出现的次数

    步骤

     1.HDFS根目录中创建input目录,存储word.txt文件

    可以在window本地提前创建word.txt文件存储,内容如下:

    zhangsan lisi wangwu zhangsan
    zhaoliu lisi wangwu zhaoliu
    xiaohong xiaoming hanmeimei lilei
    zhaoliu lilei hanmeimei lilei

     

     2.在shell命令行中执行如下命令

    1. [root@node1 ~]# cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
    2. [root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output

     3.去HDFS中查看是否生成output目录

     注意: output输出目录,在执行第2步命令后会自动生成,如果提前手动创建或者已经存在,就会报以下错误:

    org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://node1.itcast.cn:8020/output already exists

     4.进入output目录查看part-r-00000文件,结果如下:

     hanmeimei    2
    lilei    3
    lisi    2
    wangwu    2
    xiaohong    1
    xiaoming    1
    zhangsan    2
    zhaoliu    3

    Hadoop-HDFS 

    特点

    HDFS存储大文件,把大文件默认切割成128M大小的block块,进行存储
    HDFS存储块的时候,会给每个块进行备份(一共三份)
    HDFS文件系统可存储超大文件,时效性稍差。
    HDFS具有硬件故障检测和自动快速恢复功能。
    HDFS为数据存储提供很强的扩展能力。
    HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改。
    HDFS可在普通廉价的机器上运行。

    架构

     

     1、Client
        发请求就是客户端。
        文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储
        与 NameNode 交互,获取文件的位置信息。
        与 DataNode 交互,读取或者写入数据。
        Client 提供一些命令来管理 和访问HDFS,比如启动或者关闭HDFS。
    2、NameNode
        就是 master,它是一个主管、管理者。
        处理客户端读写请求。
        管理 HDFS 元数据(文件路径,文件的大小,文件的名字,文件权限,文件切割后的块(block)信息…)。
        配置3副本备份策略。
    3、DataNode
        就是Slave。NameNode 下达命令,DataNode 执行实际的操作。
        存储实际的数据块(block)。
        执行数据块的读/写操作。
        定时向namenode汇报block信息。
    4、Secondary NameNode
        并非 NameNode 的备份节点。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。
        只是辅助 NameNode,对HDFS元数据进行合并,合并后再交给NameNode。
        在紧急情况下,可辅助恢复 NameNode 部分数据。

    副本

    block块: HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件拆分成一系列的数据块进行存储,这个数据块被称为block,除了最后一个,所有的数据块都是同样大小的。

    block 块大小默认: 128M(134217728字节)

    注意: 为了容错,文件的所有block都会有副本。每个文件的数据块大小和副本系数都是可配置的。
        
    副本系数默认:  3个

    hdfs默认文件: https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

    shell命令 

     hdfs的shell命令概念: 安装好hadoop环境之后,可以执行类似于Linux的shell命令对文件的操作,如ls、mkdir、rm等,对hdfs文件系统进行操作查看,创建,删除等。

    hdfs的shell命令格式1: hadoop fs -命令 参数
    hdfs的shell命令格式2: hdfs dfs -命令 参数

    hdfs的家目录默认: /user/root   如果在使用命令操作的时候没有加根目录/,默认访问的是此家目录/user/root

    查看目录下内容:  hdfs dfs -ls 目录的绝对路径
    创建目录: hdfs dfs -mkdir 目录的绝对路径
    创建文件: hdfs dfs -touch 文件的绝对路径
    移动目录/文件: hdfs dfs -mv 要移动的目录或者文件的绝对路径  目标位置绝对路径
    复制目录/文件: hdfs dfs -cp 要复制的目录或者文件的绝对路径  目标位置绝对路径
    删除目录/文件: hdfs dfs -rm [-r] 要删除的目录或者文件的绝对路径
    查看文件的内容: hdfs dfs -cat 要查看的文件的绝对路径          注意: 除了cat还有head,tail也能查看
    查看hdfs其他shell命令帮助: hdfs dfs --help
    注意: hdfs有相对路径,如果操作目录或者文件的时候没有以根目录/开头,就是相对路径,默认操作的是/user/root

    把本地文件内容追加到hdfs指定文件中: hdfs dfs -appendToFile 本地文件路径 hdfs文件绝对路径

    注意: window中使用页面可以完成window本地和hdfs的上传下载,当然linux中使用命令也可以完成文件的上传和下载
    linux本地上传文件到hdfs中: hdfs dfs -put linux本地要上传的目录或者文件路径  hdfs中目标位置绝对路径
    hdfs中下载文件到liunx本地: hdfs dfs -get hdfs中要下载的目录或者文件的绝对路径 linux本地目标位置路径 

    Hive环境准备[重点]

    shell脚本执行方式

    方式1: sh 脚本          注意: 需要进入脚本所在目录,但脚本有没有执行权限不影响执行
    方式2: ./脚本           注意: 需要进入脚本所在目录,且脚本必须有执行权限
    方式3: /绝对路径/脚本     注意: 不需要进入脚本所在目录,但必须有执行权限
    方式4: 脚本             注意: 需要配置环境变量(大白话就是把脚本所在路径共享,任意位置都能直接访问)

    配置Hive环境变量

    [root@node1 /]# vim /etc/profile

    在profile文件末尾添加(小技巧G+o快速定位到最后) export HIVE_HOME=/export/server/apache-hive-3.1.2-bin export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/sbin

    [root@node1 /]# source /etc/profile

    最后建议关机拍摄下快照

     先启动hive服务

    知识点:

    后台启动metastore服务: nohup hive --service metastore &
    后台启动hiveserver2服务: nohup hive --service hiveserver2 &
    查看metastore和hiveserver2进程是否启动: jps                   注意: 服务名都叫RunJar,可以通过进程编号区分
    服务启动需要一定时间可以使用lsof查看: lsof -i:10000              注意: 如果无内容继续等待,如果有内容代表启动成功

    示例: 

    1. [root@node1 bin]# nohup hive --service metastore &
    2. [1] 13490
    3. nohup: 忽略输入并把输出追加到"nohup.out"
    4. 回车
    5. [root@node1 bin]# nohup hive --service hiveserver2 &
    6. [2] 13632
    7. nohup: 忽略输入并把输出追加到"nohup.out"
    8. 回车
    9. [root@node1 bin]# jps
    10. ...
    11. 13490 RunJar
    12. 13632 RunJar
    13. [root@node1 bin]#
    14. # 注意:10000端口号一般需要等待3分钟左右才会查询到
    15. [root@node1 bin]# lsof -i:10000
    16. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    17. java 18804 root 520u IPv6 266172 0t0 TCP *:ndmp (LISTEN)
    18. # 此处代表hive启动成功,今日内容完成

    再连接hive服务

    知识点:

    一代客户端连接命令: hive           注意: hive直接连接成功,直接可以编写sql语句

    二代客户端连接命令: beeline        注意: 以后建议用二代客户端
    二代客户端远程连接命令: !connect jdbc:hive2://node1:10000
    注意: hive用户名是root  密码为空

    一代客户端示例: 

    1. [root@node1 /]# hive
    2. ...
    3. hive> show databases;
    4. OK
    5. default
    6. Time taken: 0.5 seconds, Fetched: 1 row(s)
    7. hive> exit;

    二代客户端示例:

    1. [root@node1 /]# beeline
    2. # 先输入!connect jdbc:hive2://node1:10000连接
    3. beeline> !connect jdbc:hive2://node1:10000
    4. # 再输入用户名root,密码不用输入直接回车即可
    5. Enter username for jdbc:hive2://node1:10000: root
    6. Enter password for jdbc:hive2://node1:10000:
    7. # 输入show databases;查看表
    8. 0: jdbc:hive2://node1:10000> show databases;
    9. INFO : Concurrency mode is disabled, not creating a lock manager
    10. +----------------+
    11. | database_name |
    12. +----------------+
    13. | default |
    14. +----------------+
    15. 1 row selected (1.2 seconds)
  • 相关阅读:
    React之Jsx如何转换成真实DOM
    git回退版本
    UE4 设计模式:单例模式(Singleton Pattern)
    heroku的使用,部署node后端
    【人工智能】本地运行开源项目MMSegmentation引发的问题
    CAD二次开发--像纬地与CASS程序一样双击桌面图标实现插件的自动挂载(不用netload也不用进入后输入挂载命令)
    ubunu中配置torch环境4060显卡
    文档外发控制与安全:实现高效协作与数据安全的关键
    学习、实习、校招
    黑灰产套现城市消费券大揭秘
  • 原文地址:https://blog.csdn.net/qq_52442855/article/details/134298887