hadoop 介绍与发展

基于java语言实现

  • HDFS 解决海量数据存储

  • YARN 集群资源管理与任务调度框架

  • MapReduce 解决海量数据计算

hadoop特性优点

  • 扩容能力强 可以灵活扩展到数以千计的节点

  • 成本低 允许通过部署廉价机器组成集群来处理大数据

  • 效率高 可以在节点之间动态并行的移动数据

  • 可靠性 能自动维护数据的多份复制
    使用简单

hadoop发行版本

apache 官方发行版本
商业发行版本 基于apache发行版
image.png
image.png

hadoop集群

  • hadoop包括两个集群 HDFS集群和YARN集群

  • 两个集群在逻辑上分离,物理上在一起

  • 都是主从架构集群
    两个集群没有依赖,互不影响,但是往往部署在同一台服务器上
    image.png

分布式部署

我们先假设你已经有一个编译好的虚拟机
image.png

集群角色规划
  • 角色规划准则

    根据软件工作特性和服务器硬件资源合理分配

  • 注意事项

    资源冲突的不要部署在一起
    工作需要配合的尽量部署在一起

集群环境部署
  • 主机名

    vim etc/hostname

  • Hosts映射

    vim etc/hosts

  • 防火墙关闭

    systemctl stop firewall.service #关闭防火墙
    systemctl disable firewalld.service#防止防火墙开机自启

  • SSH免密码登录(node1执行 ->node1|node2|node3

    ssh-keygen4个回车,生成公钥私钥
    ssh-copy-id node1、ssh-copy-id node2、ssh-copy-id node3

  • 时间同步

    ntpdate ntp4.aliyun.com 阿里云的授时服务

  • 创建统一工作目录

    mkdir -p /export/server
    mkdir -p /export/software
    mkdir -p /export/software

  • 配置JDK

  • 上传解压Hadoop
    image.png

  • 修改配置文件
    image.png
    其中

  • 修改配置文件(配置文件路径 hadoop-3.3.0/etc/hadoop)

  • hadoop-env.sh

    #文件最后添加

    export JAVA_HOME=/export/server/jdk1.8.0_241

    export HDFS_NAMENODE_USER=root

    export HDFS_DATANODE_USER=root

    export HDFS_SECONDARYNAMENODE_USER=root

    export YARN_RESOURCEMANAGER_USER=root

    export YARN_NODEMANAGER_USER=root
  • core-site.xml


    <!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://node1:8020</value>

    </property>

    <!-- 设置Hadoop本地保存数据路径 -->

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/export/data/hadoop-3.3.0</value>

    </property>

    <!-- 设置HDFS web UI用户身份 -->

    <property>

        <name>hadoop.http.staticuser.user</name>

        <value>root</value>

    </property>

    <!-- 整合hive 用户代理设置 -->

    <property>

        <name>hadoop.proxyuser.root.hosts</name>

        <value>*</value>

    </property>

    <property>

        <name>hadoop.proxyuser.root.groups</name>

        <value>*</value>

    </property>

    <!-- 文件系统垃圾桶保存时间 -->

    <property>

        <name>fs.trash.interval</name>

        <value>1440</value>

    </property>
  • hdfs-site.xml

  
    <!-- 设置SNN进程运行机器位置信息 -->

    <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>node2:9868</value>

    </property>
  • mapred-site.xml


    <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->

    <property>

      <name>mapreduce.framework.name</name>

      <value>yarn</value>

    </property>

    <!-- MR程序历史服务地址 -->

    <property>

      <name>mapreduce.jobhistory.address</name>

      <value>node1:10020</value>

    </property>

    <!-- MR程序历史服务器web端地址 -->

    <property>

      <name>mapreduce.jobhistory.webapp.address</name>

      <value>node1:19888</value>

    </property>

    <property>

      <name>yarn.app.mapreduce.am.env</name>

      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

    </property>

    <property>

      <name>mapreduce.map.env</name>

      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

    </property>

    <property>

      <name>mapreduce.reduce.env</name>

      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>

    </property>
  • yarn-site.xml


    <!-- 设置YARN集群主角色运行机器位置 -->

    <property>

      <name>yarn.resourcemanager.hostname</name>

      <value>node1</value>

    </property>

    <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

    <!-- 是否将对容器实施物理内存限制 -->

    <property>

        <name>yarn.nodemanager.pmem-check-enabled</name>

        <value>false</value>

    </property>

    <!-- 是否将对容器实施虚拟内存限制。 -->

    <property>

        <name>yarn.nodemanager.vmem-check-enabled</name>

        <value>false</value>

    </property>

    <!-- 开启日志聚集 -->

    <property>

      <name>yarn.log-aggregation-enable</name>

      <value>true</value>

    </property>

    <!-- 设置yarn历史服务器地址 -->

    <property>

        <name>yarn.log.server.url</name>

        <value>http://node1:19888/jobhistory/logs</value>

    </property>

    <!-- 历史日志保存的时间 7天 -->

    <property>

      <name>yarn.log-aggregation.retain-seconds</name>

      <value>604800</value>

    </property>

   

   

  • workers


    node1.itcast.cn

    node2.itcast.cn

    node3.itcast.cn
  • 分发同步hadoop安装包


  cd /export/server

  scp -r hadoop-3.3.0 root@node2:$PWD

  scp -r hadoop-3.3.0 root@node3:$PWD

  • 将hadoop添加到环境变量(3台机器)


  vim /etc/profile

  export HADOOP_HOME=/export/server/hadoop-3.3.0

  export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

  source /etc/profile

  #别忘了scp给其他两台机器哦
  • NameNode format(格式化操作)

  • > 首次启动HDFS的时候需要格式化操作

  • 只能初始化一次,再次初始化需要重新使用配置文件

Hadoop启动
  • 手动逐个启动
    image.png

  • shell脚本一键启动
    image.png
    可以使用jps来查看进程是否启动成功

[root@node1 ~]# jps
32328 DataNode
32121 NameNode
34090 Jps

启动日志
/export/server/hadoop-3.3.0/logs
HDFS集群WEBUI
地址http://namenode.host:9870
YARN集群地址为:http://namenode.host:8088/
比如node1的地址就是
node1.9870
image.png

初体验
hadoop fs -mkdir /itcast  创建文件夹
hadoop fs -ls /
.....

本质还是一个文件系统
看起来和linux很像