zoukankan      html  css  js  c++  java
  • 安装Hadoop

    Ubuntu 18.04.1 LTS (on VirtualBox)

    Apache hadoop-3.3.1.tar.gz(2021 Jun 15)

    JAVA 8 (openjdk version "1.8.0_162")

    --

    注,2020年7月写过一篇,今天,重新启程

    Hadoop下载地址:

    https://hadoop.apache.org/releases.html

    选择其中的 Binary download,点击即开始下载(近600MB)。

    本文记录 单机安装Hadoop的步骤,参考官文:

    Hadoop: Setting up a Single Node Cluster.

    目录

    1、建立hadoop用户

    2、配置免密登录

    3、下载&解压

    4、修改配置

    4.1 etc/hadoop/hadoop-env.sh

    5、配置伪分布式模式(pseudo-distributed mode)

    5.1 etc/hadoop/core-site.xml

    5.2 etc/hadoop/hdfs-site.xml

    5.3 创建/data/hadoop

    6、启动HDFS

    7、配置YARN资源调度器

    7.1 etc/hadoop/mapred-site.xml

    7.2 etc/hadoop/yarn-site.xml

    7.3 启动YARN

    7.4 访问资源管理器

    参考文档

    1、建立hadoop用户

    # 新建用户 hadoop
    sudo useradd -m hadoop -s /bin/bash
    
    # 添加到sudo组(管理员权限)
    sudo adduser hadoop sudo
    
    # 设置hadoop密码
    passwd hadoop

    试验时设置密码为 111。

    新建用户后,多了一个 hadoop组( cat /etc/group),sudo组 下多了一个 hadoop:

    $ cat /etc/group | grep sudo
    sudo:x:27:user,hadoop

    /home下多了 hadoop目录:

    $ ls -l /home | grep hadoop
    drwxr-xr-x  6 hadoop hadoop 4096 12月  4 12:08 hadoop

    疑问:

    hadoop 用户在 使用Hadoop的作用是什么?

    2、配置免密登录

    安装了 ssh。

    修改 /etc/profile ,添加:

    export PDSH_RCMD_TYPE=ssh

    切换到 hadoop 用户,进入其 home 目录,执行ssh-keygen

    # 输入后,一直点回车
    ssh-keygen
    
    # 官文的
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

    在 /home/hadoop 下生成了 .ssh 及其中的三个文件:

    id_rsa、id_rsa.pub、known_hosts

    执行命令,拷贝 id_rsa.pub 的内容到 authorized_keys 文件(不存在也没关系,会自动建立):

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    此时,执行 ssh localhost 就可以免密登录了。

    疑问:

    免密登录 的作用是什么?

    下面配置 单机伪分布式模式 时需要。

    3、下载&解压

    下载得到 hadoop-3.3.1.tar.gz,放到 /home/hadoop/ws 中;

    进入/home/hadoop/ws,原地解压:

    tar zxvf hadoop-3.3.1.tar.gz

    解压得到:

    $ ll hadoop-3.3.1/
    total 124
    drwxr-xr-x 11 hadoop hadoop  4096 12月  4 11:34 ./
    drwxrwxr-x  3 hadoop hadoop  4096 12月  4 11:34 ../
    drwxr-xr-x  2 hadoop hadoop  4096 12月  4 11:34 bin/
    drwxr-xr-x  3 hadoop hadoop  4096 12月  4 11:34 etc/
    drwxr-xr-x  2 hadoop hadoop  4096 12月  4 11:34 include/
    drwxr-xr-x  3 hadoop hadoop  4096 12月  4 11:34 lib/
    drwxr-xr-x  4 hadoop hadoop  4096 12月  4 11:34 libexec/
    -rw-rw-r--  1 hadoop hadoop 23450 12月  4 11:34 LICENSE-binary
    drwxr-xr-x  2 hadoop hadoop  4096 12月  4 11:34 licenses-binary/
    -rw-rw-r--  1 hadoop hadoop 15217 12月  4 11:34 LICENSE.txt
    drwxrwxr-x  2 hadoop hadoop  4096 12月  4 12:08 logs/
    -rw-rw-r--  1 hadoop hadoop 29473 12月  4 11:34 NOTICE-binary
    -rw-rw-r--  1 hadoop hadoop  1541 12月  4 11:34 NOTICE.txt
    -rw-rw-r--  1 hadoop hadoop   175 12月  4 11:34 README.txt
    drwxr-xr-x  3 hadoop hadoop  4096 12月  4 11:34 sbin/
    drwxr-xr-x  4 hadoop hadoop  4096 12月  4 11:34 share/

    本试验用到过 etc、bin、sbin、logs 三个目录下的文件。

    4、修改配置

    4.1 etc/hadoop/hadoop-env.sh

    末尾添加:

    export JAVA_HOME=/usr

    说明:

    为什么是 /usr?使用 whereis java 得到的结果如下:

    $ whereis java
    java: /usr/bin/java /usr/share/java /usr/share/man/man1/java.1.gz

    其实,可以进一步追踪 java命令在哪里:/usr/bin/java 只是一个 符号链接。

    $ ls -l /usr/bin | grep java
    lrwxrwxrwx 1 root              root                     22 5月  26  2021 java -> /etc/alternatives/java
    lrwxrwxrwx 1 root              root                     23 5月  26  2021 javac -> /etc/alternatives/javac
    lrwxrwxrwx 1 root              root                     25 5月  26  2021 javadoc -> /etc/alternatives/javadoc
    lrwxrwxrwx 1 root              root                     23 5月  26  2021 javah -> /etc/alternatives/javah
    lrwxrwxrwx 1 root              root                     23 5月  26  2021 javap -> /etc/alternatives/javap
    
    # 更进一步:/etc/alternatives/java 也是一个 符号链接
    /etc/alternatives$ ls -l | grep java
    lrwxrwxrwx 1 root root  46 5月  26  2021 java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
    ...
    

    进一步跟踪,这里的 JAVA_HOME 应该配置为:

    /usr/lib/jvm/java-8-openjdk-amd64

    更改后,bin/hadoop命令仍然可用,说明是对的。

    配置完毕,此时,可以使用 bin/hadoop 命令了。

    Standalone模式:配置完毕

    疑问:

    此时可以做什么?

    5、配置伪分布式模式(pseudo-distributed mode)

    5.1 etc/hadoop/core-site.xml

    说明,官文中,端口配置为 9000,但本机的 9000端口被 另外的程序占用了,故改为 19870。开始改为 9870,结果失败了,9870是默认的Web访问端口。

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://localhost:19870</value>
            </property>
    </configuration>
    

    5.2 etc/hadoop/hdfs-site.xml

    一个 namenode,一个 datanode,副本数量 设置为 1。

    两个nodes 的 value都在 /data/hadoop/ 目录下,目的是为了 数据持久——否则会在 /tmp 目录下建立。

    <configuration>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>/data/hadoop/dfs/name</value>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>/data/hadoop/dfs/data</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
    </configuration>
    

    5.3 创建/data/hadoop

    创建目录,并把权限分配给 hadoop(chown)。来自博客园

    $ ls -l /data/
    drwxrwxr-x 3 hadoop hadoop 4096 12月  3 21:51 hadoop

    6、启动HDFS

    namenode格式化

    bin/hdfs namenode -format

    执行后,/data/hadoop/ 下的变化:多了一些文件(格式化后本没有这么多,下图有些 是 后面启动hdfs后产生的)

    启动HDFS

    namenode、datanode、secondary namenode 都启动了

    $ sbin/start-dfs.sh
    Starting namenodes on [localhost]
    Starting datanodes
    Starting secondary namenodes [ben-VirtualBox]

    执行jps命令,可以看到多了几个进程:每个node对应一个 JAVA进程

    $ jps
    12273 Jps
    11882 DataNode
    12126 SecondaryNameNode
    11711 NameNode

    如果三个没有启动,可以去 Hadoop下的 logs目录 中查看 具体启动失败的原因。来自博客园

    进程信息:

    浏览器 访问三个nodes 的Web页面

    1)namenode

    访问 http://localhost:9870

    从页面可以看到,namenode用了 9870、19870 两个端口,后者是前面配置的。来自博客园

    2)datanode

    在 namenode 的web页面 打开 Datanodes 标签页,其中可以看到一个 datanode,其占用了两个端口:9866、9864

    访问 http://localhost:9864 :

    3)secondary namenode

    前面两个noded都可以浏览器访问了,那么,secondary namenode 可以吗?来自博客园

    在namenode中没有找到相关信息,但可以用 netstat 找到其端口。9867 还是 9868?

    访问端口 9867 返回:

    It looks like you are making an HTTP request to a Hadoop IPC port. 
    This is not the correct port for the web interface on this daemon.

    访问 http://localhost:9868,返回其 /status.html 页面(图中的 mylinux 指 Ubuntu虚拟机):来自博客园

    至此,bin/hdfs 命令就可以使用了

    示例:

    help命令:
    bin/hdfs --help
    bin/hdfs dfs --help
    
    使用 dfs子命令:
      建立目录 /user
      404* bin/hdfs dfs -mkdir /user/
      建立目录 /user/hadoop
      405  bin/hdfs dfs -mkdir /user/hadoop
      查看 根目录下文件
      406  bin/hdfs dfs -ls /
      查看 /user下文件
      407  bin/hdfs dfs -ls /user
      将本地文件按上传 并更名为 input:此时的 hdfs当前目录为 /user/hadoop
      409  bin/hdfs dfs -put NOTICE.txt input
      410  bin/hdfs dfs -ls /
      411  bin/hdfs dfs -ls /user
      找到上传的文件
      412  bin/hdfs dfs -ls /user/hadoop
      找到上传的文件
      413  bin/hdfs dfs -ls
      显示上传的文件的内容
      414  bin/hdfs dfs -cat input

    更多使用,可以本文开头提到的参考官文。来自博客园

    停止hdfs:

    $ sbin/stop-dfs.sh

    疑问:

    hdfs是什么?fs文件系统,文件系统能干啥呢?管理文件啊!

    hdfs管理文件 和 主机上管理文件有什么不同?分布式文件系统?可以存 更多、更大 的文件?上限是怎样的?读写效率如何?

    hdfs的实际案例有哪些?来自博客园

    小坑说明

    启动过程中,遇到一些免密登录权限的问题——没有将 id_rsa.pub拷贝到 authorized_keys 中 导致的。

    错误如下:

    $ sbin/start-dfs.sh
    Starting namenodes on [ben-VirtualBox]
    ben-VirtualBox: hadoop@ben-virtualbox: Permission denied (publickey,password).
    Starting datanodes
    localhost: hadoop@localhost: Permission denied (publickey,password).
    Starting secondary namenodes [ben-VirtualBox]
    ben-VirtualBox: hadoop@ben-virtualbox: Permission denied (publickey,password).

    官文中的 HDFS架构图:

    7、配置YARN资源调度器

    7.1 etc/hadoop/mapred-site.xml

    同官文。

    <configuration>
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
            <property>
                    <name>mapreduce.application.classpath</name>
                    <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
            </property>
    </configuration>
    

    7.2 etc/hadoop/yarn-site.xml

    多了 yarn.nodemanager.vmem-check-enabled=false

    <configuration>
    
    <!-- Site specific YARN configuration properties -->
    
    
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.nodemanager.env-whitelist</name>
                <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>
        <!-- 避免 任务需要的内存超过虚拟内存大小 时,任务自动失败 的问题 -->
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
    </configuration>

    7.3 启动YARN

     sbin/start-yarn.sh 命令

    hadoop@ben-VirtualBox:~/ws/hadoop-3.3.1$ sbin/start-yarn.sh
    Starting resourcemanager
    Starting nodemanagers
    hadoop@ben-VirtualBox:~/ws/hadoop-3.3.1$ jps
    7986 Jps
    4882 DataNode
    4708 NameNode
    5126 SecondaryNameNode
    7853 NodeManager
    7693 ResourceManager
    hadoop@ben-VirtualBox:~/ws/hadoop-3.3.1$

     启动成功,多了 NodeManager、ResourceManager 两个JAVA进程。来自博客园

    7.4 访问资源管理器

    端口:8088

    好了,单机伪分布式模式安装完毕,且正常运行。

    停止YARN:

    $ sbin/stop-yarn.sh
    Stopping nodemanagers
    Stopping resourcemanager

    此时,使用jps命令 找不到YARN相应的进程了,Web页面自然也访问不了了。

    疑问:

    hadoop安装好了,可以用来做什么呢?

    hadoop有哪些配置?

    hdfs有哪些配置?不同类型节点

    yarn是什么?资源调度?怎么调度?原理是什么?怎么使用?来自博客园

    官文中的 YARN架构图:

    》》》全文完《《《

    确定关键问题,才能走好下一步。

    再次出发,这次会前进到哪一步?

    参考文档

    1、Hadoop、HBase、Spark单机安装

    自己的 前文

    2、linux用户/用户密码和用户组管理

    3、linux删除某用户密码

    4、查看Linux内核版本

    5、

  • 相关阅读:
    「ZJOI2019」开关 (概率期望+FWT)
    FJWC2020 Day3 题解
    FJWC2020 Day1 题解
    「ZJOI2019」Minimax 搜索(动态dp)
    「十二省联考 2019」希望(长链剖分优化dp)
    CF1097F Alex and a TV Show(莫比乌斯反演+bitset)
    [Luogu#4707] 重返现世(minmax容斥+背包dp)
    201871010105曹玉中《面向对象程序设计(java)》第十周学习总结 曹玉中
    201871010105曹玉中《面向对象程序设计(Java)》第一周学习总结 曹玉中
    201871010105曹玉中《面向对象程序设计(java)》第四周学习总结 曹玉中
  • 原文地址:https://www.cnblogs.com/luo630/p/15642384.html
Copyright © 2011-2022 走看看