hadoop学习笔记(2) 伪分布模式配置

前面介绍了linux下hadoop的安装和简单配置,主要是独立模式的配置,所谓独立模式是指不需要运行任何守护进程(daemon),所有程序都再单个JVM上执行,由于在独立模式下测试和调试MapReduce程序较为方便,因此该模式适合用在开发阶段。

这里主要记录了本人配置hadoop伪分布模式的过程。所谓伪分布模式是在单机上模拟Hadoop分布式,单机上的分布式并不是真正的分布式,而是使用java进程模拟分布式运行中的各类节点,包括:NameNode, DataNode, SecondaryNameNode, JobTracker, TaskTracker。其中,前三个概念是从分布式存储的角度来说的:集群节点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份;后两个概念是从分布式应用的角度来说的:集群中的节点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行任务执行。TaskTracker必须运行在DataNode上,这样便于数据的本地化计算,而JobTracker和NameNode则无需运行在同一台机器上。Hadoop本身是无法区分伪分布和分布式的,两种配置也很相似,唯一不同的是伪分布式是在单机上配置,DataNode和NameNode均是同一台机器。

java的安装和Hadoop的安装在前一节已经记录过了,这里略过不谈,下面主要记录伪分布模式的配置。

1.SSH无密码验证配置

在伪分布模式下运行时必须启动守护进程,而启动守护进程的前提是已经成功安装SSH。NameNode将使用SSH协议启动DataNode进程,伪分布模式下DataNode和NameNode均是本身,所以必须配置SSH localhost的无密码验证。

首先,确保SSH已经安装,且服务器正在运行。我机器上是默认安装了的,所以这里不谈。

然后,基于空口令创建一个新SSH密钥,以启用无密码登录:

$ ssh-keygen  -t  rsa  -P  ''  -f  ~/.ssh/id_rsa

$ cat  ~/.ssh/id_rsa.pub  >>  ~/.ssh/authorized_keys

用以下指令进行测试:

$ ssh  localhost

这里测试我不知道需不需要重启机器再测试,网上的资料没说要重启,但我是重启了机器才能够通过ssh无密码登录的。

2.修改Hadoop配置文件

Hadoop的各个组件均可利用XML文件进行配置。core-site.xml文件用于配置Common组件的属性,hdfs-site.xml文件用于配置HDFS属性,mapred-site.xml文件则用于配置MapReduce属性。这些配置文件都在conf子目录下。

1)hadoop-env.sh中配置Java环境

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0

(2)配置core-site.xml, hdfs-site.xmlmapred-site.xml

core-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://localhost:9000</value>
		<description>HDFS的URI,文件系统://namenode标识:端口号</description>
	</property>

	<property>
		<name>hadoop.tmp.dir</name>
		<value>/root/hadoop/hadoop-0.20.2/hadooptmp</value>  
		<description>namenode上本地的hadoop临时文件夹</description>
	</property>
</configuration>

hdfs-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
	<property> 
		<name>dfs.name.dir</name> 
		<value>/root/hadoop/hadoop-0.20.2/hdfs/name</value> 
		<description>namenode上存储hdfs名字空间元数据 </description> 
	</property> 

	<property> 
		<name>dfs.data.dir</name> 
		<value>/root/hadoop/hadoop-0.20.2/hdfs/data</value> 
		<description>datanode上数据块的物理存储位置</description> 
	</property> 

	<property>
		<name>dfs.replication</name>  
		<value>1</value>
		<description>副本个数,不配置默认是3,应小于datanode机器数量</description>
	</property>
</configuration>

mapred-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
	<property>
		<name>mapred.job.tracker</name>
		<value>localhost:9001</value>
		<description>jobtracker标识:端口号,不是URI</description>
	</property>

	<property> 
		<name>mapred.local.dir</name> 
		<value>/root/hadoop/hadoop-0.20.2/mapred/local</value> 
		<description>tasktracker上执行mapreduce程序时的本地目录</description> 
	</property> 

	<property> 
		<name>mapred.system.dir</name> 
		<value>/tmp/hadoop/mapred/system</value> 
		<description>这个是hdfs中的目录,存储执行mr程序时的共享文件</description> 
	</property> 
</configuration>

