大数据:01 详解MacOS下Hadoop的安装与运行

目录

Hadoop的安装与运行

1. 笔者所用环境

2. 从安装到运行

2.1 设置SSH登录权限

2.2 安装JAVA环境

2.3 安装hadoop

2.4 进行伪分布式配置

2.5 启动伪分布式hadoop

2.6 处理WARN

2.7 运行Hadoop伪分布式实例


Hadoop的安装与运行

  Hadoop的安装大致分为5步:

  1. 创建hadoop用户(Mac系统就用自己的用户吧,这一步就省略了,免得引起不必要的麻烦)

  2. 设置SSH登录权限

  3. 安装JAVA环境

  4. 单机安装配置

  5. 伪分布式安装配置

1. 笔者所用环境

macOS 10.14.6

 

2. 从安装到运行

2.1 设置SSH登录权限

SSH是Secure Shell的缩写,是建立在应用层和传输层基础上的安全协议。配置SSH是为了实现无密码登录。在hadoop集群使用过程中,需要不断地访问各个名称节点(NameNode),NameNode上的相关进程要不断地访问其他节点上的守护进程(daemon)来进行相互的通信,为了让hadoop能够无障碍的登录其他机器,必须设置无密码的SSH登录方式。

首先,进入 设置->共享,勾选远程登录,并允许所有用户的访问。

然后,打开 终端,输入 ssh localhost,接下来输入密码,就可以ssh成功。

 

2.2 安装JAVA环境

Hadoop是一个用Java开发的开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。所以,我们需要准备好Java环境。

首先打开 终端,输入  java -version,查看当前Java版本,最近几年的mac应该都内置了java,只不过有可能版本会比较低,而低版本会影响hadoop的安装,如果版本实在过低就去Oracle官网下载安装最新的Java。

如果  java -version 执行后提示没有java,那么也去官网安装。

附上网址:甲骨文官网下载Java安装dmg

安装完成后,我们配置一下JAVA的环境变量。JDK都是安装在 /Library/Java/JavaVirtualMachines 这个目录下的,这个目录里可能会有多个JDK的版本,我们将合适(新)的版本写入环境变量即可。

在终端中输入 vim ~/.bash_profile,以配置Java路径。其中,“~”代表当前用户的根目录;“.bash_profile”文件中的bash全称Bourne-Again Shell,是对shell的一种拓展,顾名思义,“.bash_profile”即bash的配置文件。

用vim打开文件后,用英文输入法随便键入一个字母,以打开insert模式输入。然后我们使用export关键字修改环境变量,在空白行输入 export JAVA_HOME="/Library/Java/JavaVirtualMachines/你选择的jdk版本.jdk/Contents/Home“ 语句,注意路径到 Home 这一级就可以了。然后按下 ESC键进入vim的命令编辑模式,在英文输入法下,再输入 :wq 即可写入并退出。

然后,执行 source .bash_profile 使配置文件生效。再在终端中输入   java -version,就可以看到Java版本了。

注意,在终端中输入 which java ,可以看到回执信息显示Java位于 usr/bin/java ,其实它是一个替身文件,实际指向 /Library/Java/JavaVirtualMachines/jdk版本.jdk/Contents/Home/bin/java

 

2.3 安装hadoop

这里我们使用Homebrew包管理器来安装hadoop最新版。Homebrew的安装请参考官网,非常简单,终端中一句代码的事情,但是要注意网络环境、可能需要翻墙。

附上官网地址:Homebrew官网

安装完成后,我们在终端中输入 brew install hadoop 以安装最新的hadoop。注意,brew首次使用时会update自己,而brew源在国外,所以网络不行的朋友们可能会一直卡在这里,我们可以先替换成国内的源:先在终端中进入Homebrew目录 cd /usr/local/Homebrew ,接下来输入 git remote set-url origin http://mirrors.ustc.edu.cn/homebrew.git 以使用中科大源。

安装完成后,我们输入 hadoop version 查看版本,如有信息回执则代表安装成功。

在终端中输入 which hadoop ,可以看到hadoop的安装位置:/usr/local/bin/hadoop 。这时的hadoop默认为本地模式。

 

