『 Hadoop 』mac下Hadoop的安装与使用

最近接触大数据,所以当然有必要学习下Hadoop和Spark(概念请自行百google或者百度)。Spark是Apache目前最火的一款快速处理大数据的开源框架,当然Hadoop也是一款处理大数据的框架,只是Sparck青出于蓝而胜于蓝,在出生之后就得到迅猛发展,所以有学者说日后Spark可能会将Hadoop淘汰(不是我说的,是学者说的哦)。

至于Hadoop与Spark的关系,就像是svn与git的关系,后者都是较前者后几年出来且火于前者的一款工具。那么学习大数据的处理框架时就会有很多人有这样一个疑惑:既然Hadoop是先于Spark出来的,那么我要不要先学习Hadoop呢,还是跳过Hadoop直接从Spark学习起?

这样我们先看看git与svn的关系,svn是早于git好些年出生的版本控制工具,虽然二者性质都一样,但是学习git不一定要有svn的知识,所以Hadoop与Spark的关系也是这样,直接跳过Hadoop从Spark开始学习就好。我也是直接从Spark开始学起的,由于是新手,所以在前方给大家探路打算先学习一下Hadoop的搭建然后再去学习Spark相关技术,等学完后再来对本篇文章进行改正。关于Hadoop的概念介绍大家可以直接google或者百度,本篇文章只介绍mac环境下Hadoop的安装与使用(伪分布式Hadoop)。

这段话是我学习Spark后再来更新的:针对上述的疑惑,我现在可以直接告诉大家:学习大数据处理框架可以跳过Hadoop的学习直接从Spark学,但是你在搭建Spark环境的之前还非得先搭建Hadoop环境,因为下篇文章中介绍的安装Spark时会讲搭建Spark的环境是依赖于该Hadoop的,所以总的来说就是:Hadoop的各种API知识啥的不用学,但是在搭建Spark前你还非得先搭建Hadoop的环境。所以大家还是规规矩矩按照本篇文章的介绍老老实实的先搭建好Hadoop的环境吧,good luck!

1.安装Homebrew与Cask

关于Homebrew的一些命令我在这篇文章的Homeberw段落中有详细介绍mac下常用软件相关命令,当然本篇文章也会基于本篇文章的目的进行专一性的命令介绍。

打开Mac终端,安装OS X 不可或缺的套件管理器homebrew和homebrew cask:

1
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

执行过程需要输入root命令,当控制台出现:

1
2
3
.......
==> Installation successful!
.......

恭喜你,成功安装homebrew。接下来安装homebrew cask,在终端输入:

1
$ brew install caskroom/cask/brew-cask

根据提示进行安装。

2.安装Java

这一步搞java开发的人请自行跳过,因为我相信你们早就已经成功的安装了java(其实mac系统已自动为我们集成)并成功配置了环境变量。我电脑上安装的JDK版本为1.7.0_79,并完成环境变量的配置。

3.配置SSH

为了确保在远程管理Hadoop以及Hadoop节点用户共享时的安全性, Hadoop需要配置使用SSH协议。

首先在系统偏好设置->共享->打开远程登录服务->右侧选择允许所有用户访问。

首先在终端输入:ssh localhost,如果终端有返回Last login: Tue Dec 6 11:47:39 2016 from ::1,说明你之前成功配置了SSH keys,如果没有返回该内容,请按下述步骤新建一个配置:

在终端输入:$ ssh-keygen -t rsa

执行上述命令会在当前用户目录下的.ssh文件夹(是一个隐藏文件)中生成一个id_rsa文件, 然后继续执行如下命令:

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

用于授权你的公钥到本地可以避免每次登陆时都要询问你的密码,再次输入ssh localhost若返回Last login: Tue Dec 6 11:47:39 2016 from ::1,恭喜你,成功完成ssh的配置。

4.安装Hodoop

之前的三步骤都是安装Hadoop前的准备,有了前期的准备,安装Hadoop也简单了,执行命令brew install hadoop,等待系统安装,完成后Hadoop会被安装到/usr/local/Cellar/hadoop下。然后需要进行如下配置才能算成功安装Hadoop。

4.1配置Hadoop

1.首先更改Hadoop的配置文件信息,找到usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop目录下,打开hadoop-env.sh文件,找到其中一行:

1
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"

将其修改为:

1
2
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home" #改为自己JDK目录

2.然后要配置hdfs的地址和端口号,在usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop目录下,打开core-site.xml,会发现core-site.xml文件中的<configuration></configuration>标签中间的内容为空,需要我们自己加入如下配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Put site-specific property overrides in this file. -->
<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.default.name</name>
<value>hdfs://localhost:8020</value>
</property>
</configuration>

3.再然后就是设置map-reduce中jobtracker的地址和端口号,在目录usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop下,找到mapred-site.xml文件,在其内加上:

1
2
3
4
5
6
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:8021</value>
</property>
</configuration>

4.最后要设置hdfs的默认备份方式,默认值是3,在伪分布式系统中,需要修改为1。在目录usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop下,找到hdfs-site.xml文件,在其内加上:

1
2
3
4
5
6
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

