本文学自 http://dblab.xmu.edu.cn/blog/820-2/
并对其中一些讲得不清楚,以及版本变化(从2.7到3.1)等问题,做出了修正
首先装Homebrew这个软件管理工具,具体过程在上一篇文章里
这里插一个链接
https://blog.csdn.net/Xurui_Luo/article/details/84191947
然后,用ssh登陆本地
ssh-keygen -t rsa -P "" //这一行运行完后,再出现最后带冒号时按Enter
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
这样就可以生成ssh公钥,接下来进行测试登录本地是否成功
ssh localhost
若登陆成功,则显示结果如下
Last login: Mon Feb 29 18:29:55 2016 from ::1
但是我的一开始是这样:
ssh: connect to host localhost port 22: Connection refused
经过百度,最终找到问题是在系统偏好设置中:
解决方法是选择系统偏好设置->选择共享->点击远程登录
这样再运行
ssh localhost
结果就出来了
随后,进行安装
brew install hadoop
随后,我并没有成功,而是得到反馈:
hadoop: Java 1.8+ is required to install this formula.
JavaRequirement unsatisfied!
You can install with Homebrew Cask:
brew cask install java
You can download from:
https://www.oracle.com/technetwork/java/javase/downloads/index.html
Error: An unsatisfied requirement failed this build.
根据提示,我是需要安装Java
因此
brew cask install java
这里吐槽一下速度,就一百多Mb的东西,硬是安装了很久很久,如果有人觉得慢可以直接在Java官网上下载最新版本,会快很多。这里发一下链接:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Java装好后,就终于可以安装Hadoop啦
brew install hadoop
这次是七百多Mb的东西,很快下载好,大功告成!
测试Hadoop是否安装成功:
1.测试单机模式
单词计数wordcount是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版”Hello World”,单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数
创建input目录和output目录
input作为输入目录,output目录作为输出目录
cd /usr/local/Cellar/hadoop/3.1.1/
mkdir input
mkdir output
在input文件夹中创建两个测试文件file1.txt和file2.txt
cd input
echo 'hello world' > file1.txt
echo 'hello hadoop' > file2.txt
运行示例检测单机模式(注意目录不要随意变,在3.1.1下)
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount ./input ./output
显示结果(注意目录不要随意变,在3.1.1下)
more output/part-r-00000
结果如下:
2.测试伪分布式模式
测试为分布模式前,需要修改相关的配置文件,把之前的单机模式修改成伪分布式模式
修改Core-site.xml
文件地址:/usr/local/Cellar/hadoop/3.1.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
文件地址:/usr/local/Cellar/hadoop/3.1.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/3.1.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
成功后,访问 http://localhost:9870 打开Hdfs的Web界面,可以查看相关的信息
值得注意的是,在3.0以后的版本中,http://localhost:50070 变为 http://localhost:9870 用原先的地址会报错。(取自 https://stackoverflow.com/questions/19641326/http-localhost50070-does-not-work-hadoop0 )
用示例测试
1.估计圆周率PI的值
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar pi 2 5
运行结果如下:
Estimated value of Pi is 3.60000000000000000000
2.wordcount统计数据
把原来用于单机模式的测试input文件上传到hdfs中**(目录仍然是在 …/3.1.1/下,千万不要乱动)**
hadoop fs -put ./input input
运行wordcount**(目录仍然是在 …/3.1.1/下,千万不要乱动)**
hadoop jar ./libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount input output
查看output的结果文件**(目录仍然是在 …/3.1.1/下,千万不要乱动)**
hadoop fs -tail output/part-r-00000
得到的结果是:
最后关闭伪分布式
./sbin/stop-all.sh
2019.4 补充
过一段时间没碰,再使用,出了以下问题:
Call From red-2.local/192.168.1.100 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
惊了
在网上各种找问题之后,还是 大力出奇迹
命令行输入
hadoop namenode -format
都好了