最近接触大数据,所以当然有必要学习下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
2export 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
4Starting 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
(被读者私信说hadoop3版本以上的端口从50070移到9870了,望注意~)可以看到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
2export 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。
2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。
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.