美文网首页我用 Linux
Linux上面安装hadoop3.2.0教程

Linux上面安装hadoop3.2.0教程

作者: 惟月慎行 | 来源:发表于2019-07-26 18:55 被阅读17次

    Contents

    Linux上面安装hadoop3.2.0教程

    一、安装java并配置环境变量

    linux 终端显示光标可用 echo -e "\033[?25h" ,隐藏光标可用 echo -e "\033[?25l"

    1.安装 Java

    官网下载最新的 [jdk]:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html

    勾选accept. linux环境选择64位,下载debain版本.deb后缀或者.tar.gz后缀。我用的是.deb

    • 下载好后进入文件目录我的在Downloads/
    hadoop@机械革命:/home/jackmin/Downloads$ ls
    jdk-12.0.2_linux-x64_bin.deb
    
    • 安装jdk输入命令 **dpkg -i jdk-12.0.2_linux-x64_bin.deb **

    • 安装后不知道目录怎么查看?

      先看dpkg 的列表里面有没有安装 dpkg -l jdk*

    hadoop@机械革命:/home/jackmin/Documents$ dpkg -l jdk*
    期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
    | 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
    |/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
    ||/ 名称           版本         体系结构     描述
    +++-==============-============-============-===============================================
    ii  jdk-12.0.2     12.0.2-1     amd64     Java Platform Standard Edition Development Kit
    

    ​ 查看所在位置 dpkg -L jdk-12.0.2

    hadoop@机械革命:/home/jackmin/Documents$ dpkg -L jdk-12.0.2
    /.
    /usr
    /usr/lib
    /usr/lib/jvm
    /usr/lib/jvm/jdk-12.0.2
    /usr/lib/jvm/jdk-12.0.2/release
    ....
    

    ​ 可以知道在/usr/lib/jvm里面.完全可以一开始就创建一个可以读写(chmod)的目录,然后安装时指定到这个目录 中

    • 可以进入目录查看/usr/lib/jvm/jdk-12.0.2/
    hadoop@机械革命:/usr/lib/jvm/jdk-12.0.2$ ls
    bin  conf  include  jmods  legal  lib  man  release
    

    2. 配置linux下 **java环境变量 **

    打开 /etc/profile添加JAVA_HOMEM 和 JAVA_PATH 和 CLASSPATH

    hadoop@机械革命:/usr/lib/jvm/jdk-12.0.2/bin$ vim /etc/profile
    

    (如果提示没有读写权限,用chmod,见前面内容)

    shift + g 迅速定位到最后一行行首,新添加一行输入:

    # 等号'='两边不能有空格
    export JAVA_HOME=/usr/lib/jvm/jdk-12.0.2    # 根据具体路径添加
    export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH   # 添加/bin  /jre/bin
    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_home/jre/lib        # 注意前面.: 添加/lib  /jre/lib
    

    保存退出 :wq

    为了使环境变量生效,需要进行 source /etc/profile

    $ source /etc/profile
    $ java -version
    java version "12.0.2" 2019-07-16
    Java(TM) SE Runtime Environment (build 12.0.2+10)
    Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)
    

    Bingo!!!

    二、安装配置hadoop

    1. 安装 hadoop

    结束后可在当前路径看到生成了一个文件夹

    hadoop@机械革命:~$ ls
    hadoop-3.2.0  hadoop-3.2.0.tar.gz
    

    2. hadoop 环境变量和配置

    $ vim /etc/profile      # 添加hadoop_home,以及/bin;/sbin路径
    export HADOOP_HOME=/home/hadoop/hadoop-3.2.0
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/jre/bin:$PATH
    $ source /etc/profile   # 使环境变量生效
    
    1. 查看是否安装完成
    hadoop@机械革命:~$ hadoop version
    Hadoop 3.2.0
    Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
    Compiled by sunilg on 2019-01-08T06:08Z
    Compiled with protoc 2.5.0
    

    ok

    1. 设置修改hadoop配置(伪分布模式)

      在原来/home/hadoop/hadoop-3.2.0/文件下 新建一个tmp文件夹,在tmp下新建两个文件夹命名为name,data注意文件夹的权限

    • 首先修改 /etc/hadoop/core-site.xml
    <configuration>
    <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/home/hadoop/hadoop-3.2.0/tmp</value>
             <description>Abase for other temporary directories.</description>
    </property>
    <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
    </property>
    </configuration>         
    
    • 修改 .../hadoop-3.2.0/etc/hadoop/hdfs-site.xml
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/hadoop-3.2.0/tmp/dfs/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/hadoop-3.2.0/tmp/dfs/data</value>
    </property>
    </configuration>
    
    • 然后修改hadoop-env.sh将里面的java_home改为之前的java_home地址
    JAVA_HOME=/usr/lib/jvm/jdk-12.0.2   
    
    • 最后修改mapred-site.xml
    <configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    </configuration>
    
    • 这时候先不启动,还没有配置ssh

    三、SSH免密登录

    1.SSH 原理简述

    • 简单来说,SSH是一种网络协议,用于网络主机之间的加密协议.

    • 使用ssh登录的简单流程:

      1. 用户使用ssh user@host命令对远程主机发起登陆;
      2. 远程主机将自己的公钥返回给请求主机;
      3. 请求主机使用公钥对用户输入的密码(远程主机的密码)进行加密;
      4. 请求主机将加密后的密码发送给远程主机;
      5. 远程主机使用私钥对密码进行解密;
      6. 最后,远程主机判断解密后的密码是否与用户密码一致,一致就同意登陆,否则反之。

    PS:

    1. SSH不像https协议那样,SSH协议的公钥是没有证书中心(CA)公证(可信第三方)的,容易遭受中间人攻击.
    2. 对于给出的远程主机公钥指纹fingerprint是否可信,由用户自己决定,

    如果确信,则公钥被接受保存在 ~ /.ssh/known_hosts 中,下次登录该主机的时候就直接读取known_hosts,忽略警告,当远程主机公钥修改了时,连接时会提醒需要删除本地的known_hosts(见后面4.8)

    • 使用ssh免密登录的原理是:

      根据前面的原理可以知道想登录远程需要生成 公私密钥对:用 ssh-keygen -t rsa 生成密钥对,再用ssh-copy-id -i ~/.ssh/id_rsa.pub user@host 将公钥发给远程主机的~/.ssh/authorized_keys里面.而登录本机则直接用

      $ ssh-keygen -t rsa              # 会有提示,都按回车就可以
      $ cat ./id_rsa.pub >> ./authorized_keys  # 加入授权
      
    • 免密登录简单流程:

      1. 用户使用ssh user@host命令对远程主机发起登陆;
      2. 远程主机对用户返回一个随机串;
      3. 用户所在主机使用私钥对这个随机串进行加密,并将加密的随机串返回至远程主机;
      4. 远程主机使用分发过来的公钥对加密随机串进行解密;
      5. 如果解密成功,就证明用户的登陆信息是正确的,则允许登陆;否则反之。

    2. SSH 免密登录

    如果你想登录其他主机,就需要将本机生成的公钥id_rsa.pub(私钥为id_rsa)复制给其他主机的authorized_keys.

    默认hadoop进行本机免密登录也是需要提前将id_rsa_pub复制给本机authorized_keys

    1. 尝试登录localhost
    hadoop@机械革命:/etc/ssh$ ssh localhost
    Command 'ssh' not found, but can be installed with:
    sudo apt install openssh-client
    

    表明本机没有安装ssh,如果提示 ssh: connect to host localhost port 22: Connection refused,可能是没有开启服务等问题. 切换root用户,如下操作:

    1. 卸载SSH
     sudo apt-get autoremove openssh-server
     sudo apt-get autoremove openssh-client
     sudo apt-get purge openssh-server # 彻底卸载ssh服务
    
    1. 重新安装SSH
    sudo apt-get install openssh-server 
    sudo apt-get install openssh-client
    
    1. ssh的启动

      查看 服务是否正确启动 ps -ef |grep ssh

    root@机械革命:/etc/ssh# ps -ef |grep ssh
    jackmin   9048  8957  0 19:20 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/im-launch /usr/bin/zsh /home/jackmin/.xsession
    root     16213 15077  0 23:14 tty3     00:00:00 grep --color=auto ssh
    
    

    没有出现上面的ssh-agent 和 sshd等内容时,需要完全卸载重新执行.

    输入下面命令,开启服务,之后再重新查看服务

    sudo service ssh start
     * Starting OpenBSD Secure Shell server sshd                       [ok]
    
    
    root@机械革命:/etc/ssh# ps -ef |grep ssh
    jackmin   9048  8957  0 19:20 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/im-launch /usr/bin/zsh /home/jackmin/.xsession
    root     16293     1  0 23:31 ?        00:00:00 /usr/sbin/sshd
    root     16305 15077  0 23:35 tty3     00:00:00 grep --color=auto ssh
    
    
    1. 切换到ssh目录 cd /etc/ssh/
    # cd /etc/ssh/
    root@机械革命:/etc/ssh#
    
    
    1. 复制导入公钥,ssh连接需要公钥认证

      root@机械革命:/home# ssh-keygen -t rsa -P ""
      Generating public/private rsa key pair.
      Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa #需要输入
      Your identification has been saved in /root/.ssh/id_rsa.
      Your public key has been saved in /root/.ssh/id_rsa.pub.
      The key fingerprint is:
      SHA256:iOego....
      $ cat  /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
      
      
    2. 切换到hadoop用户(我安装在新建的用户hadoop上面,如果不切换,可直接在接着上面步骤)执行:

      进入/etc/ssh/ 修改权限并编辑sshd_config 文件,添加两行:PubkeyAuthentication yes 以及 PermitRootLogin yes

    hadoop@机械革命:/home/jackmin$ cd  /etc/ssh/ 
    # 更改/etc/ssh/sshd_config权限
    hadoop@机械革命:/etc/ssh$ sudo chmod ugo+rwx sshd_config
    [sudo] hadoop 的密码:
    # 编辑sshd_config添加:PubkeyAuthentication yes以及PermitRootLogin yes
    hadoop@机械革命:/etc/ssh$ vim sshd_config
    # 重新启动ssh服务
    hadoop@机械革命:/etc/ssh$ sudo /etc/init.d/ssh restart
     * Restarting OpenBSD Secure Shell server sshd
    
    
    1. 尝试ssh localhost

      woo!!!出现了这个

      hadoop@机械革命:/etc/ssh$ ssh localhost
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
      @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
      IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
      Someone could be eavesdropping on you right now (man-in-the-middle attack)!
      It is also possible that a host key has just been changed.
      The fingerprint for the ECDSA key sent by the remote host is
      SHA256:L/i20njmxWwRGPeuHi/6OeoR6yxgyG00Az8ga9/MzNI.
      Please contact your system administrator.
      Add correct host key in /home/hadoop/.ssh/known_hosts to get rid of this message.
      Offending ECDSA key in /home/hadoop/.ssh/known_hosts:1
        remove with:
        ssh-keygen -f "/home/hadoop/.ssh/known_hosts" -R "localhost"
      ECDSA host key for localhost has changed and you have requested strict checking.
      Host key verification failed.
      
      

      应该是我之前折腾导入秘钥导致known_hosts被更改了,根据提示先删除, 执行ssh-keygen -f “/hadoop/hadoop/.ssh/known_hosts" -R “localhost"

      hadoop@机械革命:/etc/ssh$ sudo ssh-keygen -f "/home/hadoop/.ssh/known_hosts" -R "localhost"
      # Host localhost found: line 1
      /home/hadoop/.ssh/known_hosts updated.
      Original contents retained as /home/hadoop/.ssh/known_hosts.old
      
      

      9.再次运行ssh localhost 提示需要输入密码hadoop@localhost's password: 按ctrl+c 然后exit退出刚才的ssh服务,进入/.ssh cd ~/.ssh 然后 ssh-keygen -t rsa 然后按几下回车.

      $ ssh-keygen -t rsa              # 会有提示,都按回车就可以
      $ cat ./id_rsa.pub >> ./authorized_keys  # 加入授权
      
      

    运行ssh localhost 输入yes

        10. 这里还要修改相应的ssh文件权限,有的没有读写权利Stopping secondary namenodes [机械革命]
    
    

    机械革命: Failed to add the host to the list of known hosts (/home/hadoop/.ssh/known_hosts)

    修改/home/hadoop/.ssh权限和 /home/hadoop/.ssh/known_hosts

    hadoop@机械革命:~/hadoop-3.2.0/sbin$ sudo chmod 644 ~/.ssh/known_hosts
    hadoop@机械革命:~/hadoop-3.2.0/sbin$ sudo chmod 755 ~/.ssh
    
    

    执行ssh localhost成功

    四、启动hadoop

    1. namenode格式化

    $ hdfs namenode -format
    
    

    因为我们配置 hadoop.tmp.dir 参数,并不是默认使用的 /tmp/hadoo-hadoop 执行一次格式化即可以后不用了,如果没有配置,则每次系统重启后都需要 -format

    2. 启动NameNode,DataNode daemon进程

    $ start-dfs.sh
    
    

    一般不建议直接 start-all.sh 应该先启动hdfs再依次启动其他的构件.

    3. 查看是否成功启动hadoop

    $ jps
    7061 Jps
    3174 NameNode
    3593 SecondaryNameNode
    
    

    再从浏览器输入:http://localhost:9870 回车即可看到一片绿~

    转 载 注 明 出 处 谢 谢!!! ^ _ ^

    相关文章

      网友评论

        本文标题:Linux上面安装hadoop3.2.0教程

        本文链接:https://www.haomeiwen.com/subject/ynndrctx.html