一、准备工作
1、打通两台机器的ssh信任关系
2、关闭防火墙sudo /sbin/service iptables stop
3、禁用ipv6,即注释掉
::1 localhost6.localdomain6 localhost6
这行
4、假设机器A(IP为xx.xx.xx.237,hostname为s237)为master ,机器B(IP为xx.xx.xx.236,hostname为s236)为slave
5、在A上新建目录~/hadoop_hbase/
下载相应版本的hadoop
<pre>wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.5.2/hadoop-2.5.2.tar.gz</pre>
下载相应版本的java,这里用的是1.7
解压
6、改.bashrc
- JAVA_HOME=~/hadoop_hbase/jdk1.7.0_51
- HADOOP_HOME=~/hadoop_hbase//hadoop
- PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- export JAVA_HOME HADOOP_HOME PATH
source .bashrc 使环境变量生效
二、配置
1、配置${HADOOP_HOME}/etc/hadoop/core-site.xml
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://s237:9000</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/var/hadoop</value>
- </property>
- </configuration>
- <configuration>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>s237:50090</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- </configuration>
- dfs.namenode.secondary.http-address //指定secondary namenode结点,若不指定,在使用start-dfs.sh启动时,当前节点将自动成为secondary namenode
- dfs.replication //每一个block的复制份数,默认是3,如果集群datanode结点数量小于3应将该值设置小于或等于datanode的结点数量
- dfs.namenode.name.dir //存放namenode相关数据的文件夹
- dfs.datanode.data.dir //存放datanade相关数据的文件夹
- dfs.namenode.checkpoint.dir //存放secondary namenode相关数据的文件夹
3、配置${HADOOP_HOME}/etc/hadoop/mapred-site.xml
在${HADOOP_HOME}/etc/hadoop下拷贝一份mapred-site.xml.template命名为mapred-site.xml,添加如下内容:
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- </configuration>
- <configuration>
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>s237</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- </configuration>
以下单独启动某项服务的命令:
启动namenode
启动secondarynamenode
hadoop-daemon.sh start secondarynamenode
启动datanode
start-yarn.sh
该命令可以任意结点上执行。其slaves结点与hdfs一样,读取的也是 ${HADOOP_HOME}/etc/hadoop/slaves文件。
启动resourcemanager
yarn-daemon.sh start resourcemanager
注意
上述hadoop的配置中,用ip还是host,甚至是自己在/etc/hosts中自定义的host,都是可以的,没问题,但是,如果不用机器本身的hostname,那么在hbase配置中就会出现问题,所以这里最好都用机器名,有/etc/hosts中最好也绑定一下ip与机器名的关系,注意的是,要绑一定绑的是ip地址,不能绑127.0..0.1
即:10.101.11.11 myserver.cm6 不能写成127.0.0.1 myserver.cm6
常见问题
一、hdfs的SecondaryNameNode的日志报Inconsistent checkpoint fields异常
此参数最好在安装时进行配置
1
2
3
4
|
<
property
>
<
name
>hadoop.tmp.dir</
name
>
<
value
>/data/hadoop/tmp</
value
>
</
property
>
|
从日志中可以看出,原因是因为datanode的clusterID 和 namenode的clusterID 不匹配。
打开hdfs-site.xml里配置的datanode和namenode对应的目录,分别打开current文件夹里的VERSION,可以看到clusterID项正如日志里记录的一样,确实不一致,修改datanode里VERSION文件的clusterID 与namenode里的一致,再重新启动dfs(执行start-dfs.sh)再执行jps命令可以看到datanode已正常启动。
出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。
三、hadoop进入了安全模式
因磁盘空间不足,内存不足,系统掉电等其他原因导致dataNode datablock丢失,出现如下类似日志:
The number of live datanodes 3 has reached the minimum number 0.
Safe mode will be turned off automatically once the thresholds have been reached.
Caused by: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled.
Name node is in safe mode.
The reported blocks 632758 needs additional 5114 blocks to reach the threshold 0.9990
of total blocks 638510.
The number of live datanodes 3 has reached the minimum number 0.
Safe mode will be turned off automatically once the thresholds have been reached.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode
(FSNamesystem.java:1209)
... 12 more
解决方法:
步骤 1 执行命令退出安全模式:hadoop dfsadmin -safemode leave
步骤 2 执行健康检查,删除损坏掉的block。 hdfs fsck / -delete
然后再重新format 重新启动