物联网架构之Hadoop

案例概述

​ 大数据时代,数以万计用户的互联网服务时时刻刻都在产生着大量交互,以传统的数据技术等其他手段应对数据处理的实时性,有效性的需求

​ HDFS顺应时代出现,在解决大数据存储和计算方面有很多的优势

大数据定义:

  • 指无法在一定时间范围内用常规的软件工具进行捕捉,管理和处理的巨量数据集合
  • 需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产数据

大数据的特点:

  • 数据体量巨大。按目前的发展趋势看,大数据的体量已经达到PB甚至EB级
  • 大数据的数据类型多样,以非结构化数据为主。如:网络日志、音频、视频、图片、地理位置信息、交易数据、社交数据等。
  • 价值密度低。有价值的数据仅占到数据总量相当小的一部分。比如一段监控视频中真正有价值的画面可能只有几秒钟。由于价值密度低,所以迅速地完成数据的价值提纯是目前大数据汹涌背景下亟待解决的难题。
  • 产生和要求处理速度快。这是大数据区分于传统数据挖掘最显著的特征。

常见的大数据处理系统

名称类型说明
Hadoop开源Apache 基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序
Spark开源类似 Hadoop MapReduce 的并行框架
Stom开源实时的、分布式以及具备高容错的计算系统
MongoDB开源面向文档的 NoSql 数据库
IBM PureData商用基于 Hadoop,属于IBM 专家集成系统 PureSystem
家族中的组成部分,主要面向大数据应用
Oracle ExaData商用Oracle 的新一代数据库云服务器
SAP Hana商用提供高性能的数据查询功能,用户可以直接对大量实
时业务数据进行查询和分析
Teradata AsterData商用非结构化数据解决方案
EMC GreenPlum商用采用了大规模并行处理,支持50PB级海量存储与管理
HP Vertica商用列式大数据分析数据库

Hadoop简介

  • Hadoop是Apache基金会旗下的分布式系统基础架构
  • 用户可以在不了解分布式底层细节的情况下,开发分布式程序
  • 充分利用集群的为例进行高速运算和存储

特点

  • 高可靠性
  • 高拓展性
  • 高效性
  • 高容错性
  • 低成本
  • 可构建在廉价机器上

运行模式

  • 单机模式(开发场景下)
  • 伪分布模式
  • 完全分布式模式

框架的核心构成

  • 分布式文件系统(HDFS)
  • 分布式计算系统(MapReduce)
  • 分布式资源管理系统(YARN)

生态圈

在这里插入图片描述

分布式文件系统(HDFS)

  • HDFS定义

    • 是一个主/从体系架构,以分布式进行存储的分布式文件系统

    • 主要负责群集数据的存储与读取

  • 优缺点

    优点缺点
    存储超大文件不适合低延迟数据访问
    标准流式访问不适合小文件存储
    可构建在廉价机器上不适合并发写入,文件随机修改
  • 群集组成

    • 一个NameNode节点
    • 过个DateNode节点

    在这里插入图片描述

  • 数据写流程

    • 客户端向NameNode发出文件写请求,NameNode告诉客户该向哪个DataNode写入文件
    • 客户将文件写入该DataNode节点
    • DataNode将自动复制数据到其它DataNode节点上,默认3份拷贝
      在这里插入图片描述
  • 数据块(Block)

    • HDFS默认最基本的存储单位是数据块
    • 默认大小为64MB(有些发行版本为128MB)

    在这里插入图片描述

  • 元数据节点(NameNode)

    • 负责管理文件系统的命名空间
    • 将所有文件和万恶年假的元数据保存至一个文件系统树中
  • 元数据存放目录

    • NameNode节点的hadoop/dfs/name/current目录中
    • 由hdfs-site.xml中的dfs.namenode.name.dir属性指定
  • 包含的文件类型

    • fsimage_*、edits_ *、VERSION、…
  • 数据节点

    • 文件系统中真正存储数据的地方
    • 一个文件被拆分成多个数据块后,分别存储至对应的数据节点上
  • 数据存储目录

    • DateNode节点的hadoop/dfs/data目录中
    • 由hdfs-site.xml中的dfs.datanode.data.dir属性指定
  • 包含的文件类型

    • blk _<id>、blk_ <id>.meta.、…
  • 从元数据节点(Secondary NameNode)

    • 用于周期性备份NameNode节点上的元数据
    • 可以用来恢复NameNode节点,但不能作为备用节点
    • 为了防止宕机,通常是将Secondary NameNode和NameNode设置为不同的主机
    • 使用hdfs-site.xml中配置的dfs.namenode.secondary.httpaddress属性值可以通过浏览器查看SecondaryNameNode运行状态

