zoukankan      html  css  js  c++  java
  • Hadoop安装及使用

    Hadoop安装及使用

    hadoop简介

    单机模式

    直接解压,无需任何配置。主要用于测试代码。没有分布式文件系统。

    伪分布式

    完全分布式的一种形式,只是所有的进程都配置要一个节点上。有分布式文件系统,只不过是这个文件系统只有一个节点。

    完全分布式

    包含主节点和从节点,主节点namenode只有一个(一般来说,真实生产环境中namenode只会单独作为一个节点)namenode主要负责存储元数据,即datanode存储数据的描述,如数据存储在datanode的哪一个节点上,数据是谁上传的。datanode负责真正干活的,负责数据存储的。完全分布式中,如果namenode宕机了会造成整个集群无法使用,这也是完全分布式的一大缺点,存在单点故障问题。所以在一般生产环境中不太使用这种模式。

    高可用集群

    集群可以持续对外提供服务,做到7*24小时不间断,依赖于zookeeper。完全分布式的架构模式为一主多从,高可用集群架构为多主多从,也就是说高可用集群至少有两个namenode,但是同一时间只有一个是活跃的。我们把这个活跃的namenode称为active,其它的属于热备份状态,这们把这个namenode称之为standby,并且存储的元数据与active是一模一样的,当active宕机的时候,standby会立马切换为active。如果刚才宕机的namenode又恢复正常了,但是这个namenode只能是standby。但是这个集群也存在一个缺陷,就是在同一时间内只能有一个活跃的namenode。如果节点非常多(即元数据过多),这个活跃的namenode很容易崩溃。

    联邦机制

    同一个集群中可以有多个namenode,并且同一时间可以有多个活跃的namenode,这些namenode 共同使用集群中所有的datanode,每个namenode只负责管理集群中datanode上的一部分数据。但是联邦机制也会存在单点故障问题,如某一个活跃的namenode宕机了,会造成存在此namenode的数据无法访问,因此,一般的来说实际应用使用“联邦+高可用”模式搭建集群。

    centos换源

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    #或者
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    #清除缓存
    yum clean all
    
    #生成缓存
    yum makecache
    
    #更新yum源,等待更新完毕即可。
    yum -y update
    

    解决centos安装好后没有网络

    cd /etc/sysconfig/network-scripts/
    sudo vim ifcfg-ens33   
    #修改ONBOOT=no 为 ONBOOT=yes
    systemctl restart network  #centos6  service network restart
    ip addr
    

    创建用户

    如果账户名不是hadoop的话,需要创建一个用户名为hadoop的用户

    su root
    useradd -m hadoop -s /bin/bash   # 创建新用户hadoop
    passwd hadoop  #修改密码
    vim /etc/sudoers   #为hadoop增加sudo权限
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)     ALL
    thy     ALL=(ALL)     ALL
    

    配置时间同步

    crontab -e
    01***/usr/sbin/ntpdate us.pool.ntp.org
    

    关闭防火墙

    systemctl stop firewalld.service    # 关闭firewall
    systemctl disable firewalld.service # 禁止firewall开机启动
    

    修改hostname 及 hosts

    vim /etc/hostname
    HOSTNAME=Master
    vim /etc/hosts
    192.168.25.146   Master
    192.168.25.147   Slave1
    

    安装ssh、配置SSH无密码登陆

    一般情况下,CentOS 默认已安装了 SSH client、SSH server,可打开终端执行如下命令进行检验:

    rpm -qa | grep ssh
    

    如果需要安装,则可以通过 yum 这个包管理器进行安装。(安装过程中会让你输入 [y/N],输入 y 即可)

    yum install openssh-clients
    yum install openssh-server
    

    配置无密码登录

    cd ~/.ssh/
    ssh-keygen -t rsa    # 会有提示,都按回车即可
    cat id_rsa.pub >> authorized_keys # 加入授权
    chmod 600 ./authorized_keys # 修改文件权限
    ssh localhost  #测试,此时就无需密码即可登录
    exit
    

    完成后可执行 ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:

    scp ~/.ssh/id_rsa.pub root@Slave1:/home/
    

    接着在 Slave1 节点上,将 ssh 公匙加入授权

    mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在则忽略
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    rm ~/id_rsa.pub    # 用完就可以删掉了
    

    如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。

    这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行如下命令进行检验:

    ssh Slave1
    

    安装 Java 环境

    Java 环境可选择 Oracle 的 JDK,或是 OpenJDK(可看作 JDK 的开源版本),现在一般 Linux 系统默认安装的基本是 OpenJDK,这里安装的是 OpenJDK1.8.0版本的。

    有的 CentOS 默认安装了 OpenJDK ,这里我们可以使用命令检查一下

    java -version     # 查看 java 的版本
    javac -version    # 查看编译命令 Javac 的版本
    echo $JAVA_HOME    # 查看 $JAVA_HOME 这个环境变量的值
    

    安装

    wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz
    tar -zxf jdk-8u201-linux-x64.tar.gz -C /usr/lib/jvm
    

    然后配置环境变量

    vim /etc/profile
    #在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存 。
    #java enviroment
    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    
    export PATH=$PATH:${JAVA_HOME}/bin
    source /etc/profile    # 使变量设置生效
    
    #测试
    echo $JAVA_HOME  # 检验变量值
    java -version
    javac -version
    

    安装 Hadoop

    从官网下载hadoop压缩包,下载完成后,我们将 Hadoop 解压到 /usr/local/ 中。

    tar -zxf ~/下载/hadoop-2.6.5.tar.gz -C /usr/local # 解压到/usr/local目录中
    cd /usr/local/                # 切换当前目录为 /usr/local 目录
    mv ./hadoop-2.6.5/ ./hadoop   # 将文件夹名改为hadoop
    chown -R root:root ./hadoop   # 修改文件权限,root 是当前用户名
    

    Hadoop 解压后即可使用,输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息。

    cd /usr/local/hadoop     # 切换当前目录为 /usr/local/hadoop 目录
    ./bin/hadoop version     # 查看 Hadoop 的版本信息
    

    配置path

    vim /etc/profile
    #export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
    source /etc/profile
    hadoop version       # 查看 Hadoop 的版本信息
    

    配置集群/分布式环境

    集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml

    1, 文件hadoop-env.sh,添加JAVA_HOME的路径

    2, 文件 core-site.xml 改为下面的配置:

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://Master:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>file:/usr/local/hadoop/tmp</value>
                    <description>Abase for other temporary directories.</description>
            </property>
    </configuration>
    

    3, 文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1:

    <configuration>
            <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>Master:50090</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
            </property>
    </configuration>
    

    4, 文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

    <configuration>
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
            <property>
                    <name>mapreduce.jobhistory.address</name>
                    <value>Master:10020</value>
            </property>
            <property>
                    <name>mapreduce.jobhistory.webapp.address</name>
                    <value>Master:19888</value>
            </property>
    </configuration>
    

    5, 文件 yarn-site.xml

    <configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>Master</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    </configuration>
    
    #复制到从节点
    scp -r hadoop slave1:~/
    #格式化文件系统
    hdfs namenode -format
    #开启hadoop服务
    
    #先执行hdfs-config.sh脚本加载环境变量,然后通过hadoop-daemons.sh脚本又调用bin/hdfs指令来分别开启namenode、datanode以及secondarynamenode等守护进程。
    start-dfs.sh  
    
    ##执行此脚本可以启动YARN相关线程
    start-yarn.sh
    
    #记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下
    mr-jobhistory-daemon.sh start historyserver  
    
    jps
    #过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程。
    #在 Slave 节点可以看到 DataNode 和 NodeManager 进程,如下图所示:
    
    #Master 访问http://Master:9870
    hdfs dfsadmin -report  #查看 DataNode 是否正常启
    
  • 相关阅读:
    SQL创建的几种存储过程
    关于freemaker的一点使用技巧
    freemaker时间格式转换,精确到毫秒
    递归算法
    网易开发工程师编程题 比较重量 Java
    JavaScript tasks, microtasks, queues and schedules
    1000分以下局目标
    Lua简介
    浅谈Wireshark的基本操作
    adb操作
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/14110512.html
Copyright © 2011-2022 走看看