(3)配置masters文件,加入namenode的主机名

文件内容如下:

localhost

(4)配置slaves文件,加入所有datanode的主机名

文件内容如下:

localhost

3.格式化HDFS文件系统

在使用hadoop前,必须格式化一个全新的HDFS安装,通过创建存储目录和NameNode持久化数据结构的初始版本,格式化过程创建了一个空的文件系统。由于NameNode管理文件系统的元数据,而DataNode可以动态的加入或离开集群,因此这个格式化过程并不涉及DataNode。同理,用户也无需关注文件系统的规模。集群中DataNode的数量决定着文件系统的规模。DataNode可以在文件系统格式化之后的很长一段时间内按需增加。

格式化HDFS文件系统非常方便。只需键入如下命令:

$ hadoop  namenode  -format

该命令输出如下:

/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = localhost.localdomain/127.0.0.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
11/12/17 13:44:58 INFO namenode.FSNamesystem: fsOwner=root,root,bin,daemon,sys,adm,disk,wheel
11/12/17 13:44:58 INFO namenode.FSNamesystem: supergroup=supergroup
11/12/17 13:44:58 INFO namenode.FSNamesystem: isPermissionEnabled=true
11/12/17 13:44:58 INFO common.Storage: Image file of size 94 saved in 0 seconds.
11/12/17 13:44:58 INFO common.Storage: Storage directory /root/hadoop/hadoop-0.20.2/hdfs/name has been successfully formatted.
11/12/17 13:44:58 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
************************************************************/

4.Hadoop集群启动

为启动HDFS和MapReduce守护进程,输入一下命令:

$ start-dfs.sh

输出如下(可以看出分别启动了namenode, datanode, secondarynamenode,也给出了日志的存放位置):

starting namenode, logging to /root/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /root/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-datanode-localhost.localdomain.out
localhost: starting secondarynamenode, logging to /root/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-secondarynamenode-localhost.localdomain.out
$ start-mapred.sh

输出如下(可以看出分别启动了jobtracker, tasktracker):

starting jobtracker, logging to /root/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-jobtracker-localhost.localdomain.out
localhost: starting tasktracker, logging to /root/hadoop/hadoop-0.20.2/bin/../logs/hadoop-root-tasktracker-localhost.localdomain.out
也可以用下面一条命令代替上面两条命令:

$ start-all.sh

实际上这个脚本里面就是调用了上面的两条命令。

本地计算机将启动三个守护进程:一个namenode,一个辅助namenode和一个datanode。可以浏览logs目录中的日志文件来检查守护进程是否成功启动,或通过Web界面:在http://localhost:50030/查看jobtracker或在http://localhost:50070/查看namenode。此外,java的jps命令也能查看守护进程是否在运行:

$ jps

6129 SecondaryNameNode
6262 JobTracker
6559 Jps
6033 DataNode
6356 TaskTracker
5939 NameNode

终止守护进程也很容易,示例如下:

$ stop-dfs.sh

$ stop-mapred.sh

5.伪分布环境测试

在hadoop的根目录下有几个jar文件,其中hadoop-0.20.2-examples.jar就是我们需要的,它里面包含wordcount,功能是计算输入文本中单词的数量,咱们使用命令建立测试的文件:

(1)先在本地磁盘建立两个输入文件file01和file02:

$ echo "Hello World Bye World" > file01

$ echo "Hello Hadoop Goodbye Hadoop" > file02

(2)在hdfs中建立一个input目录:

$ hadoop  fs  -mkdir  input

(3)将file01和file02拷贝到hdfs中:

$ hadoop  fs  -copyFromLocal  /root/hadoop/file0*  input

(4)执行wordcount:

$ hadoop  jar  hadoop-0.20.2-examples.jar  wordcount  input  output

(5)完成之后,查看结果:

$ hadoop  fs  -cat  output/part-r-00000

执行结果为:

Bye	1
GoodBye	1
Hadoop	2
Hello	2
World	2

也可以进入http://localhost:50030/jobtracker.jsp查看结果:


ok,搞定,很想拿一些大的数据集玩一玩真正全分布模式,不过现在在外面帮导师做项目,机器不够,最少要三台,等回学校了,实验室搞几台机器玩玩。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值