大数据学习之Hadoop

大数据的关键技术:批处理技术、流计算、图计算、查询分析计算

大数据处理架构Hadoop

1. Hadoop简介

apache软件基金会的开源软件,使用Java开发,但是Hadoop支持多种编程语言,有两大核心HDFS、MapReduce
大数据学习之Hadoop_第1张图片

大数据学习之Hadoop_第2张图片
Hadoop的特点:

  • 高可靠性。多太机器构成集群,冗余副本机制,部分机器发生故障,也不影响剩余机器的服务
  • 高效性。用多台机器来做计算,效率自然就高了
  • 高可拓展性。机器(节点)的数量没有限制
  • 低成本。可使用多个普通的pc机器构建集群
  • 高性能计算。
    Hadoop的应用现状,Facebook采用Hadoop集群用于日志处理,推荐系统和数据仓库
    大数据学习之Hadoop_第3张图片

选择Hadoop版本的考虑因素:

  1. 是否免费开源
  2. 是否有稳定版,Apache中Hadoop的2.0版本就比1.0版本要稳定
  3. 是否有实践检验
  4. 是否有强大的社区支持

2. Hadoop项目结构

大数据学习之Hadoop_第4张图片

  • HDFS: 负责分布式文件的存储系统,就是怎么用上百台的服务器进行数据的存储
  • YARN:对存储好的数据进行调度和管理的框架
  • MapReduce:基于磁盘的离线批处理
  • Tez: 是运行在YARN上的Hadoop查询处理框架,将多个MapReduce作业构建成一个有向无环图,以保证最好的处理效率
  • Spark: 基于内存并行框架,类似MapReduce,
  • Hive : Hadoop上的数据仓库,用于企业的决策分析,可将大量的历史数据存放在数据仓库中,建立各种维度,进行数据分 析辅助决策。Hive把SQL语句转换成MapReduce作业,再去执行
  • Pig : 流式数据的处理,属于轻量级的脚本语言,类似SQL语句
  • Oozie :工作流管理工具
  • Zookeeper : 提供分布式协调一致性服务,分布式锁、集群管理
  • Hbase : Hadoop上面向列的非关系型的分布式数据库,实时数据读写,支持大型的数据库
  • Flume :一个高可用、高可靠的分布式的海量日志采集、聚合和传输的系统
  • Sqoop : 用于Hadoop与传统数据库之间进行数据传输(导入导出),HDFS\HBASE\HIVE上互导
  • Ambari : Hadoop中快速部署的工具,支持Apache Hadoop集群的供应、监控和管理

3. Hadoop的安装

在VMware上安装Ubuntu操作系统,再在Ubuntu上安装Hadoop,在安装过程中遇到corrupted stack end detected inside scheduler这样的问题,时VMware与Ubuntu的版本不兼容的问题,将硬件虚拟机的兼容性更改为Workstation6.0得以解决。

3.1 使用sudo apt-get update进行更新文件包

3.2 安装 vim编辑器 sudo agt-get install vim

3.3 安装ssh,

先安装 sudo agt-get install openssh-server
配置ssh免密登录 ,转到对应目录 cd ~/.ssh,生成密钥 ssh-keygen -t rsa,三次回车
执行cat ./id_rsa.pub >> ./authorized_keys追加文件

3.4 安装java环境,jdk版本在1.8以上

cd /usr/lib,创建目录sudo mkdir jvm,对安装包解压缩sudo tar -zxvf ./jdk-8u132-linux-x64.tar.gz -C /usr/lib/jvm,设置环境变量vim ./bashrc 添加如下信息

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

文件生效 source ~/.bashrc
检查是否配置成功,Java -version

3.5 Hadoop的伪分布式安装

  • 单机模式:只在一台机器上 运行,存储在本地
  • 伪分布式模式:存储用HDFS,但所有节点都在一台机器上
  • 分布式模式:存储用HDFS,节点在不同的机器上

