1. 部署环境
系统: CentOS 6.3
需要安装jdk.
JDK的RPM下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
hadoop手册地址: http://hadoop.apache.org/docs/r1.2.1/index.html
关闭iptables和selinux
/etc/init.d/iptables stop chkconfig iptables off sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0
2. SSH配置
useradd hadoop echo 123456 | passwd --stdin hadoop su - hadoop ssh-keygen -t rsa #生成密钥对 ssh-copy-id user@ip #将ssh公钥copy到指定的主机 cd .ssh #每台服务器本机也需要配置ssh免密码登录 cat id_rsa.pub >> authorized_keys
3. 部署hadoop
官网: http://hadoop.apache.org/
下载: http://mirror.bit.edu.cn/apache/hadoop/common/
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.5.0/hadoop-2.5.0.tar.gz tar xf hadoop-2.5.0.tar.gz cd hadoop-2.5.0 mkdir data #用来存放数据块的,在slave中才会用到 mkdir name #用来存放元数据的,在namenode中才会用 mkdir tmp #tmp主要用来存放临时数据
修改配置
涉及到的配置文件有7个:
etc/hadoop/hadoop-env.sh
etc/hadoop/yarn-env.sh
etc/hadoop/slaves
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
etc/hadoop/mapred-site.xml
etc/hadoop/yarn-site.xml
以上个别文件默认不存在的, 可以复制相应的template文件获得
1. etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_67
2. etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_67
3. etc/hadoop/slaves
secondarynamenode和master分离的时候在masters文件中记录
hadoop2 hadoop3
4. etc/hadoop/core-site.xml
fs.defaultFS hdfs://hadoop1:9200 io.file.buffer.size 131072 hadoop.tmp.dir file:/home/hadoop/hadoop-2.5.0/tmp #设置hadoop临时目录Abase for other temporary directories. hadoop.proxyuser.hduser.hosts * hadoop.proxyuser.hduser.groups *
5. etc/hadoop/hdfs-site.xml
dfs.namenode.secondary.http-address hadoop1:9001 dfs.namenode.name.dir file:/home/hadoop/hadoop-2.5.0/name dfs.datanode.data.dir file:/home/hadoop/hadoop-2.5.0/data dfs.replication 1 dfs.webhdfs.enabled true
6. etc/hadoop/mapred-site.xml
mapreduce.framework.name yarn mapreduce.jobhistory.address hadoop1:10020 mapreduce.jobhistory.webapp.address hadoop1:19888
7. etc/hadoop/yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.resourcemanager.address hadoop1:8032 yarn.resourcemanager.scheduler.address hadoop1:8030 yarn.resourcemanager.resource-tracker.address hadoop1:8031 yarn.resourcemanager.admin.address hadoop1:8033 yarn.resourcemanager.webapp.address hadoop1:8088
4. 启动集群并检验
将hadoop目录分发到各节点
scp -r /home/hadoop/hadoop-2.5.0 ip:/home/hadoop
格式化namenode
./bin/hdfs namenode -format
启动hdfs
./sbin/start-dfs.sh
此时在hadoop1上面运行的进程有: NameNode SecondaryNameNode
hadoop2和hadoop3上面运行的进程有: DataNode
启动yarn
./sbin/start-yarn.sh
此时在hadoop1上面运行的进程有: NameNode SecondaryNameNode ResourceManager
hadoop2和hadoop3上面运行的进程有: DataNode NodeManager
通过jps可以查看进程, 以下是通过oracle 安装的rpm的jdk.
/usr/java/jdk1.7.0_67/bin/jps
控制台报错:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
通过配置DEBUG变量,可以查看错误细节,
export HADOOP_ROOT_LOGGER=DEBUG,console
可以看到所依赖的GLIBC版本不符合要求...
DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/hadoop/hadoop-2.5.0/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/hadoop/hadoop-2.5.0/lib/native/libhadoop.so.1.0.0)
升级GLIBC....
下载地址: http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
下载地址: http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2 #编译glibc需要
tar xf glibc-2.14.tar.gz cd glibc-2.14 tar xf ../glibc-linuxthreads-2.5.tar.bz2 cd .. export CFLAGS="-g -O2" ./glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make make install
安装编译过程中需要注意三点:
1. 要将glic-linuxthreads解压到glibc目录下
2. 不能在glibc当前目录下运行configure
3. 加上优化开关, export CFLAGS="-g -O2", 否则会出现错误..
如果安装的hadoop本地库是32位而系统是64位的:
重新编译hadoop...
暂时可以解决的办法, 使用以下的环境变量.... ,让hadoop找不到本地库,,,会使用java的标准库..
export HADOOP_COMMON_LIB_NATIVE_DIR=/home/hadoop/hadoop-2.2.0/lib/native export HADOOP_OPTS="-D java.library.path=/home/hadoop/hadoop-2.2.0/lib"
总结:
安装JDK
编辑hosts文件
关闭防火墙和selinux
部署免密码ssh
下载hadoop 2.5 并解压
修改配置文件
分发hadoop到各个节点
启动集群