2.4 进行伪分布式配置

Hadoop有三种运行模式:

  1. 本地模式(默认模式):不需要启用单独进程,直接可以运行,测试和开发时使用。
  2. 伪分布式模式:等同于完全分布式,只有一个节点。
  3. 完全分布式模式:多个节点一起运行。

Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点即作为NameNode也作为DataNode,同时,读取的是HDFS中的文件。伪分布式需要修改一些配置文件。

前面说到终端中查询到的hadoop安装位置是 /usr/local/bin/hadoop ,细心的朋友可以看出这也是一个替身文件,我们右击它、选择显示原身,可以发现hadoop的实际安装路径为 /usr/local/Cellar/hadoop/3.2.1_1/bin/hadoop ,而配置文件位于 /usr/local/Cellar/hadoop/3.2.1_1/libexec/etc/hadoop ,我们要修改这个目录下的 core-site.xmlhdfs-site.xml

Hadoop的配置文件是xml格式的,每个配置以声明属性(property)的 name 和 value 的方式来实现。

首先,修改 core-site.xml 配置文件,我们进入实际上的hadoop目录,终端输入 cd  /usr/local/Cellar/hadoop/3.2.1_1/libexec/etc/hadoop ,再使用vim打开相关配置文件 vim core-site.xml

下图是原始的core-site.xml文件,在第19行和第20行之间插入我们的配置:

这里需要设置一个供hadoop存储临时文件用的tmp目录。否则hadoop会使用系统默认的临时目录来存储临时文件,这样退出系统时、会清空系统默认的临时目录,以致于我们下次登录hadoop时、还要重新执行系统初始化操作。

然后还需要设置一个hdfs路径的逻辑名称,这样以后就可以通过这个逻辑名称来访问分布式文件系统。这里我设置的逻辑名称是 hdfs://localhost:9000 ,端口号自己定义。可以在定义端口号前另外开启一个终端窗口,输入 lsof -i:xxx ,xxx就是你想定义的端口号,如果输入后执行发现有回执信息,就说明这个端口号已被占用,如果没有任何回执信息,说明这个端口空着,我们就可以使用这个端口号。

注意,使用4个空格作为1个缩进。

然后,修改 hdfs-site.xml 配置文件,还是在这个目录  /usr/local/Cellar/hadoop/3.2.1_1/libexec/etc/hadoop 下,使用vim打开相关配置文件 vim hdfs-site.xml

同样是在<configuration>和</configuration>之间键入我们的配置。首先,我们需要设置副本的数量,在分布式文件系统hdfs中、每个数据块都有好几个副本来保证冗余性,这样在某台机器宕机后其他的机器还可以正常使用,伪分布式只有一台机器一个节点、所以数量设置为1即可;然后,我们需要设置一个存放fsimage文件的本地磁盘目录和一个hdfs数据存放block的本地磁盘目录、block是hdfs文件存储的基本单位是block。最后,设置权限,使非root用户也能写文件到hdfs。

至此,伪分布式的配置已经全部完成。注意,此时我们并没有配置与 yarn 相关的文件。接下来我们将会直接用MapReduce跑一个例程。

 

2.5 启动伪分布式hadoop

首先,执行NameNode的格式化。在这个目录 /usr/local/Cellar/hadoop/3.2.1_1 下,终端输入 hdfs namenode -format 。然后出来一堆信息,只要在最后看见如下图所示的信息,就说明格式化成功。

然后,开启 NameNode 和 DataNode 守护进程。这次是在 /usr/local/Cellar/hadoop/3.2.1_1/libexec/sbin 这个目录下,直接输入 start-dfs.sh ,可以看到如下图所示的结果,回执信息中列出了namenodes、datanodes以及secondary namenodes。

还可通过在终端中输入 jps 命令来查看节点有没有启动。

此时,打开浏览器,访问 http://localhost:9870/ ,出现以下界面则说明启动成功了,在这个界面可以查看NameNode和 DataNode的信息。注意,hadoop 3.x版本的端口号是9870了,很多老教程说明的端口号是50070。

