上篇为体验hadoop采用了伪分布模式配置,本篇为继续深究hadoop来大体把握具体实用中的分布式模式。本文实用VMware建了3个虚拟机运行ubuntu。分别为

namenode whuqin1 192.168.64.143

datanode whuqin2 192.168.64.144

datanode whuqin3 192.168.64.145

1.SSH(Secure Shell)

Hadoop启动后,Namenode是通过SSH来启动和停止各节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。

1.a 每台机器都安装SSH 

sudo apt-get install ssh
1.b namenode产生密钥对
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
在/home/whuqin1/.ssh/下生成id_dsa(私钥)、id_dsa.pub(公钥)。

补:RSA是一种公钥加密算法,RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。DSA也是一种公钥加密算法,安全性和RSA相似。ssh-keygen t dsa或ssh-keygen -t rsa都是可以的。

将公钥复制到authorized_keys,准备分发

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
1.c 给datanode分发公钥
scp ~/.ssh/authorized_keys whuqin@192.168.64.144:/home/whuqin/.ssh/
scp ~/.ssh/authorized_keys whuqin@192.168.64.145:/home/whuqin/.ssh/
补: SCP(secure Copy),linux文件传送命令,是ssh种的命令,用于在两台机子间传送或获取文件。如上,@后为目的机子ip及目的路径,@前为目的机子上的用户名。

补:hadoop集群上的每台机子要有一个相同的用户名,用于运行hadoop,为以后hadoop的配置及运行提供方便。至于是不是必须的,本人还不确定。请指教。本人在学习中由于没有使用同一用户名,等最后启动hadoop时出现下情况。要输入whuqin用户在两台机子的密码...


在datanode上更改authorized_keys权限(保证该文件只对所有者有读写权限)

chmod 644 ~/.ssh/authorized_keys
1.d 修改sshd服务,去除密码认证(更改/etc/ssh/sshd_config)
PasswordAuthentication no
AuthorizedKeysFile      .ssh/authorized_keys
2.配置hadoop

2.a 安装JDK,解压hadoop,配置环境变量(/etc/profile)。

// /etc/profile配置
JAVA_HOME=/home/whuqin/Downloads/jdk1.6.0_26
export JRE_HOME=/home/whuqin/Downloads/jdk1.6.0_26/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export HADOOP_INSTALL=/home/whuqin/Downloads/hadoop-0.20.2
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$HADOOP_INSTALL/bin
//hadoop-env.sh添加java配置
export JAVA_HOME=/home/whuqin/Downloads/jdk1.6.0_26
2.b 修改hadoop的master/slaves

master指定namenode,slaves指定datanodes

//master
192.168.64.143
//slaves
192.168.64.144
192.168.64.145
2.c 修改core-site,hdfs-site.xml,mapred-site.xml,给出典型配置如下:

<!-- core-site.xml -->
<configuration>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://192.168.64.143</value>
		<final>true</final>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
    	<value>/home/whuqin/hadoopdir</value>
	</property>
</configuration>

<!-- hdfs-site.xml -->
<configuration>
<!-- 由于使用了hadoop.tmp.dir,一些属性使用了默认值 -->
</configuration>

<!-- mapred-site.xml -->
<configuration>
	<property>
		<name>mapred.job.tracker</name>
		<!-- jobtracker机子的ip和端口 -->
    	<value>jobtracker:8021</value>
		<final>true</final>
	</property>
	<property>
		<name>mapred.tasktracker.map.tasks.maximum</name>
    	<value>3</value>
		<final>true</final>
	</property>
	<property>
		<name>mapred.tasktracker.reduce.tasks.maximum</name>
    	<value>3</value>
		<final>true</final>
	</property>
		<property>
		<name>mapred.child.java.opts</name>
    	<value>-Xmx400m</value>
		<final>true</final>
	</property>
</configuration>

补充:

core-site.xml部分属性解析:

fs.default.name, NameNode的URI, hdfs://主机ip:port, 决定了名称节点的RPC服务器地址和端口,默认端口为8020

hadoop.tmp.dir 用于辅助hdfs-site和mapred-site.xml中一些dir属性的默认设置

hdfs-site.xml部分属性解析:

dfs.name.dir,NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。默认值是${hadoop.tmp.dir}/dfs/name

dfs.data.dir,DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。默认${hadoop.tmp.dir}/dfs/name

fs.checkpoint.dir,第二名称节点用来存储检查点的路径,逗号分隔。默认${hadoop.tmp.dir}/dfs/namesecondary

mapred-site.xml部分属性解析:

mapred.job.tracker,JobTracker的主机(或者IP)和端口

mapred.system.dirMap/Reduce框架存储系统文件的HDFS路径,须从服务器和客户端上均可访问。默认${hadoop.tmp.dir}/mapred/system,但不是本地的

mapred.local.dir,本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。多路径有助于利用磁盘i/o。默认${hadoop.tmp.dir}/mapred/local

mapred.tasktracker.{map|reduce}.tasks.maximum 某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。 默认为2(2个map和2个reduce),可依据硬件情况更改。

在利用haoop.tmp.dir,一些属性的默认值代表的路径如下:

3.部署hadoop

保证datanode的jdk安装路径一致、有一个相同用户名的情况下,可以将namenode上的hadoop直接传送到datanode上!

scp -r /home/whuqin/hadoop-0.20.2 whuqin@192.168.64.144:/home/whuqin/
scp -r /home/whuqin/hadoop-0.20.2 whuqin@192.168.64.145:/home/whuqin/
4.启动hadoop

hadoop的启动都是在namenode上操作的。

//格式化
hadoop namenode -format
//启动namenode/datanode/jobtracker/tasktracker/secondarynode
start-all.sh
当然也可以根据需要只启动部分进程

start-mapred.sh/stop-mapred.sh、start-dfs.sh/stop-dfs.sh等。它们都会参考slaves文件,对slave上的datanode,tasktracker进程进行操作。

补:namenode/datanode是从hdfs角度说的,jobtracker/tasktracker是从map/reduce角度说的。namenode和jobtracker可以不是同一台机子。

5.测试

hadoop fs -ls等命令使用下。
其他相关参考:http://blog.csdn.net/whuqin/article/details/6623534http://www.cnblogs.com/wayne1017/archive/2007/03/20/678724.html《hadoop权威指南》
望指正!

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