前一段时间看了几本hadoop和spark相关的书。没有实际编程总感觉理解不透彻。所以就在本地折腾了一下。把本地的环境搭建起来了。本文记录了我的详细操作步骤。希望能对读者有帮助。

前期准备工作

在搭建环境之前需要配置ssh localhost免密码登录。
操作步骤如下:
1 System Preference --> sharing --> Remote Login打开远程登录功能如下:

2 配置免密码登录。
打开Terminal终端:

1
2
ssh-keygen -t rsa ## 一路enter到底,不需要输入任何东西
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

3 验证免密码登录

1
ssh localhost ## 如果不需要输入任何密码之间进入则说明配置成功。效果如下:

hadoop的安装

说明:本教程安装的是伪分布式模式。这也是本地测试最常用的模式。

homebrew安装

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

利用homebrew安装hadoop

1
brew install hadoop

安装完成之后hadoop的目录为:
/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop

hadoop-env.sh文件修改

hadoop-env.sh的配置文件路径为:/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/hadoop-env.sh
将HADOOP_OPTS由

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

修改为

1
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="

如下图所示

core-site.xml文件修改

core-site.xml文件的路径为:/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/core-site.xml
添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
<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>

截图如下:

mapred-site.xml.template文件修改

mapred-site.xml文件的路径为:/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/mapred-site.xml.template
添加如下内容:

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

截图如下:

core-site.xml文件修改

hdfs-site.xml文件的路径为:/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/hdfs-site.xml
添加如下内容:

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

截图如下:

配置环境变量

1 hadoop加入环境变量。
打开 ~/.bash_profile文件。添加如下内容。

1
2
3
export HADOOP_HOME='/usr/local/Cellar/hadoop/2.8.0/'
export HADOOP=$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP

2 配置启动快捷命令。

1
2
alias hstart='/usr/local/Cellar/hadoop/2.8.0/sbin/start-dfs.sh;/usr/local/Cellar/hadoop/2.8.0/sbin/start-yarn.sh'
alias hstop="/usr/local/Cellar/hadoop/2.8.0/sbin/stop-yarn.sh;/usr/local/Cellar/hadoop/2.8.0/sbin/stop-dfs.sh"

3 保存并执行source ~/.bash_profile使配置文件生效。

初始化namenode

1
hdfs namenode -format

常用的管控页面

Warn解决

1 Unable to load native-hadoop library for your platform
一般在mac平台下面都会报如下错误。其实对使用没有任何影响。不解决也是可以的。

1
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

解决这个问题的方法就是:

1
2
3
1.1 下载源码
1.2 本地编译
1.3 替换lib文件

参考链接: https://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-warning

2 ls: ‘.’: No such file or directory
当执行hdfs dfs -ls的时候一般会报错

解决办法:
1 whoami

2 hdfs dfs -mkdir -p /user/guochenglai

关闭与启动

启动hadoop

1
hstart ## 经过前面的配置终端执行这个就好

关闭hadoop

1
hstop ## 经过前面的配置终端执行这个就好