环境: 系统 CentOS 6.3 64 位 * 2 Master 10.10.55.112 Slave1 10.10.55.133 软件: Hadoop- 2.5.1- src.tar.gz
一、准备环境
1.1 分别设置节点ip地址(固定) 此步骤所有节点都要操作
vi /etc/sysconfig/network- scripts/ifcfg – eth0
1.2 修改节点主机名此步骤所有节点都要操作
vi /etc/sysconfig/network 以上两步骤需要重启服务器后才生效
1.3 创建 hadoop 用户及主机名 此步骤所有节点都要操作
useradd hadoop vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=master.Hadoop //节点服务器设置为 slave1.Hadoop vi /etc/hosts 10.10.55.112 master.Hadoop 10.10.55.133 slave1.Hadoop
1.4 建立 hadoop 用户之间相互信任(互相无密码登陆)此步骤所有节点都要操作
切换至 hadoop 用户下执行 ssh-keygen -t rsa 然后将自己的公钥以及其他服务器 hadoop 用户的公钥放置 hadoop 宿主目录下的.ssh/authorized_keys中, 注意 authorized_keys 默认不存在需要手动创建,并且必须设置权限为 600 ssh-keygen生成密钥;-t生成密钥类型;dsa为dsa密钥认证的意思,密钥类型;-P用于提示密语;-f生成密钥文件; ssh-keygen -t rsa cat .ssh/id_dsa.pub >> .ssh/authorized_keys ssh –version
1.5 安装 java(建议每台机器的 JAVA_HOME 路径信息相同)此步骤所有节点都要操作
下载 jkd( http://www.oracle.com/technetwork/java/javase/downloads/index.html)
下载后解压至自己指定的目录如 /usr/java
添加变量:以 root 用户 vi /etc/profile 根据自己路径在最后添加以下三行 #jdk export JAVA_HOME=/usr/java/jdk1.7.0_67 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin 添加之后执行 sourc /etc/profile 重新加载 建议 root 用户和 hadoop 用户都操作此步
1.6 安装基本应用程序 (此步骤要求联公网) 此步骤只需在 master 上操作
yum -y install svn ncurses-devel gcc* yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl –devel
1.7 安装 maven
下载 apache-maven-3.1.1-bin.tar.gz (下载地址 http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz ) 并解压 tar zxvf apache- maven- 3.2.3- bin.tar.gz mv apache-maven-3.2.3 maven (改名)
注意一下 maven 存放路径,可以自定义路径 我的路径是 /home/hadoop/maven 目录下 添加变量:以 root 用户 vi /etc/profile 根据自己路径在最后添加以下两行 export MAVEN_HOME=/home/hadoop/maven export PATH=$PATH:$MAVEN_HOME/bin 添加之后执行 sourc /etc/profile 重新加载
1.9 安装 protobuf(不安装,编译将无法完成)
Hadoop使用protocol buffer进行通信,需要下载和安装protobhf-2.5.0.tar.gz;由于官网已经无法下载了,
可以到百度云盘下载http://pan.baidu.com/s/1pJlZubT
编译安装 protobuf
① cd protobuf - 2.5.0
② ./configure
③ make
④ make install
检测 protoc –version
二、编译安装 hadoop-2.5.1
2.1 下载 hadoop-2.5.1-src.tat.gz
Hadoop-2.2.0 源码包下载地址 http://apache.claz.org/hadoop/common/hadoop-2.5.1/
红色标志 hadoop-2.5.1- src.tar.gz 为源码包
2.2 解压hadoop-2.5.1-src.tar.gz
2.3 开始编译
执行命令 mvn clean package –Pdist,native –DskipTests –Dtar 此步骤要求逐级能访问公网,并且此步骤比较漫长,由于服务器配置和网上的不同因素,时间大致为1小时左右; 完成结果图类似如下:
编译成功后, /hadoop-dist/target/hadoop-2.5.1.tar.gz 就是我们需要的文件了; 将编译好的 /hadoop-dist/target/hadoop-2.5.1.tar.gz 文件分别拷贝到其他节点, 并将其解压,设置其属主、属组都为Hadoop用户(路径自定义,注:所有节点Hadoop路径必须相同,我这里所有服务器节点都放在/home/hadoop
然后添加环境变量: vi /etc/profile 此步骤所有节点都要操作 添加以下两条: #set hadoop 环境变量 export HADOOP_HOME=/root/hadoop-2.5.1 指定Hadoop安装路径 export PATH=$HADOOP_HOME/bin:$PATH export CLASSPATH=$HADOOP_HOME/lib:$CLASSPATH 添加之后执行 sourc /etc/profile 重新加载 建议 root 用户和 hadoop 用户都操作此步
2.4 master 操作
解压/hadoop-dist/tast/target/hadoop-2.5.1.tar.gz 到 /home/hadoop 进入配置文件目录
在这里主要修改以下几个文件:(文件内容有些参数根据自己时间情况修改) slaves core- site.xml hadoop-env.sh hdfs - site.xml mapred-site.xml (此文件默认不存在) yarn-env.sh yarn -site.xml
2.4.1 修改slaves文件,添加以下内容(目的:添加slave节点,建议写ip地址)
10.10.55.133
2.4.2 修改 core-site.xml 添加以下内容:
<configuration> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://10.10.55.112:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/hadoop-2.5.1/temp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>hadoop.proxyuser.hduser.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hduser.groups</name> <value>*</value> </property> </configuration>
2.4.3 修改hdfs-site.xml文件
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>10.10.55.112:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/hadoop-2.5.1/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/hadoop-2.5.1/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
2.4.4 修改mapred-site.xml 文件,添加如下内容:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>10.10.55.112:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>10.10.55.112:19888</value> </property> </configuration>
2.4.5 修改 yarn-site.xml 文件,添加如下内容:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>10.10.55.112:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>10.10.55.112:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>10.10.55.112:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>10.10.55.112:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>10.10.55.112:8088</value> </property> </configuration>
2.4.6 修改hadoop-env.sh 文件
修改JAVA_HOME值( export JAVA_HOME=/usr/java/jdk.1.7.0_67
2.4.7 修改 yarn-env.sh文件
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_67)
2.4.8 传送文件至各个节点保持一致
配置文件修改完了,然后将修改后的所有文件都复制(覆盖)到各个节点 hadoop 目录下 scp hadoop-env.sh hdfs - site.xml mapred-site.xml slaves yarn-env.sh yarn -site.xml [email protected]:/home/hadoop/hadoop-1.5.1/et/hadoop/ scp hadoop-env.sh hdfs- site.xml mapred-site.xml slaves yarn-env.sh yarn -site.xml [email protected]:/home/hadoop/hadoop-1.5.1/et/hadoop/
三、启动Hadoop
3.1 初始化Hadoop (注意:请关闭所有节点防火墙)
切换至 hadoop 用户,进入/home/hadoop/hadoop-2.2.0/bin/下执行命令 hdfs namenode - format 进行初始化
...
初始化完之后会自动在/home/hadoop/hadoop-2.5.1/创建 dfs/name/目录 每次初始化都会对dfs进行操作,一般只要初始化一次就可以了,因为如果dfs里面有数据的话会把它给弄丢的
3.2 启动Hadoop (用 Hadoop 用户执行)注意:请关闭所有节点防火墙)
切换至/home/hadoop/hadoop-2.5.1/sbin/目录下:
3.2.1 执行脚本 ./start-dfs.sh
此时master 上会产生:(两个进程)
Slave 节点上会产:(DataNode进程) 且dfs密钥同步到slave节点上
3.2.2 执行脚本 ./start-yarn.sh (产生一个进程ResourceManager)
slave节点产生NodeManger进程
四、测试
访问网页: http://10.10.55.112:8088
访问网页:http://10.10.55.112:50070
至此,hadoop 已经启动
关于 hadoop 的启动和关闭:
在/home/hadoop/hadoop-2.5.1/bin 下
hdfs 命令 用来初始化
hdfs namenode -format
在/home/hadoop/hadoop-2.5.1/sbin 下
启动
start-dfs.sh #Start hadoop dfs daemons
start-yarn.sh #Start all yarn daemons. Run this on master node
关闭
stop-dfs.sh
stop-yarn.sh
另外:
start-all.sh 脚本包含 start-dfs.sh 和 start -yarn.sh 两个脚本 所以启动时可以直接执行此脚本
stop-all.sh 关闭 同理
=========================================================================================
常见问题
1、 slave节点DataNode 无法启动
- 搭建了很多次,这个问题每次都出现,所以总结了一下:
- 防火墙没关 解决办法:你懂得
- 所有节点 hosts 链表不统一,或有错误 解决办法:你懂得
- 查看节点日志提示namenode.rpc-address is not configured.发现node1没复制过去core-site.xml文件
- 因为多次 format namenode 造成 namenode 和 datanode 的 clusterID 不一致
解决方法:
方法一:更改 slave Cluster ID 与 master 相同
修改每一个 datanode 上面的 CID(位于 dfs/data/current/VERSION 文件夹中) 使两 者一致
方法二:删除所有节点/home/hadoop/hadoop-2.5.1/dfs/data/下 curren 目录 然后 重新 start-dfs.sh 即可