3.配置hdfs-site.xml文件
修改hadoop中的hdfs的配置,配置的备份方式默认是3
<configuration> <property> <name>dfs.replication</name> <value>1</value> (备注:replication 是数据副本数量,默认为3,salve少于3台就会报错) </property> <configuration>
4.配置mapred-site.xml文件
修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口
<configuration> <property> <name>mapred.job.tracker</name> <value>http://192.168.1.2:9001</value> </property> </configuration>
5.配置masters文件
修改/usr/Hadoop/conf/masters文件,指定master机器的主机名
vi /usr/Hadoop/conf/masters 192.168.1.2(或者是master)
6.配置slaves文件
vi /usr/Hadoop/conf/slaves slave1 slave2
注意:单机启动的时候,conf/slaves中一定不能为空。没有其他机器,就指定自己。
集群环境下,slave机器上可以不配置slaves
7.在集群中的其他机器上重复此配置
建议在普通用户hadoop下通过scp复制到其他机器的对应目录下。
其中第6步是master机器上特有的
使用shell脚本:
for i in $(seq1 100); do echo slave$i; scp /usr/hadoop Hadoop@slave$i: /usr; scp /etc/profile Hadoop@slave$i:/etc; done
复制文件后可能会发现hadoop目录是root权限
chown -R hadoop:Hadoop Hadoop
授权给hadoop用户
Hadoop启动相关命令:
Hadoop namenode -format
在master机器上格式化namenode
只需要执行一次,如果要重新执行,一定要先删掉配置文件core-site.xml中配置的hadoop.tmp.dir对应路径下的文件
service iptables stop 关闭集群中所有机器防火墙
For iin (seq 1 100 ); Do ssh node$i “hostname; service iptable stop; chkconfig iptables off; service iptables status ”; done
start-all.sh 启动hadoop的所有服务,包含(hdfs和mapreduce的相关服务)
可以通过以下启动日志看出,首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,…。
启动 hadoop成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在Slave 中的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。
jps 查看进程
在master上的结果是:
jobTracker NameNode jps SecondaryNameNode
在slave上的结果是:
TaskTracker DataNode jps
Hadoop dfsadmin -report 查看hadoop集群的状态
Hadoop dfsadmin -safemode leave 关闭hdfs的安全模式
http:192.168.1.2:50030 访问mapreduce对应网页
http:192.168.1.2:50070 访问hdfs的对应网页
服务一直启动不了的终极解决办法:
1.删除集群中所有机器上的/usr/Hadoop/tmp文件
2.删除集群中所有机器上的pid文件。默认存放在/tmp目录下。这里我重新设置到了/bigdata/hadoop/pids,记得要授权给hadoop用户
3.重新执行stop-all.sh,把能关的服务先都关掉。
4.执行ps -ef | grep java| grep hadoop命令,查询是否还有hadoop相关进程才运行,如果有,执行kill -9 进程号 命令杀掉
5.重新格式化主机master
Hadoopnamenode -format
6.执行start-all.sh启动hadoop
7.发现没有报错,执行 Hadoopdfsadmin –report 命令查看hadoop运行状态
出现如图所示:
发现只启动了一个节点。可能是还存在安全模式。
8.执行hadoop dfsadmin –safemodeleave,关闭主机上的安全模式
9.再次执行hadoop dfsadmin –report
解决“no datanode to stop”问题?
原因:
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录。
第一种方法:
删除master上的tmp文件夹
rm -rf /usr/Hadoop/tmp
创建/usr/Hadoop/tmp文件夹
mkdir /usr/Hadoop/tmp
删除“/tmp”一下的“hadoop”开头文件
rm -rf /tmp/Hadoop*
重新格式化hadoop的master
Hadoop namenode -format
启动hadoop
start-all.sh
使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说Hadoop集群已经运行了一段时间。建议采用第二种。
第二种方法:(推荐)
1)修改每个Slave的namespaceID使其与Master的namespaceID一致。
或者
2)修改Master的namespaceID使其与Slave的namespaceID一致。
该"namespaceID"位于"/usr/hadoop/tmp/dfs/data/current/VERSION"文件中,前面蓝色的可能根据实际情况变化,但后面红色是不变的。
建议采用第二种,这样方便快捷,而且还能防止误删。
解决Exceeded MAX_FAILED_UNIQUE_FETCHES问题
出现错误如下:
Shuffle Error: ExceededMAX_FAILED_UNIQUE_FETCHES; bailing-out
程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
执行ulimit -a 查看文件限制数量
vim /etc/security/limits.conf
添加:
soft nofile 102400 soft nofile 409600 vim /etc/pam.d/login
添加:
session required /lib/security/pam_limits.so