• Cenos7下hadoop2.7.7伪分布式模式安装


    环境介绍:Centos7 + jdk1.8.0_211
    一、首先、
    安装JDK1.8.0,详情请移步
    Centos7下安装配置JDK

    关闭防火墙(建议关闭、当然也可以自己开放端口)
    Centos7下防火墙的操作

    创建一个用户hadoop,当然也可以使用root用户操作。(我的是使用root操作)
    可以创建一个linux用户叫hadoop作为Hadoop的工作者,因为root下是很危险的。

    sudo useradd -m hadoop -s /bin/bash    #创建hadoop用户
    sudo passwd hadoop #设置密码
    sudo adduser hadoop sudo  #增加管理员权限

    二、ssh配置:

    ssh-keygen -t rsa   生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)、三个回车
    cd .ssh/  #进入相关目录查看相关文件

    在主节点中将公钥复制到需要免密登录的机器(服务器上),通过如下命令:
    (最好给本机(主节点)也copy一个,ssh-copy-id 本机ip或者主机名)(输入命令回车后需要输入目标ip的用户密码才能成功)

    ssh-copy-id 目标ip地址
    或者 ssh-copy-id -i ~/.ssh/id_rsa.pub 目标IP地址或主机名

    注1:copy-id的时候另一台机器的用户必须在线(因为一台Linux机器可以存在多个用户,需要把公钥复制到对应的服务器中对应的用户目录下,则该用户必须在对应服务器中在线),即机器必须是开启的。
    子节点若是想连接主节点,则子节点中配置:

    ssh-keygen -t rsa
    scp ./id_rsa.pub root@主节点IP:/root/.ssh/authorized_keys

    使用如下命令来连接节点:
    就是远程登录

    ssh 目标IP或者主机名

    注2:
    1.配置ssh时候,作为namenode和resourcemanager的服务器需要配置ssh(即namenode和resourcemanager在同一台服务器上),即把该服务器的用户的公钥存储到其他所有节点ssh-copy-id
    2.如果namenode和resourcemanager不在同一台服务器上,那么两台机器都需要配置ssh,即两台服务器都需要把各自用户的公钥储存到其他所有节点,因为启动HDFS使用bin/hdfs namenode -format 和 sbin/start-dfs.sh(可以不加bin和sbin,因为配置了环境变量的)和启动resourcemanager使用sbin/start-yarn.sh需要访问其他节点

    三、解压配置Hadoop环境变量:

    tar -xzvf hadoop-2.7.7.tar.gz
    ln -s hadoop-2.7.7 hadoop  #创建软连接
    vim ~/.bashrc #编辑文件设置环境变量
    在环境变量中加入如下:
    export HADOOP_HOME=/root/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    然后重载配置生效:
    source ~/.bashrc

    验证Hadoop环境变量是否正常:

    whereis hdfs

    四、配置hadoop的配置文件:
    总共有5个文件需要修改:hadoop-env.sh、core-site.xml、hdfs-site.xml、
    mapred-site.xml、yarn-site.xml。这些文件的路径均是在  ${HADOOP_HOME}/etc/hadoop。
    当然,还要在/etc/hosts中添加: 本机ip 本机主机名 的映射关系。

    1.修改hadoop-env.sh文件:
    hadoop-env.sh与单机模式的配置一样.

    cd /hadoop-2.7.7/etc/hadoop

    查看jdk位置:echo $JAVA_HOME
    修改hadoop-env.sh文件:

    vim hadoop-env.sh


    把  export JAVA_HOME=${JAVA_HOME} 一行中的 ${JAVA_HOME} 改为jdk地址。
    2.配置core-site.xml:

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:8020</value>
            <!--value填的是默认文件系统的URL地址,格式是“hdfs://host:port”,host为ip或者主机名,port默认为8020-->
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/root/hadoop-2.7.7/tmp</value>
            <!--sda-->
        </property>
    </configuration>
    如果需要用到spark的话,需要在core-site.xml中加入如下:【否则会出错】
    
    <property>
            <name>hadoop.proxyuser.root.hosts</name>
            <value>*</value>
    </property>
    <property>
            <name>hadoop.proxyuser.root.groups</name>
            <value>*</value>
    </property>

    3.配置hdfs-site.xml:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
            <!--默认为3,搭建伪分布式时只有一个节点、改为1即可-->
        </property>
    </configuration>
    4.配置mapred-site.xml:
    首先cp mapred-site.xml.template mapred-site.xml生成mapred-site.xml,然后修改mapred-site.xml内容:
    
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
            <!--value默认为local,设置为yarn使其运行在YARN框架上-->
        </property>
    </configuration>

    5.配置yarn-site.xml:

    <configuration>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>主机名</value>
            <!--设置资源管理器的主机,设置为主机名或者IP-->
        </property>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
            <!--设置节点管理器的辅助服务器,默认为空,设置为mapreduce_shuffle-->
        </property>
    </configuration>

    修改完之后初始整个文件系统命令:

    hadoop namenode -format

    启动HDFS:

    start-dfs.sh


    验证HDFS进程 jps
    启动YARN:  start-yarn.sh 
    验证yarn进程: jps
    当然、也可以直接启动所有进程  start-all.sh 

    注:如果没有配置环境变量、则需要到sbin目录下执行sh文件进行开启和关闭.
    web访问HDFS进程界面:访问  http://IP:50070  可查看主节点数据节点的信息;
    访问http://IP:50090即可查看第二名称节点的信息。
    web访问YARN进程界面:访问   http://IP:8088

    使用程序测试hadoop:
    1.在HDFS中创建一个input文件夹: hdfs dfs -mkdir /input 
    2.在本地~下创建一个文件并写入数据,上传到HDFS:   hdfs dfs -put data.txt /input 
    3.查看上传情况:  hdfs dfs -ls /input 
    4.允许MapReduce WordCout例子:
    首先进入mapreduce程序目录、然后执行脚本

    cd ~/hadoop-2.7.7/share/hadoop/mapreduce  
    hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount ~/input/data.txt ~/output

    5.查看结果:    hdfs dfs -cat /output/part-r-0000 
    停止hadoop:  stop-all.sh 
    或者  stop-dfs.sh、stop-yarn.sh
    使用 jps 查看确定已经关闭

    如果使用的是个人的云服务器的话可能会出现以下问题: (附解决方法)
    注:若是出现no xxx to stop则是因为启动的时候没有指定pid的存放位置,hadoop(hbase也是这样)默认会放在Linux的/tmp目录下,进程名命名规则一般是框架名-用户名-角色名.pid,而默认情况下tmp里面的东西,一天会删除一次,由于pid不存在,当执行stop相关命令的时候找不到pid也就无法停止相关进程,所以报  no xxx to stop.
    解决方式:
    手动指定pid的存放位置,避免放在/tmp目录下,
    1.修改hadoop-env.sh,如果没有相关配置,可用直接添加:  

    export HADOOP_PID_DIR=/root/hadoop/pidDir
    export HADOOP_SECURE_DN_PID_DIR=/root/hadoop/pidDir
    原来是:
    export HADOOP_PID_DIR=${HADOOP_PID_DIR}
    export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}

    2.修改mapred-env.sh:

    export HADOOP_MAPRED_PID_DIR=/root/hadoop/pidDir
    原来是默认地址

    3.修改yarn-env.sh:

    export YARN_PID_DIR=/root/hadoop/pidDir

    4.使用ipconfig查看ip地址,查看到的地址是内网IP地址,而不是公网ip地址。
    然后 vim /etc/hosts  修改文件的映射,将公网IP与主机名的映射改为内网IP与主机名的映射即可。

    5.在配置文件的配置中,涉及到value需要设置为IP地址或主机名的情况时,先设为主机名比较好。

  • 相关阅读:
    Redis 设计与实现-内部数据结构
    RuntimeBinderException 异常
    IPv4和IPv6地址库
    -Xms -Xmx -Xmn -Xss -XX:
    倒计时
    列表操作-分片赋值
    20175316毕设准备Day1-2
    20175316毕业设计——基于区块链服务的仓库管理系统
    Python学习笔记:sys.argv入参
    Python学习笔记:bisect模块实现二分搜索
  • 原文地址:https://www.cnblogs.com/chenruhai/p/12464201.html
Copyright © 2020-2023  润新知