5.在运行后台程序前, 必须格式化新安装的HDFS, 并通过创建存储目录和初始化元数据创新空的文件系统, (在上述目录下)执行命令:hdfs namenode -format

在控制台出现:

1
2
3
4
5
6
7
8
#生成类似下面的字符串:
...
#此处省略大部分信息
STARTUP_MSG: java = 1.7.0_79
************************************************************
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at Andrew-liudeMacBook-Pro.local/192.168.1.100
************************************************************/

这样我们便完成Hadoop的配置,可以启动Hadoop了。

4.2启动后台程序

/usr/local/Cellar/hadoop/2.7.3/sbin目录下执行如下命令:

1
2
./start-dfs.sh            //启动HDFS
./stop-dfs.sh //停止HDFS

执行启动/关闭HDFS的命令,控制台输出信息如下:

1
2
3
4
Starting namenodes on [localhost]
localhost: starting namenode, logging to /usr/local/Cellar/hadoop/2.7.3/libexec/logs/hadoop-tony-namenode-tonys-MacBook-Pro-2.local.out
localhost: starting datanode, logging to /usr/local/Cellar/hadoop/2.7.3/libexec/logs/hadoop-tony-datanode-tonys-MacBook-Pro-2.local.out
Starting secondary namenodes [0.0.0.0]

说明成功启动本地服务,此时在浏览器中打开Resource Manager输入如下网址:http://localhost:50070可以看到Hadoop的页面

还可以继续在命令行中(依旧在/usr/local/Cellar/hadoop/2.7.3/sbin目录下)执行如下启动/关闭脚本命令:

1
2
./start-yarn.sh        //启动yarn,一个MapReduce框架
./stop-yarn.sh //停止yarn

此时在浏览器中打开JobTracker: http://localhost:8088、Specific Node Information: http://localhost:8042可以分别看到如下界面:

或者直接运行:

1
2
./start-all.sh    ##启动Hadoop 
./stop-all.sh ##停止Hadoop

该命令可以同时开启/关闭上述三个本地服务。

但是每次执行上述命令都必须要进入到/usr/local/Cellar/hadoop/2.7.3/sbin目录,为了方便所以我们需要进行Hadoop环境变量配置。使用命令:sudo vim /etc/profile,在其中加入Hadoop环境变量的配置信息:

1
2
export HADOOP_HOME=/usr/local/Cellar/hadoop/2.7.3  #你Hadoop的安装路径
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

然后输入命令:source /etc/profile使该文件生效,这样以后你就可以在用户目录下直接使用上述start-dfs.sh命令来启动Hadoop了。

到此,尽情享受Hadoop吧。最后我来个Hadoop的小结。

5.小结

Hadoop是Apache基金会下的项目,它能够处理非常大的数据集在分布式计算环境,它可以运行在三种模式下:

  • 1.独立式:Hadoop运行所有的东西在无后台的单独的JVM中,这种模式适合在开发阶段测试与Debug MapReduce程序。
  • 2.伪分布式:Hadoop做为后台应用运行在本地机器,模拟小集群。
  • 3.全分布式:Hadoop做为后台应用运行真实的集群电脑中。

因为本人只有一台电脑,所以本篇文章介绍的就是在伪分布式模式下进行的Hadoop的安装介绍。到这里,你可能会有疑惑:独立式、伪分布式、全分布式三种模式又有什么区别呢? 呃…自行google吧,或者点击我已经给你找好的资料链接hadoop的单机、伪分布式、分布式区别,不要太爱我,因为我已经有人爱了。

疑惑:
很多人问我,在自己电脑上搭建好Hadoop环境以后,下一步该怎么利用Hadoop呢?亲,搭建好Hadoop后当然就可以利用Hadoop相关类对大数据进行处理了撒!

如何利用Hadoop相关类?首先你得有一款能写Hadoop代码的工具吧(当然你要是想装X的话也可以跳过IDE直接通过命令行编写Hadoop相关类操作)!我这里用的eclipse(别问我为什么我还没转IDEA,我是从IDEA转过来的好嘛。。。虽然我不情愿。。。大哭),所以就可以在eclipse中通过编写Hadoop的相关类,然后就能对大数据进行处理咯。例子可以进Apache Hadoop官网,里面有很多简单的Examples让你快速入门Hadoop编程哦(由于我赞成大家直接学习Spark,所以就不给学习Hadoop相关知识的资料链接给大家咯)。

当然我本意是要学习Spark的,然而由于是新手,等好不容易在电脑上搭建完Hadoop,才知道如今学习Spark的话是得重新在电脑上搭建Spark环境的(括号内容是我学习Spark后又跑过来更的:废话!使用Spark前不搭建Spark的话那如何使用Spark?所以肯定要先搭建Spark环境了才能使用Spark啊)。。。由于下篇讲mac环境下Spark的搭建的文章how to install Spark on Mac时需要我们先搭建Hadoop的环境(为什么?点击链接看下篇文章是如何介绍的吧),所以还是规规矩矩的按照本教程先完成Hadoop的搭建吧!

2018.3.19更

欢迎加入我的Java交流1群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!

2018.4.21更:如果群1无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!

6.联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

坚持原创技术分享,您的支持将鼓励我继续创作!