• hadoop初体验


    今日课程内容大纲
        01) hadoop的简介
        02) hadoop集群的搭建
            发行版本
            集群规划
            hadoop源码编译(了解)
            hadoop集群搭建
        03) hadoop集群启动与初体验
        04) MapReduce的历史记录
        05) HDFS的垃圾桶机制
    01--Apache Hadoop--介绍和发展历程
        01) hadoop的介绍
            00) hadoop1.x和hadoop2.x的区别:  yarn(资源管理)  解决了单点故障问题   提高资源的利用率
            01) 狭义解释:特指Apache的一款java语言开发的开源软件,由一下三部分组成:
                HDFS: 解决海量数据存储的hadoop分布式文件系统
                MapReduce: 解决海量数据分布式计算问题
                YARN: 解决分布式架构中资源管理和任务调度
            02) 广义解释:整个基于hadoop的生态系统,包括大数据处理流程中的各个阶段的软件
                hive hbase zookeeper oozie sqoop flume impala storm spark flink kylin......
        02) hadoop发展历史
            01) hadoop的创始人doug cutting   lucene(海量数据搜索) -----> nutch (海量数据抓取)-----> 海量数据存储和海量数据计算问题?
                参考: https://www.linkedin.com/in/cutting
            02) 2003年Google发表第一篇论文: GFS(Google分布式文件系统) 解决海量数据存储
            03) 2004年Google发表第二篇论文: Google的MapReduce 解决海量数据计算
            04) 同一时期,doug cutting 基于Google的两篇论文开发出: HDFS(hadoop的分布式文件系统)  MapReduce(基于hadoop的分布式计算平台),成为Apache顶级项目
            05) 2006年Google发表第三篇论文: BigTable ,开源界根据论文开发了HBase(基于hadoop平台的分布式数据库)
                参考:资料中Google三篇论文
        03) hadoop的特性
            01) 扩容能力
            02) 成本低
            03) 高效率
            04) 高可靠
    02--Apache Hadoop--应用
        01) hadoop精准区分: 做什么(业务)   怎么做(技术)
        02) hadoop提供了大数据存储能力 分布式计算能力  不和具体的行业挂钩  有大量数据的行业都在用hadoop
        03) 行业应用:
            广告系统,基于用户行为分析的推荐系统,个人征信分析,股票量化交易,智慧交通,智慧城市等等应用

    03--Apache Hadoop--集群部署安装--发行版本介绍
        01) hadoop社区版: Apache官方维护的版本
            01) 优点: 功能最新 免费
            02) 缺点: 稳定性差 兼容性差
            03) 下载地址:
                官网下载页面:https://hadoop.apache.org/releases.html
                软件下载页面:https://archive.apache.org/dist/hadoop/common/
                hadoop2.6.0软件下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/
        02) hadoop商业版: 一些商业公司在社区版的基础上进行商业开发, 保持架构 api 配置文件等不变,仅仅解决bug及软件兼容性问题
            01) 优点: 稳定性好 软件兼容性好
            02) 缺点: 收费 暂时不能使用最新的hadoop版本
            03) 下载地址:http://archive.cloudera.com/cdh5/cdh/5/        搜索引擎搜索: cdh archive
                官网下载页面:http://archive.cloudera.com/cdh5/cdh/5/    搜索hadoop-2.6.0-cdh5.14.0.tar.gz
        03) hadoop自身版本的发展
            01) 历经1.x 2.x 3.x
            02) 1.x退出历史舞台, 企业主流版本2.5-2.8的版本(稳定性软件兼容性最好), 3.x使用不多(软件间的兼容性还未升级完毕)
    04--Apache Hadoop--集群部署安装--集群角色介绍&部署模式
        01) 两个集群: HDFS集群和yarn集群   逻辑上分离,物理上在一起
            01) HDFS集群(主从架构):
                主角色: NameNode(nn)
                从角色: DataNode(dn)
                主角色的辅助角色(秘书角色): secondaryNameNode(snn)
            02) yarn集群(主从架构):
                主角色: ResourceManager(rm)
                从角色: NodeManager(nm)
            03) MapReduce是需要开发的程序组件:
                Map组件:
                Reduce组件:
        02) 部署模式:
            01) standalone(单机)模式:
                一台机器,没有HDFS, 只能测试MapReduce程序(一个进程),处理本地linux系统的文件
            02) 伪集群模式:
                一台机器上模拟一个分布式环境,具备hadoop的主要功能,用于学习调试
            03) 分布式集群模式:
                hadoop集群的多个进程运行在多台服务器上,用于生产环境
            04) 高可用(HA high availability)集群模式:
                主要解决单点故障 保证集群的高可用,提高可靠性
            我们今天的部署模式:  分布式集群模式
    05--Apache Hadoop--集群部署安装--服务器环境准备
        01) 准备三台服务器
            1   vmware虚拟机
            2   静态ip
            3   主机名称
            4   ip与主机映射
            5   关闭防火墙: iptables 和 selinux
            6   ssh免密登录
            7   时间同步
            8   jdk环境 配置JAVA_HOME环境变量
    06--Apache Hadoop--集群部署安装--了解源码编译的含义
        01) 为什么要编译hadoop的源码?
            01) Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries) 的概念.
                说白了,就是Hadoop的某些功能,必须通过JNT来协调Java类文件和Native代码生成的库文件一起才能工作.


            02) linux系统要运行Native 代码,首先要将Native 编译成目标CPU 架构的[.so]文件.
                而不同的处理器架构,需要编译出相应平台的动态库[.so] 文件,
                才能被正确的执行,所以最好重新编译一次hadoop源码,让[.so]文件与自己处理器相对应.
                    注意: windows平台是动态库[.dll]文件

            总结: 主要是要重新编译本地库(Native Libraries) 代码(Linux下对应[.so]文件,window下对应[.dlI]文件),也就是编译生成linux下的[.so] 文件。
            当然如果自己修改了源码,也需要自己重新编译
        02) 编译环境准备
            01) 马上回来进行
                01) 安装jdk1.7
                02) 安装maven
                03) 参考详细笔记

    07--Apache Hadoop--集群部署安装--集群规划
        01) 集群规划: 在我们准备的三台服务器上如何搭建hadoop集群
            原则:
                优先满足软件需要的硬件资源
                尽量避免有冲突的软件不要在一起
                有依赖的软件尽量部署在一起

        02) 规划安排:
            hadoop01: NameNode  DataNode                    | ResourceManager  NodeManager
            hadoop02:           DataNode  SecondaryNameNode | NodeManager
            hadoop03:           DataNode                    | NodeManager

        03) 未来扩展:
            hadoop04: DataNode  NodeManager
            hadoop05: DataNode  NodeManager
            hadoop06: DataNode  NodeManager
            ......
    08--Apache Hadoop--集群部署安装--安装包目录结构
        01) 上传编译好的安装包到/export/software
            rz  hadoop-2.6.0-cdh5.14.0-with-centos6.9.tar.gz
        02) 解压安装包到/export/servers
            tar -zxvf hadoop-2.6.0-cdh5.14.0-with-centos6.9.tar.gz -C /export/servers/
        03) hadoop的目录结构
            bin: Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现
            etc: hadoop配置文件目录
            include:对外提供的编程库头文件(具体动态库和静态库在lib目录中)
            lib: 该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用
            libexec: 各个服务对用到的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
            sbin: hadoop集群启动关闭的脚本(单节点逐个启动  一键启动)
            share: Hadoop各个模块编译后的jar包所在的目录  官方案例jar包
    09--Apache Hadoop--集群部署安装--配置文件详解--上
        01) hadoop-env.sh
            vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hadoop-env.sh
            export JAVA_HOME=/export/servers/jdk1.8.0_144
        02) xml配置文件(hdfs mapreduce yarn  common四个模块的配置)
            参考配置: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/
            01) core-site.xml
                <!-- 指定hadoop所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
                <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://hadoop01:8020</value>
                </property>
                <!-- 指定hadoop运行时产生文件的存储目录,默认/tmp/hadoop-${user.name} -->
                <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/export/data/hadoopdata</value>
                </property>
            02) hdfs-site.xml
                <!-- 指定HDFS副本的数量 -->
                <property>
                    <name>dfs.replication</name>
                    <value>2</value>
                </property>
                <!-- secondaryNameNode所在的地址-->
                <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>hadoop02:50090</value>
                </property>
            03) mapred-site.xml
                改名:  mv mapred-site.xml.template mapred-site.xml
                vi mapred-site.xml

                <!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
                <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
                </property>
            04) yarn-site.xml
                <!-- 指定YARN的老大(ResourceManager)的地址 -->
                <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>hadoop01</value>
                </property>

                <!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值:"" -->
                <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
                </property>

                大量的默认配置: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/

    10--Apache Hadoop--集群部署安装--配置文件详解--下
        01) slaves文件
            01) 文件作用
                配合一键启动脚本,决定哪些服务器上启动从角色
                通过dfs.hosts 指定文件中的机器才能加入hadoop集群中
            02) 配置内容: 一行一个主机名
                vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/slaves

                hadoop01
                hadoop02
                hadoop03
        02) 将主节点上的hadoop的安装包分发到hadoop02 和 hadoop03
            cd  /export/servers/
            scp -r hadoop-2.6.0-cdh5.14.0/ root@hadoop02:/export/servers/
            scp -r hadoop-2.6.0-cdh5.14.0/ root@hadoop03:/export/servers/
        03) 配置hadoop的环境变量:
            vim /etc/profile 添加如下内容:
                export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
                export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
            将主节点上配好的/etc/profile文件 分发到hadoop02 和 hadoop03 上
                scp /etc/profile root@hadoop02:/etc/profile
                scp /etc/profile root@hadoop03:/etc/profile
            将三台的环境变量生效:(在三台上执行如下)
                source /etc/profile
            验证hadoop环境变量是否生效
                hadoop version
    11--Apache Hadoop--集群部署安装--namenode format
        01) 为什么需要format?
            01) format主要创建hadoop运行依赖的一些文件和文件夹, 本质就是一些清理和准备工作
            02) 首次启动集群前,需要针对hdfs进行format操作
            03) format操作只需要进行一次(如果成功的话)
        02) namenode format操作(在namenode所在的机器上)
            hadoop namenode -format (过时的命令)
            hdfs namenode -format
            成功的标识:
            Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
            可以查看初始化后的文件内容: cd /export/data/hadoopdata/dfs/name/current
        03) 不小心再次执行了format会如何? 怎么解决?
            会如何: 上一次初始化的集群会出现主从角色互相不识别的情况  之前集群的元数据全部丢失
            如何解决:将3台服务器上hadoop.tmp.dir指定的目录全部删除,重新format一次(相当于一个新的集群)
    12--Apache Hadoop--集群两种启动方式
        01) 单节点逐个启动:
            01) 在主节点上使用以下命令启动HDFS NameNode
                hadoop-daemon.sh start namenode
            02) 在每个从节点上使用以下命令启动HDFS DataNode
                hadoop-daemon.sh start datanode
            03) 在主节点上使用以下命令启动YARN ResourceManager
                yarn-daemon.sh  start resourcemanager
            04) 在每个从节点上使用以下命令启动YARN nodemanager
                yarn-daemon.sh start nodemanager
            05) 在hadoop02上使用如下命令启动HDFS secondaryNameNode
                hadoop-daemon.sh start secondarynamenode
            说明: 以上脚本位于$HADOOP_PREFIX/sbin/目录下.如果想要停止某个节点上某个角色,只需要把命令中的start改为stop即可。
                  好处: 可以精准的控制每台机器上每个进程的状态,便于排查单个服务器的异常问题
        02) 一键启动脚本:
            01) 前提:
                配置好ssh免密登录
                配置好slaves文件
            02) 启动hdfs集群:
                start-dfs.sh   stop-dfs.sh
            03) 启动yarn集群:
                stat-yarn.sh   stop-dfs.sh
            04) 一键启动两个集群:
                start-all.sh   stop-all.sh

    13--Apache Hadoop--集群初体验--感受hadoop
        01) webUI界面
            01) namenode的界面: http://hadoop01:50070
                50070是webUI端口   之前配置的8020是rpc通信端口
                参考:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
            02) resourceManager的界面: http://hadoop01:8088
        02) 初体验:
            01) hdfs存储文件体验:
                显示帮助: hadoop fs
                创建目录:hadoop fs -mkdir  /test
                上传文件:hadoop fs -put 1.txt /test/
                下载文件:hadoop fs -get /test/1.txt ./
                体验:
                    1 hdfs本质就是文件存储的
                    2 结构上也是树形目录结构, 从/ 根目录开始
                    3 有文件夹和文件
                    4 操作起来比较慢? 为什么慢? 难道是因为分布式文件存储的原因?
            02) yarn体验,需要结合mr:
                01) 运行wordcount
                    1   /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce
                    2   hadoop fs -mkdir -p /wordcount/input
                    3   vim wc.txt
                    4   hadoop fs -put wc.txt /wordcount/input
                    5   hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar wordcount /wordcount/input /wordcount/output
                    6   hadoop fs -cat /wordcount/output/part-r-00000
                体验:
                    mr程序本质上就是一个jar包(自己写的程序打成jar包)
                    mr第一步先去找rm? 申请运行需要的资源吗?
                    mr程序分成了两个阶段: map  和 reduce阶段
                    mr输出的结果好像有序, 按照字典序进行升序排列(a-z,0-9)
                02) 圆周率计算
                    hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 2 4
    14--Apache Hadoop--job history服务的开启
        01) 为什么需要job history服务?
            重启yarn集群后,上次运行的mr程序的状态都丢失了,我们需要保存之前运行的mr程序信息(日志形式)
        02) 如何开启job history服务?
            01) 默认情况下没有开启此功能,需要在mapred-site.xml中配置并手动启动
            02) 关闭hdfs集群
                stop-dfs.sh
            03) 修改mapred-site.xml
                cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
                vim mapred-site.xml
                    <!-- MapReduce JobHistory Server IPC host:port -->
                    <property>
                        <name>mapreduce.jobhistory.address</name>
                        <value>hadoop01:10020</value>
                    </property>
                    <!-- 查看历史服务器已经运行完的Mapreduce作业记录的web地址,需要启动该服务才行 -->
                    <property>
                        <name>mapreduce.jobhistory.webapp.address</name>
                        <value>hadoop01:19888</value>
                    </property>
            04) 把修改好的配置文件scp给其他机器
                scp mapred-site.xml  root@hadoop02:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/mapred-site.xml
                scp mapred-site.xml  root@hadoop03:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/mapred-site.xml
            05)启动hdfs集群:
                start-dfs.sh
            06) 单独启动/关闭historyserver服务(只需要在配置的指定机器上启动即可hadoop01)
                启动: mr-jobhistory-daemon.sh start historyserver
                关闭: mr-jobhistory-daemon.sh stop  historyserver
            07) 访问job history服务器
                http://hadoop01:19888

            注意: job history服务需要手动启动
    15--Apache Hadoop--hdfs垃圾桶机制功能
        01) 为什么需要垃圾桶机制?
            误操作删除一些重要文件,可以进行恢复.
        02) 垃圾桶机制的配置
            默认误操作删除重要文件,无法恢复.
            01) vim core-site.xml
                <!-- 删除文件在回收站的保存时间  -->
                <property>
                    <name>fs.trash.interval</name>
                    <value>1440</value>
                </property>
            02) 把配置文件scp给其他机器
                scp core-site.xml  root@hadoop02:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml
                scp core-site.xml  root@hadoop03:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml
            03) 重启hdfs集群:
                stop-dfs.sh
                start-dfs.sh
        03) 垃圾桶机制验证
            01) 删除文件: hadoop fs -rm /test/1.txt
            02) 开启垃圾桶机制后: 本质是把删除的文件移动到一个指定的文件夹中(每个用户在/user/root/.Trash下都有自己的垃圾目录)
            03) 如何恢复:
                重新移动回来: hadoop fs -mv /user/root/.Trash/Current/test/1.txt /test/
            04) 什么时候真正删除:  垃圾桶机制配置的时间到了(1天=1440分钟)
            05) 如何跳过垃圾桶直接永久删除: hadoop fs -rm -skipTrash /test/1.txt

    今日课程总结
    01) hadoop简介: 广义  狭义(hdfs  yarn  mapreduce)

    02) hadoop发展历史   hadoop (业务  技术)  精准广告营销推荐    短视频推荐系统   个人征信

    03) hadoop的发行版:  社区版    商业版

    04) hadoop的角色介绍:  nn  dn   snn   rm  nm

    05) hadoop集群安装:
            01) hadoop的源码编译:
            02) hadoop的目录结构:  bin  sbin  share   etc
            03) hadoop-env.sh  core-site.xml   hdfs-site.xml  mapred-site.xml  yarn-site.xml  slave
            04) 分发安装包
            05) 格式化  hadoop namenode -format   一次性的
            06) 单独启动     一键脚本: 
    06) hadoop集群的体验:
            01) hdfs的体验: 存储海量数据的文件系统    管理文件    客户端(命令行  java  浏览器客户端)
            02) MapReduce的体验: jar包(mapper  reducer main)   海量数据分布式并集计算框架   wordcount  pi
    07) job history服务的开启

    08) 开启hadoop集群的垃圾回收机制

    今天常见问题:
        01) datanode不被namenode识别问题
            Namenode在format初始化的时候会形成两个标识,blockPoolId和clusterId.新的datanode加入时,会获取这两个标识作为自己工作目录中的标识.
            一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不会被namenode识别.
            解决办法,删除datanode节点中的数据后,再次重新格式化namenode.

  • 相关阅读:
    SnappyHexMesh(之七)创建二维几何体
    SnappyHexMesh(之六)体加密
    SnappyHexMesh(之五)面加密
    SnappyHexMesh(之四)面贴合参数
    SnappyHexMesh(之三)全局参数
    SnappyHexMesh(之二)背景网格
    SnappyHexMesh(之一)算法详述
    【转】编译EDEM2018+Fluent19.0耦合接口
    【读MFiX源代码】2 读time march loop(dt_loop)(仍在mfix.f)
    【转】linux下每间隔一段时间执行一个脚本
  • 原文地址:https://www.cnblogs.com/jjpbk/p/11728507.html
Copyright © 2020-2023  润新知