Mac搭建hadoop伪分布式集群

2,416 阅读3分钟

搭建环境的一大问题是每个人的基础环境貌似都不一样...有的一把梭就搞定了,有的抓耳挠腮大半天都没得救,就很无语 😓

搭建过程文件操作涉及的权限问题请尝试添加sudo解决

如遇其他问题请自行归档当前配置流程去谷歌解决后再回来读档继续,程序员归零心态很重要

属性问题可直接复制<property>标签的<name>值到浏览器去查看具体的配置信息&含义

本文发布于:2020 年 4 月 6 日 星期一

前置条件:

  • Java jdk
  • homebrew

一、下载配置与执行

  1. brew install hadoop,下载时长取决于网络,可以尝试谷歌搜索 homebrew 国内镜像配置

    备注: 因为前端开发也有一个叫 yarn 的包管理器,brew 下载时提示我 unlink 掉现有的 yarn,我的解决方式是给 nodeJs 的 yarn 起了个 alias,查找 yarn 所在目录使用which yarn获取,命令行执行:

        ln -s  /usr/local/Cellar/yarn/1.22.4/bin/yarn /usr/local/bin/yarnjs
        yarnjs -v
        1.22.4
    
  2. 配置环境变量到.zshrc

    • # JAVA_HOME
      export JAVA_HOME=$(/usr/libexec/java_home)
      export PATH=$JAVA_HOME/bin:$PATH
      export CLASS_PATH=$JAVA_HOME/lib
      # HADOOP_HOME
      export HADOOP_HOME=/usr/local/Cellar/hadoop/3.2.1_1/libexec
      export PATH=$HADOOP_HOME/bin:$PATH
      
    • 保存并命令行执行 source .zshrc

    • 测试环境变量:命令行输入 echo $HADOOP_HOME ,输出/usr/local/Cellar/hadoop/3.2.1_1/libexec 表示成功

  3. 配置伪分布式

    1. vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh,尾部添加 JAVA_HOME & HADOOP_HOME,这里我直接用绝对路径添加 JAVA_HOME,使用 mac 推荐的/usr/libexec/java_home在我电脑上读取不到 jdk,原因未知..

      export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home"
      export HADOOP_HOME="/usr/local/Cellar/hadoop/3.2.1_1/libexec"
      
    2. vim $HADOOP_HOME/etc/hadoop/core-site.xml,在<configuration>标签内填入

      
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
          <description>A base for other temporary directories</description>
        </property>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://localhost:9000</value>
        </property>
      
      

      备注: /usr/local/Cellar/hadoop/hdfs/tmp hdfs & tmp 文件夹为自己创建

    3. vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml,在<configuration>标签内填入

      
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
      
      
    4. 打开 mac 本 系统偏好设置 > 共享 > 勾选远程登录选项

    5. 设置无密码远程登录本机

      1. 测试远程连接 ssh localhost,输入电脑锁屏密码,成功连接后输入 exit退出

      2. 如果没有密码就无法 SSH 到本地主机,请执行以下命令

        ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
        cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
        chmod 0600 ~/.ssh/authorized_keys
        

        再次测试远程连接

    6. 格式化 hdfs 文件系统

      1. sudo $HADOOP_HOME/bin/hdfs namenode -format
        sudo $HADOOP_HOME/sbin/start-dfs.sh
        

        备注:hadoop 守护程序日志输出将写入$ HADOOP_LOG_DIR目录(默认为$HADOOP_HOME/logs

      2. 浏览器访问:http://localhost:9870/

        备注: 如果无法访问那么尝试重新 format 文件系统,我这里因为权限问题卡了一会,执行格式化命令前添加 sudo 解决的

    7. 设置执行 MapReduce 作业所需的 HDFS 目录

      sudo $HADOOP_HOME/bin/hdfs dfs -mkdir /user
      sudo $HADOOP_HOME/bin/hdfs dfs -mkdir /user/<username>
      
      <username> 我写了root
      
    8. 将输入文件复制到分布式文件系统中

      sudo $HADOOP_HOME/bin/hdfs dfs -mkdir input
      sudo $HADOOP_HOME/bin/hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml input
      
    9. 运行 hadoop 提供的示例文件

      sudo $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
      
    10. 检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们

      $HADOOP_HOME/bin/hdfs dfs -cat output/*
      
    11. 浏览器检查http://localhost:9870/dfshealth.html#tab-datanode ,就能看数据节点信息了

    12. 至此,mac 伪分布式系统搭建完毕,可执行 $HADOOP_HOME/sbin/stop-dfs.sh结束进程

二、使用 Yarn 对 Hadoop 进行资源管理

  1. vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

    
     <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
     <property>
         <name>mapreduce.application.classpath</name>
         <value>$HADOOP_HOME/etc/hadoop:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/yarn:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*</value>
     </property>
    
    

    备注: mapreduce.application.classpath 可以使用命令$HADOOP_HOME/bin/hdfs classpath查看获取,我这里将前面部分都修改为$HADOOP_HOME/***

  2. vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

    
    <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,HADOOP_HOME</value>
    </property>
    
    
  3. 启动 ResourceManager 后台程序和 NodeManager 后台程序 $HADOOP_HOME/sbin/start-yarn.sh

  4. 打开浏览器查看: http://localhost:8088/

  5. 结束进程:$HADOOP_HOME/sbin/stop-yarn.sh

    done...

后记: 因为项目组是搞大数据分析的,所以作为前端开发的我也必须了解一些大数据的背景知识,无奈在环境上就差点被劝退...以上是自己搭建 Apache Hadoop 伪分布式系统的全过程,其实并没有一帆风顺,中间各种归零存档然后再读档,好在功夫不负有心人、最终还是成功了。大数据,我来啦!!!

参考: ApacheHadoop 官方的配置教程