目录
1. 目的
详细描述如何搭建和配置一个单节点的Hadoop,以便新手读者能够借此避开搭建Hadoop集群,从而可以很便捷的去直接学习和使用Hadoop的MapReduce和HDFS。
2. 搭建单节点的Hadoop
2.1 支持的系统
GNU/Linux无论作为开发还是生产环境,均是被支持的,事实上,Hadoop已经在2000节点的GNU/Linux集群上展现过它的可用性了。
Windows同样也是被支持的系统。
2.2 必备的软件
2.2.1 Java
Hadoop3.3及以上版本支持Java8和Java11(仅运行时),编译时一定要使用Java8,不支持使用Java11进行编译,3.0.x-3.2.x目前仅支持Java8,2.7.x-2.10.x既支持Java7也支持Java8。
目前Hadoop社区使用OpenJDK作为创建/测试/发布环境,所以是社区建议使用的JDK环境。此外,其它jdk/jvm也是可以正常使用的。
2.2.2 ssh
为了使hadoop的启停脚本能够正常使用,集群节点需安装ssh,同时需启动sshd服务,以便Hadoop脚本能够管理远程的hadoop守护进程。此外,为了更好地对ssh资源进行管理,官网还建议同时安装pdsh服务。
3. 安装
3.1 下载安装包
① 官网地址:http://www.apache.org/dyn/closer.cgi/hadoop/common/
② 选择镜像站:官网通常会推荐国内用户到清华大学的镜像站进行下载
③ 选择版本和镜像进行下载,如:我这里选择了2.10.1版本,下载安装包hadoop-2.10.1.tar.gz,当然,也可以下载源码文件hadoop-2.10.1-src.tar.gz,解压后导入idea自行编译
3.2 上传、解压和基本配置
① 将下载的hadoop-2.10.1.tar.gz压缩包上传到Linux虚拟机或服务器,解压到目录:tar -zxvf hadoop-2.10.1.tar.gz -C /userfolder
② 编辑$HADOOP_HOME/etc/hadoop/hadoop-env.sh,添加JAVA_HOME,如:
③ 在$HADOOP_HOME目录下尝试执行bin/hadoop
这里将打印出hadoop脚本的使用手册。
现在,我们可以以下面支持的三种模式之一启动我们的Hadoop集群:
Local(Standalone) Mode 即本地(独立)模式
Pseudo-Distributed Mode 即伪分布式模式
Fully-Distributed Mode 即全分布式模式
下面将分别对这三种模式进行说明。
4. 不同模式的配置和启动
说明:以下所有命令均在Hadoop的主目录下执行,如果配置了$HADOOP_HOME,则脚本命令均可成功执行,但部分路径参数使用的是本地相对路径,如不切换目录至hadoop主目录,运行时会报错。
4.1 本地(独立)模式
默认情况下,Hadoop被配置为以非分布式模式运行,此时它将作为单个Java进程。这种模式对调试是非常友好的。
例如,下面的命令可以尝试运行mapreduce示例程序:
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep input output 'dfs[a-z.]+'
cat output/*
输出结果:
4.2 伪分布式模式
4.2.1 运行
① 配置etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
② 配置etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
③ 配置ssh免密登录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
④ 启动
1) 格式化文件系统
bin/hdfs namenode -format
2) 启动NameNode和DataNode
sbin/start-dfs.sh
3) 浏览器访问NameNode的web接口,默认在9870端口(老版本为50070),即:http://localhost:9870/
4) 在HDFS上创建执行上述MapReduce作业所需的目录
# 在hdfs上创建目录
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/<username>
# 复制本地文件到hdfs指定目录
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
5) 执行提供的样例作业
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep input output 'dfs[a-z.]+'
6) 检查输出
bin/hdfs dfs -cat output/*
结果同上。
7) 关闭服务
sbin/stop-dfs.sh
4.2.2 单节点YARN
伪分布式模式下,通过设置一些参数和启动ResourceManager, NodeManager,我们可以在YARN上运行MapReduce作业,具体操作如下:
① 修改YARN的配置
1) etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
2) etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
② 启动ResourceManager和NodeManager
sbin/start-yarn.sh
③浏览器访问ResourceManager的web接口,默认在8088端口,即:http://localhost:8088/
④ 运行上述作业,并在浏览器观察对应记录
⑤ 关闭YARN
sbin/stop-yarn.sh
4.3 全分布式模式
见下一篇。