大数据处理框架Hadoop
Hadoop 生态系统已经变得非常成熟和完善,包括Zookeeper、HDFS、MapReduce、HBase、Hive、Pig等子项目,其中HDFS和MapReduce是Hadoop的两大核心组件。
Hadoop伪分布式安装(Pseudo-Distributed Operation)
CentOS 7 单机安装最新版Hadoop v3.1.2以及配置和简单测试
介绍了单机模式的安装。接下来,本文演示如何在Linux环境下,进行伪分布式模式的安装,并运行Hadoop自带的WordCount实例检测是否运行正常。
Hadoop 支持如下三种模式的安装。
其中,伪分布式安装是指在一台机器上模拟一个小的集群,但是集群中只有一个节点。此时每个 Hadoop 守护进程是一个独立的 Java 进程。
当Hadoop 应用于集群时,不论是伪分布式或者真正的分布式,都需要通过配置文件对各组件的协同工作进行设置。
Hadoop 伪分布式的特点:
具备Hadoop所有的功能,在单机模拟Hadoop分布式环境。
把nameNode,dataNode 安装在同一个节点上,还需要装一个MapReduce的运行环境yarn。需要配置如下内容:
(1)HDFS:主节点:nameNode;数据节点:dataNode;
(2)yarn:是一个容器,用来运行MapReduce程序;类似jsp需要运行在tomcat容器一样。yarn也有两部分:
主节点:ReourceManager
从节点:NodeManager
修改配置文件
(1)etc/hadoop/core-site.xml - Hadoop core的配置项
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
其中指定HDFS 的地址和端口号,端口号按照官方文档设置为9000即可。
(2)etc/hadoop/hdfs-site.xml - Hadoop 守护进程的配置项
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
因为这里采用伪分布式,集群中只有一个节点,因此副本数量replication 的值也只能设置为1。
配置免密码的 ssh
现在,检查你是否可以 ssh 登录到本机而无需密码:
$ ssh localhost
如果无法免密登录,请执行如下命令:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
执行 Execution
执行后续命令以本地运行一个 MapReduce 作业。
(1)格式化文件系统:
$ bin/hdfs namenode -format
(2)启动 NameNode 守护进程和 DataNode 守护进程:
$ sbin/start-dfs.sh
Hadoop 守护进程的日志输出目录是 $HADOOP_LOG_DIR,其默认值是 $HADOOP_HOME/logs。
如果输出如下错误信息:
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解决办法是在etc/hadoop/hadoop-env.sh 配置文件最后,添加如下信息:
# 添加如下环境变量
export HDFS_DATANODE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
再次运行 sbin/start-dfs.sh,结果如下:
(3)浏览 NameNode 的网页,地址默认是:
NameNode - http://localhost:9870/
注意:Hadoop3 HDFS web端口改为9870(Hadoop 3.1.0版本后,50070端口 -> 9870端口了)。
如下是访问HDFS 文件系统的web页面,其中IP 地址为名称节点的IP。
通过该Web 界面,可以查看当前文件系统中各个节点的分布信息,浏览名称节点(namenode)上的存储、登录日志等等。
还可以通过Web 界面查看目录,如下图所示。
(4)创建运行 MapReduce 作业必需的 HDFS 目录:
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
(5)复制输入文件到分布式文件系统中:
$ bin/hdfs dfs -mkdir input
$ bin/hdfs dfs -put etc/hadoop/*.xml input
如下是创建好的HFDS 目录,可以通过如下命令进行查询。
bin/hdfs dfs -ls
bin/hdfs dfs -ls /
(6)运行提供的示例程序:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar grep input output 'dfs[a-z.]+'
(7)从分布式文件系统中复制文件到本地文件系统,验证输出的结果:
$ bin/hdfs dfs -get output output
$ cat output/*
或者直接查看分布式文件系统的输出文件:
$ bin/hdfs dfs -cat output/*
(8)完成以上步骤后,执行一下命令来停止所有的守护进程:
$ sbin/stop-dfs.sh
单机运行 Yarn
在伪分布式模式中,只需设定很少的参数,你就可以用 Yarn 运行一个 MapReduce 作业,并激活 ResourceManager 守护进程和 NodeManager 守护进程。
后续指令假定上述指令的第 1 ~ 4 步已被执行。
(1)设置如下配置参数:etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
(2)启动 ResourceManager 守护进程和 NodeManager 守护进程:
$ sbin/start-yarn.sh
(3)浏览 ResourceManager 的网页,地址默认是:
ResourceManager - http://localhost:8088/
访问群集的所有应用程序的默认端口号为8088。
(4)运行一个 MapReduce 作业。
(5)完成以上步骤后,执行一下命令来停止所有的守护进程:
$ sbin/stop-yarn.sh