分布式计算系统(MapReduce)

  • MapReduce是一个实现了并行计算变成模型,用以进行大数据的计算

  • MapReduce包括

    • map(映射):map负责把任务分解成多个任务
    • reduce(规约):负责分解后多任务的处理结果进行汇总
  • 框架包括

    • JopTracke
      • 是一个Master 服务,用于作业(Job)的管理和调度工作。个 Hadoop 集群中只有一台 JobTracker。一般情况下,应该把它部署在单独的机器上。JobTracker负责创建、调度作业中的每一个子任务(MapTask或 ReduceTask)运行于 TaskTracker上,并监控它们。如果发现有失败的任务就重新运行它。
      • 执行由JobTracker分配的map或reduce任务
      • 定期执行Jop Tracker发送的心跳信号,报告自己的状态正在执行的任务进度
      • 接受Jop Tracker发送的新任务或种植任务的指令
      • 存储中间数据结果,并在必要时进行数据的本地化读取以提高效率
    • TaskTracker
      • 是运行于多个节点上的 Slave 服务,用于执行任务。TaskTracker 需要运行在 HDFS 的 DataNode 上。

分布式资源管理系统(YARN)

产生背景

  • Hadoop1.0中的MapReduce架构面临的问题

    • JobTracke单点故障
    • JobTracke扩展瓶颈
    • 作业延迟高
    • 编程框架不够灵活
  • 作用

    • 目的是使Hadoop数据处理能力超越MapReduce

本章实战

