• Hadoop 系列(二)安装配置


    Hadoop 系列(二)安装配置

    Hadoop 官网:http://hadoop.apache.org

    一、Hadoop 安装

    1.1 Hadoop 依赖的组件

    1. JDK :从 Oracle 官网下载,设置环境变量(JAVA_HOME、PATH 和 CLASSPATH)。

    2. SSH(安全外壳标议) :推荐安装 Openssh。

      Hadoop 需要通过 SSH 来启动 Slave 列表中各台主机的守护进程,因此 SSH 也是必须安装的,即使是安装伪分布式版本(因为 Hadoop 并没有区分开集群式和伪分布式)。对于伪分布式, Hadoop 会采用与集群相同的处理方式,即按次序启动文件 conf/slaves 中记载的主机上的进程;只不过在伪分布式中 Salve 为 localhost(即为自身),所以对于伪分布式 Hadoop,SSH 一样是必需的。

    1.2 Hadoop 安装

    (1) 创建 hadoop 用户

    groupadd hadoop                             # 创建用户组
    useradd -g hadoop -m -s /bin/bash hadoop    # 创建用户
    passwd hadoop                               # 设置 hadoop 密码为 hadoop
    

    为 hadoop 用户增加管理员权限:

    visudo  # vim /etc/sudoers
    
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    hadoop  ALL=(ALL)       ALL
    ## Allows people in group wheel without a password
    %wheel  ALL=(ALL)       NOPASSWD: ALL
    
    gpasswd -a hadoop wheel # 将 hadoop 用户加入到 wheel 组
    

    (2) 安装并配置 SSH 无密码登陆

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

    rpm -qa | grep ssh
    

    如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装

    若需要安装,则可以通过 yum 进行安装:

    yum -y install openssh-clients openssh-server
    

    接着执行如下命令测试一下 SSH 是否可用:

    ssh localhost
    

    此时会有如下提示(SSH 首次登陆提示),输入 yes 。然后按提示输入密码,这样就登陆到本机了。

    [root@master home]# ssh localhost
    The authenticity of host 'localhost (::1)' can't be established.
    ECDSA key fingerprint is bd:66:a8:94:98:d5:0b:f3:bc:e9:5c:41:4c:ca:b3:d4.
    Are you sure you want to continue connecting (yes/no)? yes   
    Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
    root@localhost's password: 
    Last login: Fri Apr 20 07:07:31 2018 from 192.168.2.1
    

    但这样登陆是需要每次输入密码的,我们需要配置成 SSH 无密码登陆比较方便。

    首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:

    exit                           # 退出刚才的 ssh localhost
    cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
    rm ./id_rsa*                   # 删除之前生成的公匙(如果有)
    ssh-keygen -t rsa              # 会有提示,都按回车就可以
    cat id_rsa.pub >> authorized_keys  # 加入授权
    chmod 600 ./authorized_keys    # 修改文件权限,否则无法登陆,亲测
    

    注意: 一定要 chmod 来一下,不然无法起作用。此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了。

    (3) Hadoop 安装

    wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.0/hadoop-3.1.0.tar.gz
    tar -zxvf hadoop-3.1.0.tar.gz
    sudo mv ./hadoop-3.1.0/ ./hadoop        # 将文件夹名改为 hadoop
    sudo chown -R hadoop:hadoop ./hadoop    # 修改文件权限
    

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

    [hadoop@master ~]$ /usr/local/hadoop/bin/hadoop version
    
    Hadoop 3.1.0
    Source code repository https://github.com/apache/hadoop -r 16b70619a24cdcf5d3b0fcf4b58ca77238ccbe6d
    Compiled by centos on 2018-03-30T00:00Z
    Compiled with protoc 2.5.0
    From source with checksum 14182d20c972b3e2105580a1ad6990
    This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.1.0.jar
    

    (4) 环境变量

    vim /etc/profile.d/start.sh
    
    # hadoop
    export HADOOP_HOME=/home/hadoop/
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_COMMON_LIB_NATIVE=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
    

    二、Hadoop 集群配置

    (1) 网络配置

    配置主机名:

    vim /etc/sysconfig/network
    
    NETWORKING=yes
    HOSTNAME=master
    

    配置 IP/主机名 的映射关系

    vim /etc/hosts
    
    192.168.2.101 master
    192.168.2.102 slave1
    

    修改完成后需要重启一下,重启后在终端中才会看到机器名的变化。

    配置好后需要在各个节点上执行如下命令,测试是否相互 ping 得通,如果 ping 不通,后面就无法顺利配置成功

    ping master -c 3   # 只ping 3次,否则要按 Ctrl+c 中断
    ping slave1 -c 3
    

    (2) SSH 无密码登陆节点配置

    这个操作是要让 master 节点可以无密码 SSH 登陆到各个 slave 节点上。

    首先生成 master 节点的公匙,在 master 节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次)

    cd ~/.ssh               # 如果没有该目录,先执行一次 ssh localhost
    rm ./id_rsa*            # 删除之前生成的公匙(如果有)
    ssh-keygen -t rsa       # 一直按回车就可以
    chmod 600 ./authorized_keys    # 修改文件权限
    

    让 master 节点需能无密码 SSH 本机,在 master 节点上执行:

    cat ./id_rsa.pub >> ./authorized_keys
    

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

    scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/
    

    scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,如下图所示:

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

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

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

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

    ssh slave1
    

    (3) 配置集群/分布式环境配置

    集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的 5 个配置文件,这里仅介绍了正常启动所必须的设置项: workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

    1. 配置 etc/hadoop/workers

      workers 将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。

      本教程让 master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:slave1。

    2. 配置 etc/hadoop/core-site.xml

      <configuration>
          <!-- 配置默认的文件系统,地址最好使用主机名而不是IP -->
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://master:9000</value>
          </property>
          <!-- Hadoop 运行时产生文件的存储目录 -->
          <property>
              <name>hadoop.tmp.dir</name>
              <value>/home/hadoop/data</value>
          </property>
      </configuration>
      
    3. 配置 etc/hadoop/hdfs-site.xml

      dfs.replication 一般设为 3,但我们只有一个 slave 节点,所以 dfs.replication 的值还是设为 1

      <configuration>
          <!-- 配置 Hadoop 中 HDFS,默认为 3,单机版需要改为 1 -->
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
          <!-- 配置 web 界面地址,否则无法访问 -->
          <property>
              <name>dfs.namenode.http-address</name>
              <value>master:50070</value> 
          </property>
      </configuration>
      
    4. 配置 etc/hadoop/mapred-site.xml

      <configuration>
          <!-- 指定 mr 运行在 yarn 上 -->
          <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>
      
    5. 配置 etc/hadoop/yarn-site.xml

      <configuration>
          <!-- 指定 yarn 的老大(ResourceManager)的地址 -->
          <property>
              <name>yarn.resourcemanager.hostname</name>
              <value>master</value>
          </property>
          <!-- reduce 获取数据的方式 -->
          <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>
      </configuration>
      

    (5) 启动与测试

    Hadoop 测试:首次启动需要先在 master 节点执行 NameNode 的格式化。

        初始化文件系统:hdfs namenode -format
             启动 dfs:start-dfs.sh
             停止 dfs:stop-dfs.sh
            启动 yarn:start-yarn.sh
            停止 yarn:stop-yarn.sh
    

    初始化文件系统后会在 /home/hadoop/data/dfs/name/current 生成 NameNode 文件系统的元数据:

    -rw-rw-r-- 1 hadoop hadoop     391 4月  20 21:07 fsimage_0000000000000000005
    -rw-rw-r-- 1 hadoop hadoop      62 4月  20 21:07 fsimage_0000000000000000005.md5
    

    启动 dfs 会启动如下进程 jps:

    2480 DataNode           // 50075 http port | 50010 rpc port
    2378 NameNode           // 50070 http port | 8020  rpc port
    2639 SecondaryNameNode  // 50090 http port
    

    启动 yarn 会启动如下进程 jps:

    2949 ResourceManager   // 
    3053 NodeManager       // 
    

    web 界面 :http://192.168.2.101:50070。注意只能通过 master 的 ip 访问,不能通过 localhost/127.0.0.1 访问。

    Hadoop 测试:

    hadoop fs -put README.txt hdfs://master:9000/   # 上传文件
    hadoop fs -get hdfs://master:9090/README.txt    # 下载文件
    

    三、Hadoop 安装踩过的坑

    问题1:ClassNotFount

    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>
    

    可以使用 hadoop classpath 查看 hadoop 的 classpath 路径

    etc/hadoop/yarn-site.xml:

    <configuration>
        <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.resource.memory-mb</name>
            <value>512</value>
        </property>
        <property>
            <name>yarn.nodemanager.vmem-pmem-ratio</name>
            <value>2.1</value>
        </property>
        <property>
            <name>yarn.nodemanager.vmem-check-enabled</name>
            <value>false</value>
        </property>
        <property>
            <name>yarn.nodemanager.pmem-check-enabled</name>
            <value>false</value>
        </property>
        <property>
            <name>yarn.scheduler.minimum-allocation-mb</name>
            <value>128</value>
        </property>
    </configuration>
    

    参考:

    1. 官方安装文档:http://hadoop.apache.org/docs/r3.1.0/hadoop-project-dist/hadoop-common/SingleCluster.html

    2. 中文安装文档:http://www.powerxing.com/install-hadoop/


    每天用心记录一点点。内容也许不重要,但习惯很重要!

  • 相关阅读:
    六、TreeSet中的定制排序
    五、Set接口
    四、List接口
    Vocabulary Recitation 2020/05/20
    Vocabulary Recitation 2020/05/19
    Vocabulary Recitation 2020/05/18
    自控力_第六章
    Vocabulary Recitation 2020/05/17
    Vocabulary Recitation 2020/05/15
    Vocabulary Recitation 2020/05/14
  • 原文地址:https://www.cnblogs.com/binarylei/p/9028424.html
Copyright © 2020-2023  润新知