【版权声明:本指南为厦门大学林子雨编著的《大数据技术原理与应用》教材配套学习资料,版权所有,转载请注明出处,请勿用于商业用途】
本指南详细指引读者在macOS系统环境下安装Hadoop。请务必仔细阅读完厦门大学林子雨编著的《大数据技术原理与应用》第2章节,再结合本指南进行学习。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算.本教程将指导如何用苹果macOS系统安装Hadoop。
安装Homebrew
习惯使用ubuntu的同学,一定很喜欢ubuntu系统apt-get的软件安装方式。macOS上也有类似这样的包管理器,利用Homebrew即可。
Homebrew的官方网站
安装Homebrew的方法:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
需要注意的是:
Homebrew安装的软件都集中在/usr/local/Cellar里面
想了解更多有关Homebrew的知识,访问macOS 安装Homebrew和常用命令
ssh登录本地
ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
这样就可以生成ssh公钥,接下来进行测试登录本地是否成功
ssh localhost
登录成功显示结果如下:
Last login: Mon Feb 29 18:29:55 2016 from ::1
安装Hadoop
输入以下代码,自动安装hadoop
brew install hadoop
安装过程会提示重要的信息,如下:
$JAVA_HOME has been set to be the output of:
/usr/libexec/java_home
在macOS中,我们可以终端输入:/usr/libexec/java_home来获取JAVA_HOME的路径
Hadoop的安装需要配置JAVA_HOME,用 brew安装,就已经帮我们配置好了。
测试Hadoop是否安装成功
Hadoop有三种安装模式:单机模式,伪分布式模式,分布式模式
分布式模式需要在多台电脑上面测试,这里只测试前面两种,即单机模式和伪分布式模式
测试单机模式
这里使用Hadoop附带的示例来检验单机模式是否运行正常。
通过Homebrew安装的Hadoop,附带的示例在路径/usr/local/Cellar/hadoop/2.7.1/libexec/share/hadoop/mapreduce
通过Homebrew默认会安装软件的最新stable版本,所以读者安装的Hadoop版本会大于或等于2.7.1版本
单词计数wordcount是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版”Hello World”,单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数.
- 创建input目录和output目录
input作为输入目录,output目录作为输出目录
cd /usr/local/Cellar/hadoop/2.7.1/
mkdir input
mkdir output
- 在input文件夹中创建两个测试文件file1.txt和file2.txt
cd input
echo 'hello world' > file1.txt
echo 'hello hadoop' > file2.txt
- 运行示例检测单机模式
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount ./input ./output
- 查看结果
more output/part-r-00000
显示结果如下:
- hadoop 1
- hello 2
- world 1
测试伪分布式模式
测试为分布模式前,需要修改相关的配置文件,把之前的单机模式修改成伪分布式模式
- 修改Core-site.xml
文件地址:/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/core-site.xml
把原来的<configuration> </configuration>
修改为
<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:9000</value> </property> </configuration>
fs.default.name 保存了NameNode的位置,HDFS和MapReduce组件都需要用到它,这就是它出现在core-site.xml 文件中而不是 hdfs-site.xml文件中的原因
-
修改mapred-site.xml.template
文件地址:/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/mapred-site.xml.template
把原来的<configuration> </configuration>
修改为
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9010</value> </property> </configuration>
变量mapred.job.tracker 保存了JobTracker的位置,因为只有MapReduce组件需要知道这个位置,所以它出现在mapred-site.xml文件中。
-
修改hdfs-site.xml
文件地址:/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop/hdfs-site.xml
把原来的<configuration> </configuration>
修改为
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
变量dfs.replication指定了每个HDFS数据库的复制次数。 通常为3, 由于我们只有一台主机和一个伪分布式模式的DataNode,将此值修改为1。
-
运行
hadoop namenode -format ./sbin/start-all.sh
运行成功后,用浏览器访问:Hdfs的Web界面,可以查看相关的信息
-
用示例测试
- 估计圆周率PI的值
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar pi 2 5
运行结果如下:
Estimated value of Pi is 3.60000000000000000000
- wordcount统计数据
把原来用于单机模式的测试input文件上传到hdfs中hadoop fs -put ./input input
运行wordcount
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount input output
查看output的结果文件
hadoop fs -tail output/part-r-00000
得到的结果是:
- hadoop 1
- hello 2
- world 1
- 估计圆周率PI的值
- 关闭伪分布式
./sbin/stop-all.sh