IP作用
192.168.10.101node1
192.168.10.102node2
192.168.10.103node3
  1. 关闭防火墙

    setenforce 0
    sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
    systemctl stop firewalld
    systemctl disable firewalld
    
  2. 为各个节点设置主机名

    hostnamectl set-hostname node1
    bash
    
    hostnamectl set-hostname node2
    bash
    
    hostnamectl set-hostname node3
    bash
    
  3. 修改每台主机的hosts文件

    vim /etc/hosts
    192.168.10.101 node1 
    192.168.10.102 node2 
    192.168.10.103 node3
    
  4. 创建hdoop用户组和hduser用户

    [root@node1 ~]# groupadd hadoop
    [root@node1 ~]# useradd -g hadoop hduser
    [root@node1 ~]# passwd hduser
    
  5. 为hduser用户授权

    gpasswd -a hduser wheel
    [root@node1 ~]# visudo
    ##在末尾添加:
    hduser  ALL=(ALL)       ALL
    
  6. 安装JDK

    rpm -ivh jdk-8u171-linux-x64.rpm
    ##安装完成之后查看
    java --version
    
    [root@node1 ~]# vim /etc/profile
    在末尾添加:
    export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
    export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$PATH
    
    [root@node1 ~]# source /etc/profile
    
  7. 配置免密码登录(在node1上配置)

    [root@node1 ~]# su - hduser
    [hduser@node1 ~]$ ssh-keygen -t rsa		 //一路回车键即可 
    [hduser@node1 ~]$ ssh-copy-id hduser@node1
    [hduser@node1 ~]$ ssh-copy-id hduser@node2
    [hduser@node1 ~]$ ssh-copy-id hduser@node3
    
  8. 安装Hadoop

    在这里插入图片描述

    • 将hadoop包拷贝到hduser的家目录并解压

      ##在node1上操作
      [hduser@node1 ~]$ tar zxvf hadoop-2.6.5.tar.gz 
      [hduser@node1 ~]$ mv hadoop-2.6.5 hadoop
      
    • 配置hadoop的环境变量

      [hduser@node1 ~]$ sudo vim /etc/profile
      ##在末尾添加:
      export HADOOP_HOME=/home/hduser/hadoop
      export PATH=$HADOOP_HOME/bin:$PATH
      
      [hduser@node1 ~]$ source /etc/profile
      
    • 配置hadoop-env.sh****文件

      [hduser@node1 ~]$ cd ~/hadoop/etc/hadoop/
      [hduser@node1 hadoop]$ vim hadoop-env.sh 
      在末尾添加:
      export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
      
    • 修改yarn-env.sh文件

      [hduser@node1 hadoop]$ vim yarn-env.sh 
      在末尾添加
      export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
      
    • 修改slaves文件

      [hduser@node1 hadoop]$ vim slaves
      ##清空文件中原有的内容
      node2
      node3
      
    • 编辑core-site.xml文件

      [hduser@node1 hadoop]$ vim core-site.xml
      ##在末尾找到<configuration>模块
      ##在里面添加配置: 
      <configuration>
      <property>
      <name>fs.defaultFS</name>
      <value>hdfs://node1:9000</value>
      </property>
      <property>
      <name>hadoop.tmp.dir</name>
      <value>file:/home/hduser/hadoop/tmp</value>
      </property>
      </configuration>
      
    • 编辑hdfs-site.xml文件

      [hduser@node1 hadoop]$ vim hdfs-site.xml 
      ##在末尾找到<configuration>模块
      ##在里面添加:
      <configuration>
      <property><name>dfs.namenode.secondary.http-address</name><value>node1:50090</value>
      </property>
      <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:/home/hduser/hadoop/dfs/name</value>
      </property>
      <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/home/hduser/hadoop/dfs/data</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>2</value>
      </property>
      <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
      </property>
      </configuration>
      

      备注:

      名称节点和数据节点的存放位置,文件副本数和读取权限。

    • 修改mapred-site.xml文件

      [hduser@node1 hadoop]$ cp mapred-site.xml.template  mapred-site.xml
      [hduser@node1 hadoop]$ vim mapred-site.xml
      ##在末尾找到<configuration>模块,在里面添加:
      <configuration>
      <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
      </property>
      <property>
      <name>mapreduce.jobhistory.address</name>
      <value>node1:10020</value>
      </property>
      <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>node1:19888</value>
      </property>
      </configuration>
      

      备注:Mapreduce作业记录的web地址和端口

    • 修改yarn-site.xml文件

      [hduser@node1 hadoop]$ vim yarn-site.xml 
      
      
      <configuration>
      
      <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
      </property>
      <property>
      </property>
      <property>
      <name>yarn.resourcemanager.address</name>
      <value>node1:8032</value>
      </property>
      <property>
      <name>yarn.resourcemanager.scheduler.address</name>
      
      <value>node1:8030</value>
      </property>
      <property>
      <name>yarn.resourcemanager.resource-tracker.address</name>
      <value>node1:8035</value>
      </property>
      <property>
      <name>yarn.resourcemanager.admin.address</name>
      <value>node1:8033</value>
      </property>
      <property>
      <name>yarn.resourcemanager.webapp.address</name>
      <value>node1:8088</value>
      </property>
      
      </configuration>
      

      备注:

      resourcemanager、nodemanager的通信端口,web端口等信息

    • 将hadoop目录拷贝到其他节点上

      [root@node1 ~]#scp -r /home/hduser/hadoop node2:/home/hduser 
      [root@node1 ~]#scp -r /home/hduser/hadoop node3:/home/hduser
      
  9. 验证安装配置

    • 在 Master 主机(node1)上格式化 NameNode

      [hduser@node1 ~]$ cd hadoop/
      [hduser@node1 hadoop]$ bin/hdfs namenode -format
      [hduser@node1 hadoop]$ sbin/start-dfs.sh
      
    • 查看进程

      [hduser@node1 hadoop]$ jps
      ##16721 Jps
      ##15687 NameNode
      ##15866 SecondaryNameNode
      
      
    • 启动yarn

      [hduser@node1 hadoop]$ sbin/start-yarn.sh
      
    • 查看集群环境

      [hduser@node1 hadoop]$ bin/hdfs dfsadmin -report
      
    • 浏览器查看 HDFS 运行状态:

      http://192.168.10.101:50070
      
  10. 运行 Hadoop WordCount 程序

    • 创建测试文件的目录

      [hduser@node1 ~]$ mkdir ~/file
      
    • 编辑测试文件

      [hduser@node1 ~]$ cd ~/file/
      
      [hduser@node1 file]$ echo "ni hao hadoop">file1.txt
      [hduser@node1 file]$ echo "hello hadoop hi china">file2.txt
      
    • 启动hadoop并 创建hdfs目录

      [hduser@node1 file]$ cd ~/hadoop/
      [hduser@node1 hadoop]$ sbin/start-all.sh
      [hduser@node1 hadoop]$ bin/hadoop fs -mkdir /input2
      
    • 将file1和file2拷贝到hdfs存储目录中

      [hduser@node1 hadoop]$ bin/hadoop fs -put ~/file/file* /input2/
      [hduser@node1 hadoop]$ bin/hadoop fs -ls /input2/
      
    • 执行WordCount程序,对文件进行统计

      [hduser@node1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /input2/ /output2/wordcount1
      

      注意:输出目录不能已存在,否则不会输出

    • 查看执行结果

      [hduser@node1 hadoop]$ bin/hadoop fs -cat /output2/wordcount1/*
      

      如果看到输出结果证明hadoop安装成功

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Small Cow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值