- 安装虚拟机环境(4台centos6.5)
-
修改主机名,设置各个节点的ip
修改主机名:
- su root;
- vim /etc/sysconfig/network
修改HOSTNAME = XXX - 重启 reboot。
设置ip节点:
- vim /etc/hosts
- #IPAddress HostName(例如:127.0.0.1 hadoop)
需要先ping通四台虚拟机(举例:vmware)
- 修改vm的网络连接设置为桥接网络。
- 对每个虚拟机的网络设置改成nat网络
-
修改ip地址,vim /etc/sysconfig/network-scripts/ifcfg-eth0
只修改IPADDR,根据nat网络地址改,除了.0,.2,.255
重启/etc/init.d/network restart
注:1. 要注意修改BOOTPROTO为none,否则可能导致修改是否 2.要修改MAC地址,防止mac冲突
- 修改主机名,vim /etc/sysconfig/network(修改完要重启,一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Master” 这样的记录)
- 修改ip映射关系,vim /etc/hosts 注(每台虚拟机都需要修改。ip映射关系需要写全。)
-
ssh免密码登陆
- cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
- rm ./id_rsa* # 删除之前生成的公匙(如果有)
- ssh-keygen -t rsa # 一直按回车就可以
- cat ./idrsa.pub >> ./authorizedkeys #本机自己无需密码登陆
- 同时复制到其他节点上去 scp ~/.ssh/id_rsa.pub hadoop@hadoop01:/usr/local 原因:通过客户的公匙与本地的私匙生成的字码对照,如果一样允许
-
安装jdk(配置环境变量各个节点都需要单独配置,包括hadoop)
- 下载jdk文件并解压(例如:下载文件放在/usr/local/下,新建一个java文件夹,在java文件夹内解压jdk文件)
-
配置环境变量:vim /etc/profile加入以下三行代码:
#JAVA_HOME
JAVA_HOME=/usr/local/java/jdk1.8.0121
JRE_HOME=$JAVAHOME/jdk1.8.0121/jre
CLASSPATH=:$JAVAHOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVAHOME JREHOME PATH CLASSPATH - 执行resource /etc/profile使得环境变量生效
- 执行java -version查看java版本(同时检验是否安装成功) 5.安装hadoop
- 下载hadoop文件并解压(例如解压在/usr/local/hadoop目录下)
-
配置环境变量:vim /etc/profile加入以下代码:
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.0
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$JAVAHOME/lib:$HADOOP_HOME/lib:$CLASSPATH
export PATH=$PATH:$HADOOPHOME/bin:$HADOOP_HOME/sbin - 执行source /etc/profile使得环境变量生效
- 集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
- 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 hadoop01节点仅作为 NameNode 使用。
- 文件 core-site.xml 改为下面的配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
- 文件 hdfs-site.xml,dfs.replication 一般设为 3
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop01:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
- 文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop01:19888</value> </property> </configuration>
- 文件 yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
- 配置好后,将 hadoop01上的 /usr/local/Hadoop 文件夹复制到各个节点上。建议在切换到集群模式前先删除之前的临时文件。在 hadoop01节点上执行:
cd /usr/local rm -rf ./hadoop/tmp # 删除 Hadoop 临时文件 rm -rf ./hadoop/logs/* # 删除日志文件 tar -zxcf ~/hadoop01.tar.gz ./hadoop # 先压缩再复制 cd ~ scp ./hadoop01.tar.gz hadoop02:/usr/local
- 在hadoop02的/usr/local路径下找到hadoop.tar.gz解压。(如果原先存在,则先删除,其他路径也相同)
- 首次启动需要先在 hadoop01 节点执行 NameNode 的格式化 hdfs namenode -format
- 需要关闭全部节点的防火墙,service iptables stop(停止防火墙)、 chkconfig iptables off(失效,重启后也不会开启防火墙
6. 遇到的一些坑:
1. datanode节点如果没有启动datanode守护进程,查看namedata节点下的日志,如果是clusterID的错误,修改/tmp/dfs/data/current/VERSION和/tmp/dfs/name/current/VERSION中两个clusterID是否相同,不同重新设置。
2. datanode节点没有启动datanode守护进程,删除datanode节点的tmp下的所有文件,重新hadoop hdfs -format