此篇文章记录博主使用M1版macos设备利用brew安装hadoop3,在本地安装伪分布式hadoop进行快速学习

【前提】 Homebrew安装

Homebrew是OSX中非常优秀的包管理工具,如果没安装,可以前往博主博客搜索Homebrew教程

配置 ssh localhost(免密登陆)

  1. 因为安装hadoop需要远程登入的功能,所以需要安装ssh工具,但Mac下自带ssh,所以不需要另外安装ssh

  2. Macos X 只需要在系统偏好设置-->共享-->远程登录勾选就可以使用ssh了。

    PS:如果没有执行远程登录勾选操作,在运行ssh localhost会出现:mac ssh: connect to host localhost port 22: Connection refused。

  3. ssh免密设置:终端输入

    ssh-keygen -t rsa -P ""
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  4. 确认能否不输入口令就用ssh登录localhost:

    $ ssh localhost

JDK 安装

  • 查看java版本
    java -version
    如果macos没有安装Java,可以登录官网下载并安装,也可以通过brew安装Java8

brew安装hadoop

安装命令

$ brew install hadoop

查看安装目录

$ brew list hadoop

配置Hadoop相关文件(此处伪分布式,还有单机模式和完全分布式模式)

  1. 修改/opt/homebrew/Cellar/hadoop/3.3.3/libexec/etc/hadoop/hadoop-env.sh【根据自己安装目录修改】,添加内容如下:
    JAVA_HOME的目录根据实际情况修改

    export JAVA_HOME=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
  2. 修改/opt/homebrew/Cellar/hadoop/3.3.3/libexec/etc/hadoop/core-site.xml,添加如下内容:

    <configuration>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/homebrew/Cellar/hadoop/hdfs/tmp</value>
    <description>A base for other temporary directories.</description>
    </property>
    <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
    </property>
    </configuration>

    PS:fs.default.name保存了NameNode的位置,HDFSMapReduce组件都需要用到它,这就是它出现在core-site.xml 文件中而不是 hdfs-site.xml文件中的原因。在该处配置HDFS的地址和端口号。

  3. 修改/opt/homebrew/Cellar/hadoop/3.3.3/libexec/etc/hadoop/mapred-site.xml,添加如下内容:

    <configuration>
    <!-- 变量mapred.job.tracker 保存了JobTracker的位置,因为只有MapReduce组件需要知道这个位置,所以它出现在mapred-site.xml文件中 -->
    <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9010</value>
    </property>
    <!--执行框架设置为hadoop yarn-->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

    <!--历史服务器配置-->
    <property>
    <name> mapreduce.jobhistory.address</name>
    <value>localhost:10200</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>localhost:19888</value>
    <description>历史服务器web界面</description>
    </property>
    </configuration>
  4. 修改/opt/homebrew/Cellar/hadoop/3.3.3/libexec/etc/hadoop/hdfs-site.xml,添加如下内容:

    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <!-- dfs.permissions 默认值 true;还有几种方法可以解决,此处省略 -->
    <property>
    <name>dfs.permissions</name>
    <value>false</value>
    </property>
    </configuration>

    变量dfs.replication指定了每个HDFS默认备份方式通常为3, 由于我们只有一台主机和一个伪分布式模式的DataNode,将此值修改为1。

运行haoop

跳转到hadoop目录/opt/homebrew/Cellar/hadoop/3.3.3【以实际目录为准】

启动hadoop之前需要格式化hadoop系统HDFS文件系统【已经格式化过的,就无需操作此步】

$ hadoop namenode -format

进入/opt/homebrew/Cellar/hadoop/3.3.3/sbin,执行

$ ./start-all.sh

或则分开启动:

$ ./start-dfs.sh
$ ./start-yarn.sh

jps命令查看java进程

构建远程连接的环境

解压好hadoop3.1.3文件夹,将lib的文件复制到maven项目中

导入依赖包


  1. 将lib下面的文件夹多次依次导入 import files in one by one
  2. 打开lib下面的common,导入common下的lib包
  3. 将远程hadoop启动,然后调用函数查看是否能连接成功