Hadoop是一个开源、高可靠、可扩展的分布式计算框架。它主要包含两个框架:一个是分布式存储框架HDFS,一个分布式计算框架MapReduce,学习Hadoop也主要围绕着这两块问题来。
Hadoop的环境部署,不是太简单。它是基于JVM环境搭建的,如果我们需要多台机器协作,还需要实现SSH免密登录。
官方教程已经很详细地介绍了如何配置Hadoop单机环境,或者配置伪分布式环境,或者是集群配置Hadoop。这里我就参考Hadoop官方教程,简单介绍下Hadoop的伪分布式配置。
可以把伪分布式看作是只有一个节点的集群,在这个集群中,这个节点既是Master也是Slave,既是NameNode也是DataNode,既是JobTracker也是TaskTracker。
首先我们需要搭建一个Linux环境,可以是Ubuntu也可以是CentOS。分为三块:用户配置,环境变量配置,SSH配置。
- 用户配置
可以为启动Hadoop单独建立用户,赋予sudo权限。
- 环境变量配置
我们需要配置JDK环境。
我们还需要配置Hadoop环境。
- SSH配置
这里主要是实现SSH免密码登录。在此之前需要确认系统支持SSH。
其次我们可以搭建Hadoop伪分布式环境。分为五块:配置文件系统,格式化文件系统,启动NameNode进程和Datanode进程,执行MapReduce任务,关闭NameNode进程和Datanode进程。
- 配置文件系统
简单来说,主要是修改core-site.xml和hdfs-site.xml这两个文件。
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>
- 格式化文件系统
bin/hdfs namenode -format
- 启动NameNode进程和Datanode进程
sbin/start-dfs.sh
启动NameNode进程和Datanode进程之后,通过访问网址: http://localhost:50070/, 可以查看NameNode和Datanode信息,还可以在线查看HDFS中的文件。如图所示。
- 执行MapReduce任务
执行HDFS输入input和输出output,伪分布式读取的是HDFS中的文件。比如运行官方demo中的grep:
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
bin/hdfs dfs -ls input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
bin/hdfs dfs -cat output/*
输出结果:
1 dfsadmin
- 关闭NameNode进程和Datanode进程
sbin/stop-dfs.sh
每次运行完Hadoop需要关闭文件系统。Hadoop默认不会覆盖output输出文件,因此如果再次运行需要提前手动删除。
从上面可以看出,如果不使用Hadoop,直接运行jar包,可以采用java -jar jar包名 输入 输出的形式,而Hadoop则仅仅简单把java变成了hadoop,成为了hadoop -jar jar包名 输入 输出。对比Java和Hadoop来运行jar包的方式,不难看出,hadoop对于服务器来说是一个可扩展的弹性框架,深刻诠释了“众人拾柴火焰高”的哲学。
转载请注明:宁哥的小站 » Hadoop伪分布式环境配置