基础环境的搭建参考:Hadoop学习准备工作 - Centos 7 系统安装与配置
一、 伪分布式
伪分布式是指:hadoop的守护进程以独立进程形式运行在单一节点上。
二、 Hadoop部署与配置
1、 hadoop部署
从官网获取 hadoop稳定版,安装到指定目录下:/home/root
tar -zxvf hadoop-3.1.0.tar.gz
等待解压缩完成后,vi /etc/profile 编辑环境变量 -->
export HADOOP_HOME=/home/root/hadoop-3.1.0
保存退出,执行 source /etc/profile使变量生效。
编辑 vi etc/hadoop/hadoop-env.sh -->
# JAVA_HOME
export JAVA_HOME=/home/root/jdk/jdk1.8.0_171
# USERS
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
保存退出后,执行 bin/hadoop 验证 hadoop 的可用性:
[root@skynet hadoop-3.1.0]# bin/hadoop version
Hadoop 3.1.0
Source code repository https://github.com/apache/hadoop -r 16b70619a24cdcf5d3b0fcf4b58ca77238ccbe6d
Compiled by centos on 2018-03-30T00:00Z
Compiled with protoc 2.5.0
From source with checksum 14182d20c972b3e2105580a1ad6990
This command was run using /home/root/hadoop-3.1.0/share/hadoop/common/hadoop-common-3.1.0.jar
2、 文件基础配置(TODO:更多配置待补充)
1) vi etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
2) vi etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3、 运行hadoop
1))hdfs文件系统格式化
$ bin/hdfs namenode -format
2) 启动namenode和datanode守护进程
$ sbin/start-dfs.sh
等待启动完成后,jps查看进程:
[root@skynet hadoop-3.1.0]# sbin/start-dfs.sh
Starting namenodes on [localhost]
上一次登录:四 4月 26 08:38:52 CST 2018从 192.168.9.1pts/1 上
Starting datanodes
上一次登录:四 4月 26 08:53:37 CST 2018pts/1 上
skynet: Warning: Permanently added 'skynet' (ECDSA) to the list of known hosts.
Starting secondary namenodes [skynet]
上一次登录:四 4月 26 08:53:40 CST 2018pts/1 上
[root@skynet hadoop-3.1.0]# jps
2512 Jps
2145 DataNode
2028 NameNode
2334 SecondaryNameNode
[root@skynet hadoop-3.1.0]#
此时可以访问namenode的web服务:http://localhost:9870/,查看namenode健康状况,可以观察到有一个存活的datanode节点。
4、 执行mapreduce任务
# 在分布式文件系统中创建用户目录(作用待了解)
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/root
# 拷贝数据到分布式文件系统中
$ bin/hdfs dfs -mkdir input
$ bin/hdfs dfs -put etc/hadoop/*.xml input
# 运行hadoop提供的mapreduce任务
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar grep /input output 'dfs[a-z.]+'
# 拷贝任务执行结果到本地文件系统中
$ bin/hdfs dfs -get output output
$ cat output/*
# 或直接从分布式文件系统中查看计算结果
# $ bin/hdfs dfs -cat output/*
计算结果:
[root@skynet hadoop-3.1.0]# bin/hdfs dfs -cat output/*
1 dfsadmin
1 dfs.replication
5、 YARN 资源管理器
在上述配置的基础上,可以启动YARN资源协调者(YARN待了解),在YARN上运行mapreduce任务。
文件配置 1:vi etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
文件配置 2:vi 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 daemon and NodeManager daemon:
$ sbin/start-yarn.sh
jps命令查看进程:
[root@skynet hadoop-3.1.0]# sbin/start-yarn.sh
Starting resourcemanager
上一次登录:四 4月 26 08:53:55 CST 2018pts/1 上
Starting nodemanagers
上一次登录:四 4月 26 09:20:27 CST 2018pts/1 上
[root@skynet hadoop-3.1.0]# jps
2145 DataNode
2965 NodeManager
3243 Jps
2028 NameNode
2829 ResourceManager
2334 SecondaryNameNode
访问ResourceManager的 web服务,从集群节点管理矩阵中能看到存活结点数为1。
确认yarn资管启动成功后,再次运行mapreduce程序
# 再次运行之前移除已生成的output,否则报错
$ bin/hdfs dfs -rm -r /output
# 运行hadoop提供的mapreduce任务
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar grep /input output 'dfs[a-z.]+'