Hadoop环境搭建

HDFS原理

简言之,HDFS是通过整合多个低成本硬件,从而实现数据的冗余存储,提高容错性和吞吐量的分布式文件系统。类似于RAID。


集群环境搭建

准备工作

  1. 三台云主机:hadoop001, hadoop002, hadoop003(以hadoop001为master,所以内存配置相对要高一些),系统CentOS 7.6
  2. 三台主机上分别创建hadoop账户,拥有sudo权限(后面会以这个账号登录)
  3. Hadoop CDH 2.6版本: hadoop-2.6.0-cdh5.15.2.tar.gz
  4. JDK: jdk-8u231-linux-x64.tar.gz

搭建步骤

配置系统环境

  1. 修改hadoop001上的/etc/hosts,加上hadoop001-003的映射(使用内网IP)
  2. hadoop001上生成RSA秘钥,并copy到hadoop001, 002, 003上
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
    
  3. 解压hadoop tar包,到/usr/app/目录
    sudo tar -xvf hadoop-2.6.0-cdh5.15.2.tar.gz -C /usr/app
    
  4. 解压jdk到/usr/app目录
    sudo tar -xvf jdk-8u231-linux-x64.tar.gz -C /usr/app
    
  5. 修改/etc/profile,末尾添加
    export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
    export JAVA_HOME=/usr/app/jdk1.8.0_231
    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
    
  6. 执行source /etc/profile,使修改立刻生效

配置Hadoop

进入 ${HADOOP_HOME}/etc/hadoop目录下,修改配置文件。各个配置文件内容如下:

  1. hadoop-env.sh
    # 指定JDK的安装位置
    export JAVA_HOME=/usr/app/jdk1.8.0_231/
    
  2. core-site.xml
    <configuration>
        <property>
            <!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop001:8020</value>
        </property>
        <property>
            <!--指定 hadoop 集群存储临时文件的目录-->
            <name>hadoop.tmp.dir</name>
            <value>/home/hadoop/tmp</value>
        </property>
    </configuration>
    
  3. hdfs-site.xml
    <property>
          <!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔-->
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/namenode/data</value>
    </property>
    <property>
          <!--datanode 节点数据(即数据块)的存放位置-->
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/datanode/data</value>
    </property>
    
  4. yarn-site.xml
    <configuration>
        <property>
            <!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <!--resourcemanager 的主机名-->
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop001</value>
        </property>
    </configuration>
    
  5. mapred-site.xml,从template copy
    cp mapred-site.xml.template mapred-site.xml
    
    <configuration>
        <property>
            <!--指定 mapreduce 作业运行在 yarn 上-->
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
  6. slaves
    配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 DataNode 服务和 NodeManager 服务都会被启动。
    hadoop001
    hadoop002
    hadoop003
    

分发

  1. 将hadoop001上/etc/hosts中配置的映射关系,copy到hadoop002, 003的/etc/hosts
  2. 将 Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量
    # 将安装包分发到hadoop002
    scp /etc/profile root@hadoop002:/etc/profile
    scp -r /usr/app/ root@hadoop002:/usr
    # 将安装包分发到hadoop003
    scp /etc/profile root@hadoop002:/etc/profile
    scp -r /usr/app/ root@hadoop003:/usr
    

启动

  1. 打开防火墙和相关端口
    # 开启防火墙
    sudo systemctl start firewalld
    # 开放50010端口(否则数据块只能存在NameNode上)
    sudo firewall-cmd --add-port=50010/tcp --permanent
    # 开放hadoop001的8020端口,让hadoop002, 003可以连接
    sudo firewall-cmd --add-port=8020/tcp --permanent
    
  2. hadoop001上执行NameNode初始化
    hdfs namenode -format
    
  3. 启动集群
    进入到 Hadoop001 的 ${HADOOP_HOME}/sbin 目录下,启动 Hadoop。此时 hadoop002 和 hadoop003 上的相关服务也会被启动:
    # 启动dfs服务
    start-dfs.sh
    # 启动yarn服务
    start-yarn.sh
    

验证

  1. jps查看进程
    hadoop001上运行jps,可以看到
    在这里插入图片描述
    hadoop002, 003上运行jps,可以看到
    在这里插入图片描述

  2. 开启50070对外端口,然后登陆验证hadoop001:50070

    sudo firewall-cmd --add-port=50070/tcp --permanent
    

    可以看到Live Nodes的数量正确,就说明配置成功
    在这里插入图片描述
    点击进入Live Node,可以看到每个Node的运行情况
    在这里插入图片描述

  3. 提交任务到集群

    # hadoop001上运行
    hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar  pi  3  3
    

    得到正确的结果
    在这里插入图片描述


常用命令

  1. 查看:hdfs dfs -ls xxx
    在这里插入图片描述

  2. 创建目录:hdfs dfs -mkdir -p /xxx/xxx

    hdfs dfs -mkdir /user/hadoop/files
    
  3. 看文件:hdfs dfs -cat xxx / hdfs dfs -text xxx

  4. 上传文件:hdfs dfs -put local cluster

    hdfs dfs -put ./hadoop-2.6.0-cdh5.15.2.tar.gz /user/hadoop/files/
    

    之后可以到50070管理工具下的Utilities -> Browse File System查看已上传的文件
    在这里插入图片描述
    在这里插入图片描述

  5. 下载文件:hdfs dfs -get cluster local

  6. copy:hdfs dfs -cp /xxx/xxx /xxx/xxx

  7. chmod: hdfs dfs -chmod -R 777 /xxx

  8. chown: hdfs dfs -chown -R zyh:zyh /xxx

  9. 离开安全模式:hadoop dfsadmin -safemode leave

  10. 恢复namenode元数据:hadoop namenode -recover


注意事项

安全隐患

Yarn该版本有漏洞,8088端口会被嗅探到变成挖坑机,建议不要轻易开启改端口,并设置IP防火墙规则

端口

作为master的hadoop001需要开放的端口:8020, 50010, 50070
作为slaves的hadoop002, 003需要开放的端口:50010

查看日志

如果遇到NameNode, DataNode无法正常启动的情况,建议看一下hadoop的日志,路径为:/usr/app/hadoop-2.6.0-cdh5.15.2/logs,里面有很关键的错误信息

如何重置

有时想重新初始化HDFS,此时按如下操作:

1. 删除配置的所有文件夹:/home/hadoop/下的所有文件夹(NameNode, DataNode, tmp)
2. 格式化:hdfs namenode -format
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值