伪分布式的安装,

  1. 确认JDK安装好之后,解压hadoop压缩包 sudo tar -zxvf ./hadoop-2.9.2.tar.gz -C /usr/hadoop
  2. 转安装目录,对文件进行重命名,sudo mv ./hadoop-2.9.2/ ./hadoop
  3. 配置环境,赋予权限 sudo chown -R hadoop ./hadoop 进入Hadoop的安装目录,输入vim ~/.bashrc
    在bashrc文件中,设置JAVA_HOME和HADOOP_HOME,如下
    export JAVA_HOME=/usr export PATH=/usr/local/hadoop/bin/:/usr/local/hadoop/sbin/:$PATH export HADOOP_HOME=/usr/hadoop export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    文件生效 source ~/.bashrc
  4. 修改Hadoop的配置文件,主要式修改/usr/local/hadoop/etc/hadoop下core-site.xml和hdfs-site.xml两个文件,
    在core-site.xml文件中添加如下内容

    
        hadoop.tmp.dir
        file:/usr/local/hadoop/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://localhost:9000
    

在hdfs-site.xml文件中添加如下内容


    
        dfs.replication
        1
    
    
        dfs.namenode.name.dir
        file:/usr/local/hadoop/tmp/dfs/name
    
    
        dfs.datanode.data.dir
        file:/usr/local/hadoop/tmp/dfs/data
    

  1. 对NameNode格式化,hdfs namenode -format
  2. 开启NameNode和DataNode进程,start-dfs.sh
  3. 检查,输入jps,如果有SecondaryNameNode,NameNode,DataNode这三个进程说明配置成功。也可以在浏览器上输入http://localhost:50070,进入HDFS的web界面。

4.Hadoop集群的部署和使用

Hadoop两个核心组件:提供数据存储的HDFS 和 对数据进行计算的MapReduce

4.1 集群节点的类型

  • NameNode:HDFS中负责协调集群中的数据存储
  • DataNode : HDFS中存储被NameNode拆分的数据块
  • JobTracker:MapReduce中协调数据计算任务
  • TaskTracker:MapReduce负责执行由 JobTracker指派的任务
  • SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息,冷备份,如果NameNode出了问题,SecondaryNameNode需要恢复的过程才能顶替NameNode。

大数据学习之Hadoop_第5张图片

HDSF2.0的新特性

HDFS HA

HDFS HA(High Availability)是为了解决单点故障问题
大数据学习之Hadoop_第6张图片
HA集群设置两个名称节点,“活跃(Active)”和“待命(Standby)”
两种名称节点的状态同步,可以借助于一个共享存储系统来实现
一旦活跃名称节点出现故障,就可以立即切换到待命名称节点
Zookeeper确保一个名称节点在对外服务名称节点维护映射信息,数据节点同时向两个名称节点汇报信息
HDFS HA是热备份,提供高可用性,但是无法解决可扩展性、系统性能和隔离性

HDFS Federation

HDFS1.0中存在问题

  • 单点故障问题
  • 不可以水平扩展,且无法通过纵向解决问题
  • 系统整体性能受限于单个名称节点的吞吐量
  • 单个名称节点难为提供不同程序之间的隔离性
  • HDFS HA无法解决可扩展性、系统性能和隔离性

大数据学习之Hadoop_第7张图片
在HDFS Federation中,设计了多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间是联盟(Federation)关系,不需要彼此协调。并且向后兼容
HDFS Federation中,所有名称节点会共享底层的数据节点存储资源,数据节点向所有名称节点汇报
属于同一个命名空间的块构成一个“块池”

对于Federation中的多个命名空间,可以采用客户端挂载表(Client Side Mount Table)方式进行数据共享和访问
客户可以访问不同的挂载点来访问不同的子命名空间
把各个命名空间挂载到全局“挂载表”(mount-table)中,实现数据全局共享
同样的命名空间挂载到个人的挂载表中,就成为应用程序可见的命名空间

HDFS Federation设计可解决单名称节点存在的以下几个问题:

  1. HDFS集群扩展性。多个名称节点各自分管一部分目录,使得一个集群可以扩展到更多节点,不再像HDFS1.0中那样由
    于内存的限制制约文件存储数目
  2. 性能更高效。多个名称节点管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率
  3. 良好的隔离性。用户可根据需要将不同业务数据交由不同名称节点管理,这样不同业务之间影响很小

需要注意的是HDFS Federation并不能解决单点故障问题,也就是说,每个名称节点都存在在单点故障问题,需要为每个名称节点部署一个后备名称节点,以应对名称节点挂掉对业务产生的影响

你可能感兴趣的:(大数据,hadoop,mapreduce,big,data)