hadoop 环境搭配

环境说明:CentOS 6.2 64位操作系统
两台机器,部署如下:
IP	主机名	用途
Ip1	fanbin01	namenode
Ip2	fanbin02	datanode

A.分别在各台机器/etc/hosts中增加:
Ip1 fanbin01
Ip2 fanbin02
B.分别在各台机器创建统一的用户
例如:
useradd fanbin
passwd fanbin
输入密码
=====================================

hadoop 安装


1. 安装jdk和hadoop
a. tar -xzvf hadoop-1.0.3.tar.gz(可选:ln -s hadoop-1.0.3 hadoop)
修改hadoop-env.sh 配置
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_25   #设置JAVA_HOME
   export HADOOP_HOME_WARN_SUPPRESS=1 #取消环境变量$HADOOP_HOME过时的警告
b. 配置环境变量
vi /etc/profile,分别添加以下内容(区分:/etc/profile文件、或者~/.bash_profile、或者~/.bashrc)
export  JAVA_HOME=/usr/java/1.6.0_25  
export  HADOOP_HOME=/home/fanbin/hadoop-1.0.3  
export  CLASSPATH=.:$JAVA_HOME/lib/tools.jar  
export  PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
unset i (文件中原有代码)
unset pathmunge  

c. 让环境变量生效
source /etc/profile

2. 机器之间ssh无密码登陆
a. 分别在机器fanbin01、fanbin02中分别产生密钥和公钥
例如:
1)ssh-keygen -t rsa  (产生一对公钥id_rsa.pub和密钥id_rsa,一路回车)
2)在/home/fanbin/.ssh目录下cat id_rsa.pub >> authorized_keys(将公钥追加到 authorized_keys中)
3)退到上级目录:chmod 700 -R .ssh
b. 对于机器fanbin01来说,将fanbin01的公钥发给fanbin02
例如:在fanbin0的/home/fanbin/.ssh目录下,scp id_rsa.pub fanbin@fanbin02:/home/fanbin/.ssh;
c. 对于机器fanbin02来说,将fanbin01的公钥追加到fanbin02的authorized_keys中;
   例如:在fanbin02的/home/fanbin/.ssh目录下,cat id_rsa.pub >> authorized_keys;
d. 对于机器fanbin02来说,将fanbin02的authorized_keys (这里面包含两台机器的公钥)覆盖fanbin01的authorized_keys.
   例如:scp authorized_key fanbin@ fanbin01:/home/fanbin/.ssh
总结:
例如机器A和机器B,首先分别将产生的公钥存入各自的authorized_keys中,然后将A的公钥追加到B的authorized_keys,最后将B的authorized_keys覆盖A的authorized_keys。从而使机器间的authorized_keys保持一致


3. 分别配置$HADOOP_HOME/conf中的对应文件
a. core-site.xml
<configuration>  
  	<property>  
  		<name>fs.default.name</name>  
  		<value>hdfs://fanbin01:9000</value>  
  	</property>  
  </configuration>

b. hdfs-site.xml
 
<configuration>
			<property>
	   			<name>dfs.name.dir</name>
	   			<value>/home/fanbin/hadoop/name</value>
    		</property>
			<property>
	  			 <name>dfs.data.dir</name>
	   			<value>/home/fanbin/hadoop/data</value>
			</property>  
  		<property>  
 			<name>dfs.replication</name>  
  			<value>1</value>  
  		</property>  
  	</configuration>


配置文件参数说明:
dfs.name.dir:NameNode上的本地文件路径,用于持久存储命名空间和日志信息文件等内容。该参数可以有多个值,值之间用逗号分割,表示文件映射关系信息将会被复制到每个目录中做冗余备份。
dfs.data.dir:DataNode上的本地文件路径,用于存放文件数据块。该参数可以有多个值,值之间用逗号分割,表示文件数据块将会被复制到每个目录中做冗余备份,通常配置为不同的设备
注意:这里的name、data目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题
dfs.replication:表示文件数据块要冗余备份的数量,默认值为3

c. mapred-site.xml (配置jobtracker,任务分配)
 
<configuration>  
  		<property>  
  			<name>mapred.job.tracker</name>  
  			<value>fanbin01:9001</value>  
  		</property>  
  	</configuration>



4. 格式化一个新的分布式文件系统
hadoop namenode –format


5. 启动集群
start-all.sh


6. 配置完成后,可以通过访问以下页面,判断是否配置成功。
http://fanbin01:50030


7. 运行WordCount的例子
  Hadoop  jar  WordCount.jar  /input   /output


8. 关闭集群
stop-all.sh


9. 启动集群常见问题:
1) hadoop集群启动遇到java.net.NoRouteToHostException: No route to host
方法一:防火墙没关,sudo /etc/init.d/iptables stop关闭防火墙
方法二:各台机器,在root权限下关闭防火墙 service iptables stop
2) Hadoop格式化HDFS报错java.net.UnknownHostException
需要保证/etc/sysconfig/network中的hostname 与 /etc/hosts中有正确的映射
可参考http://blog.csdn.net/shirdrn/article/details/6562292,按该方法改完如果没有生效,需要重启各台机器;
3) 主节点jobtracter日志中有hadoop problem cleaning system directory,50030界面状态一致为 初始化状态时,可按以下方法解决。
在主节点进行关闭,hadoop dfsadmin -safemode leave

猜你喜欢

转载自fanbina6.iteye.com/blog/1671433