zoukankan      html  css  js  c++  java
  • Hadoop搭建之伪分布式搭建

    伪分布式搭建:所有的角色都安装在一台机器上,主要用于快速使用,模拟分布式场景。

    参考网址:

    https://www.cnblogs.com/jhxxb/p/10562460.html

    https://www.cnblogs.com/qingyunzong/p/8496127.html#_label4_4

    1.前提条件

    (0)规划安装目录

    主节点 nameNode resourceManager

    从节点 dataNode nodeManager

    (由于是一台虚拟机,没有设置secondaryNameNode)

    规划安装目录:/opt/hadoop/apps

    规划数据目录:/opt/hadoop/data

    mkdir -p /opt/hadoop/apps
    mkdir -p /opt/hadoop/data

    (1)JDK

    小贴士:/etc/profile是系统环境变量;~/.bashrc是个人环境变量(如果是普通用户,推荐配置)

    #1.解压包
    tar -zxvf  jdk-8u161-linux-x64.tar.gz -C /opt/hadoop/apps

    #2.配置环境变量
    vim ~/.bashrc

      export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161
      export PATH=$PATH:$JAVA_HOME/bin

      #3.使得环境变量生效

      source ~/.bashrc

      #4.验证

      java -version #如果显示为Linux自带OpenJdk(如下),需要先卸载

    #[root@localhost apps]# java -version
    #openjdk version "1.8.0_242"
    #OpenJDK Runtime Environment (build 1.8.0_242-b08)
    #OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

    #参考网址:https://blog.csdn.net/qq_35535690/article/details/81976210

    rpm -qa|grep java

    rpm -e --nodeps java-1.7.0-openjdk-1.7.0.251-2.6.21.1.el7.x86_64
    rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.251-2.6.21.1.el7.x86_64
    rpm -e --nodeps java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
    rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64

    (2)修改主机名和hosts文件

    参考网址:https://blog.csdn.net/shmily_lsl/article/details/81164404

    小贴士:

    主机名hostname和/etc/hosts是不一样的,hostname主机名称hosts主机名和IP的映射关系,后者不能设置主机名。之所以有这样的错觉,是因为:

    当主机名为localhost或者localhost.localdomain时(hostname命令可以查看主机名),系统会根据实际IP,去匹配hosts文件中的IP,将主机名设置为对应hosts里面的主机名。

    例如:hostname为localhost,本机IP为192.168.56.100,当hosts文件设置 192.168.56.100 master时,我们看到的hostname就变成了master

    第一步、修改主机名

    cat /etc/redhat-release #查看操作系统版本

    #1.操作系统是Centos6
    #1.1永久生效,重启生效
    vim /etc/sysconfig/network
    NETWORKING=yes
    GATEWAY=192.168.56.1
    HOSTNAME=master #添加这一行      
    #1.2临时生效
    hostname
    master
    #2.操作系统是Centos7
    hostnamectl set-hostname #会修改/etc/hostname 、/etc/machine-info 两个文件

    # 参考网址 http://www.361way.com/centos7-hostnamectl/3816.html
    #注意:不记得命令可以敲 hostnamectl --help

    保险起见:1.1和2都执行一遍

    第二步、修改hosts文件

    vim /etc/hosts
    
    192.168.56.100 master

    (3)免密登录

    参考网址:SSH原理  https://www.jianshu.com/p/33461b619d53

    # 设置SSH远程登录免密,在ssh localhost本地免密登录中,既是客户端,又是服务端;客户端需要保留私钥,服务端需要保留公钥并命名为authorized_keys。
    当客户端发起登录时,客户端将公钥发给服务端,服务端收到公钥后在authorized_keys中查找,如果找到,则会生产随机数R,用公钥对其加密,返回给客户端。
    客户端收到后,用私钥解密。然后将解密得到的R和session_id用md5加密发送给服务端;服务端同样用md5对其进行(R,session_id)加密,如果得到的值相等,则可免密登录。
    # ssh-keygen 用于生成公钥,私钥;公钥是由私钥产生,公钥用于加密和验签,私钥用于解密和签名
    # rsa算法用于加密解密,数字签名,但是速度慢;dsa用于数字签名,签名和解密的速度快,加密和验签速度慢
    cd ~/.ssh
    ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa #-t指定算法,默认为rsa -P指定私钥,一般不指定 -f指定生成的密钥,默认是id_dsa
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys # 将公钥追加到authorized_keys中

    (4)关闭防火墙

    #永久关闭防火墙
    systemctl disable firewalld
    #临时关闭防火墙
    systemctl stop firewalld
    #注意:如果系统报错java.io.IOException: Got error, status message , ack with firstBadLink as 192.168.56.102:50010
    #可能是由于没有关闭防火墙导致的,第一条命令不会及时生效,所以还需要第二条命令

    1.搭建

    (1)解压包并配置环境变量

    #1.解压包
    unzip hadoop-2.7.1.zip -d /opt/hadoop/apps
    #2.配置环境变量
    vim ~/.bashrc

      export HADOOP_HOME=/opt/hadoop/apps/hadoop-2.7.1
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

      #3.使得环境变量生效

      ~/.bashrc

    (2)配置HDFS

    A.修改hadoop-env.sh

    export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161

    B.修改core-site.xml

    <configuration>
    <property>
    <!--指定HDFS中namenode的地址 -->
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
    </property>
    <property>
    <!--指定Hadoop运行时产生文件的目录 -->
      <name>hadoop.tmp.dir</name>
      <value>/opt/hadoop/data/hadoopdata/tmp</value>
    </property>
    </configuration>

    C.修改hdfs-site.xml

    <configuration>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>/opt/hadoop/data/namenode</value>
                    <description>为了保证元数据的安全一般配置多个不同目录</description>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>/opt/hadoop/data/datanode</value>
                    <description>datanode 的数据存储目录</description>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
                    <description>HDFS 的数据块的副本存储个数, 默认是3</description>
            </property>
            <property>
            <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
            <value>true</value>
            <description>默认为true,namenode 连接 datanode 时会进行 host 解析查询;如果是false,则会按照IP进行解析</description>
            </property>
    </configuration>

    D.启动及验证

    #如果命令没有执行权限,需要赋予执行的权限

    chmod +x /opt/hadoop/apps/hadoop-2.7.1/bin/*

      chmod +x /opt/hadoop/apps/hadoop-2.7.1/sbin/*


    # 第一次使用需要先格式化一次。之前若格式化过请先停止进程,然后删除文件再执行格式化操作 hdfs namenode -format # 启动 namenode hadoop-daemon.sh start namenode # 启动 datanode hadoop-daemon.sh start datanode # 验证,查看 jvm 进程 jps

    4728 NameNode
    4776 DataNode
    4813 Jps

    http://192.168.56.100:50070/dfshealth.html#tab-overview

    (3)配置YARN

    A.修改yarn-env.sh

    # 配置 JDK 路径
    # some Java parameters
    export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161

    B.修改yarn-site.xml

    <configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>master</value>
                    <description>指定resourcemanager节点</description>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
                    <description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
            </property>
    </configuration>

    C.启动及验证

    # 启动 resourcemanager
    yarn-daemon.sh start resourcemanager
    
    # 启动 nodemanager
    yarn-daemon.sh start nodemanager
    
    # 查看 JVM 进程
    jps

    5875 ResourceManager
    5925 NodeManager
    5957 Jps
    4728 NameNode
    4776 DataNode

    (4)配置MapReduce

    A.修改mapred-env.sh

    # 配置 JDK 路径
    export JAVA_HOME=/opt/hadoop/apps/jdk1.8.0_161
    
    # when HADOOP_JOB_HISTORYSERVER_HEAPSIZE is not defined, set it.

    B.修改mapred-site.xml

    cp mapred-site.xml.template mapred-site.xml

    <
    configuration> <!-- 指定MR运行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

    C.启动及验证

    运行一个mapreduce任务

    #计算圆周率 表示2个map任务,每个任务生成10个点,点越多,计算结果越精确
    hadoop jar /opt/hadoop/apps/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar pi 2 10
    #注意如果是配置比较低(1G内存,8G硬盘)设置太大,内存不足,容易报错,

     

    (5)配置JobHistory

    mapred-site.xml

    <configuration>
        <!-- 历史服务器端地址 -->
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>master:10020</value>
        </property>
        <!-- 历史服务器web端地址 -->
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>master:19888</value>
        </property>
        <property>
            <name>yarn.log.server.url</name>
            <value>http://master:19888/jobhistory/logs</value>
        </property>
    </configuration>
    # 启动 jobhistory
    mr-jobhistory-daemon.sh start historyserver
    
    # JVM 进程
    jps
    # 1995 NodeManager # 1781 DataNode # 4917 Jps # 1717 NameNode # 1935 ResourceManager # 4862 JobHistoryServer

    浏览器访问 CentOS 的 IP 地址加端口号 (默认19888) 即可看到 web 端

     

    (6)配置日志聚集

    yarn-site.xml

    <configuration>
        <!-- 开启日志聚集功能 -->
        <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
        </property>
        <!-- 设置日志保留时间(7天) -->
        <property>
            <name>yarn.log-aggregation.retain-seconds</name>
            <value>604800</value>
        </property>
    </configuration>
    # 需要重启一遍服务
    hadoop-daemon.sh stop namenode
    hadoop-daemon.sh stop datanode
    yarn-daemon.sh stop resourcemanager
    yarn-daemon.sh stop nodemanager
    mr-jobhistory-daemon.sh stop historyserver
    
    hadoop-daemon.sh start namenode
    hadoop-daemon.sh start datanode
    yarn-daemon.sh start resourcemanager
    yarn-daemon.sh start nodemanager
    mr-jobhistory-daemon.sh start historyserver
    
    # 再运行一个任务,就可以看到详情
    hadoop jar /opt/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar pi 10 100

    查看刚刚运行的任务详情,未开启日志聚集之前运行的任务无法查看详情

     

     

    日志聚集功能的应用场景:将日志保存到hdfs,为了防止程序运行完成后,不能查看日志,方便对运行中出现的错误,进行追踪和调试。 

    参考网址:https://blog.csdn.net/qq_31923871/article/details/107022797?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-11&spm=1001.2101.3001.4242

     

     

    爱人不亲,反其仁;治人不治,反其智;礼人不答,反其敬;行有不得,反求诸己
  • 相关阅读:
    Spring-boot 项目中使用 jackson 遇到的一个问题
    Spring Cloud 简介
    VSCode配置JAVA开发环境
    Smtp错误码
    Git遇到的问题
    对于static静态
    面向对象
    类与对象的概念
    java执行过程
    nacos安装部署
  • 原文地址:https://www.cnblogs.com/lina-2015/p/14354473.html
Copyright © 2011-2022 走看看