同样,在终端输入 stop-dfs.sh ,就可以关闭进程。

 

2.6 处理WARN

笔者在执行 start-dfs.sh 后,虽然namenodes、datanodes、secondary namenodes都正常启动了,但是下面有这样一行警告。

这是因为通过brew安装的hadoop在 /usr/local/Cellar/hadoop/3.2.1_1/libexec 目录下是没有 /lib/native 目录的,查阅网上资料后发现可以通过两种方式解决这个问题:1、下载hadoop的源码自己通过maven编译出lib/native;2、在网上找一些别人编译好的,直接放到hadoop中即可。这里我们选择在csdn上直接下载 lib/native 然后放到 /usr/local/Cellar/hadoop/3.2.1_1/libexec 目录下,之后重启即可。

附上 lib/native 地址:链接:https://pan.baidu.com/s/1JUmC5JZcVQapSzUzzZFQhA  密码:lvk0

 

2.7 运行Hadoop伪分布式实例

伪分布式Hadoop读取的是HDFS上的数据。

在浏览器上,http://localhost:9870/ 地址中,进入Utilities->Browse the file system,可以看到当前是没有namenode节点的。

首先,我们需要在HDFS中创建一个用户目录,方便我们的管理,进入到 /usr/local/Cellar/hadoop/3.2.1_1/bin 目录,这个目录是我hadoop的exec可执行文件目录,输入 hdfs dfs -mkdir -p /user/yang ,这里的-mkdir就是创建目录的意思,-p表示沿路径创建层级目录,后面的目录路径 /user/yang 由读者自己定义即可。而 hdfs dfs 表示当前命令是只适用于HDFS文件系统的,此外还有 hadoop fs 和 hadoop dfs 命令,前者适用于任何不同的文件系统、比如本地文件系统和HDFS文件系统,后者跟hadoop dfs的命令作用一样、也只能适用于HDFS文件系统。然后我们刷新浏览器,一个新的namenode节点已经建立了。

接着,我们在这个我们自定义的节点上跑一个MapReduce实例,我们继续在 /user/yang 下再建立两层目录,在终端输入 hdfs dfs -mkdir -p /user/yang/mapreduce_example/input ,然后进入 /usr/local/Cellar/hadoop/3.2.1_1/libexec/etc/hadoop 目录,将这个目录下面的xml文件都上传到我们刚才创建的input目录下,输入指令 hdfs dfs -put *.xml /user/yang/mapreduce_example/input ,其中-put命令的作用是将本地文件或目录上传到HDFS中的路径,-put后面的两个参数一个是要上传的文件/目录,另一个是HDFS中的路径。

上传之后,可以通过 hdfs dfs -ls /user/yang/mapreduce_example/input 指令查看文件列表,当然也可以直接在浏览器上查看。

接着再进入bin目录 cd /usr/local/Cellar/hadoop/3.2.1_1/bin ,执行  hadoop jar /usr/local/Cellar/hadoop/3.2.1_1/libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep /user/yang/mapreduce_example/input /user/yang/mapreduce_example/output 'dfs[a-z.]+' ,这是一个grep实例,这个指令的格式为 hadoop jar 实例的jar包的路径 grep 输入文件路径 输出文件路径 ,注意,这里的input文件夹下存放的是你想要处理的文件(输入给程序的文件),而output存放的是程序完成后产生的输出结果,在运行程序前,output文件夹不能存在

运行完成后,可以通过命令 hdfs dfs -cat /user/yang/mapreduce_example/output/* 来查看运行结果。

也可以在浏览器页面上查看,可以看到,output下的 part-r-00000 文件就是统计的结果。

也可以将运行结果取回到本地,使用-get命令 hadoop fs -get /user/yang/mapreduce_example/output /Users/yangxingda/Desktop/hdfs-local ,格式为 hadoop fs -get hdfs文件系统上的输出目录 你自己想放的本地目录

可以看到输出结果,满足dfs开头正则表达式的文本以及出现次数都已经列出来啦。

发布了16 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/yuecangjiao5151/article/details/104483441