使用vmware建立Hadoop 2.X集群环境,实验环境如下:
机器名 IP地址 操作系统
master 192.168.1.115 Centos x64
slave1 192.168.1.111 Centos x64
slave2 192.168.1.112 Centos x64
1、安装虚拟机。
1)安装vmware,用centos x64做一份虚拟系统,网络使用桥接方式,硬盘动态预留40G。
2)用vmware自带clone功能,克隆出两份副本。
2、关闭防火墙。
1)关闭SELINUX,设置SELINUX=disabled,保存退出。
vi /etc/selinux/config
2)关闭防火墙
/sbin/service iptables stop
永久关闭
chkconfig --level 35 iptables off
3、配置网络。
手动配置IP地址。
4、修改主机名和映射。
1)修改主机名:
vi /etc/sysconfig/network
例如:
NETWORKING=yes
HOSTNAME=slave2
2)修改hosts映射,添加主机映射。
vi /etc/hosts
例如:
192.168.1.115 master
192.168.1.111 slave1
192.168.1.112 slave2
重启网络。
service network restart
5、生成ssh免密码(用普通用户生成)
1)三台机生成密钥对。
ssh-keygen -t rsa -f ~/.ssh/id_rsa
2)将slave1和slave2生成的公钥拷贝到master:
scp 192.168.1.111:/home/huser/.ssh/id_rsa.pub ./slave1_rsa.pub scp 192.168.1.112:/home/huser/.ssh/id_rsa.pub ./slave2_rsa.pub
master上公钥往本机拷贝一份:
cp id_rsa.pub master_rsa.pub
3)3个公钥文件中的内容存放至authorized_keys,采用文本追加的方式:
cat master_rsa.pub >> authorized_keys cat slave1_rsa.pub >> authorized_keys cat slave2_rsa.pub >> authorized_keys
4)生成的authorized_keys需要设置权限:
chmod 600 authorized_keys
5)authorized_keys拷贝到另外两台机器上,ssh免密码登录其他机器测试。
6、安装JAVA
1)Linux系统可能自带OpenJDK或者IBMJDK,需要卸载掉重新安装Oracle JDK。
查看JDK信息:
rpm -qa|grep java
卸载已经安装的JAVA,所有安装版本都卸载,直到提示找不到Java环境。
yum -y remove java-1.6.0-openjdk-1.6.0.0-3.1.13.1.el6_5.x86_64
2)在/usr下创建一个java目录,将JAVA安装包上传,解压文件
tar -xzvf jdk-7u51-linux-x64.tar.gz
3)配置JAVA环境
先备份 cp /etc/profile /etc/profile.bak
编辑profile
先注释一行
#export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
设置环境变量
export JAVA_HOME=/usr/java/jdk1.7.0_51 export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar export JRE_HOME=$JAVA_HOME/jre export PATH=$JAVA_HOME/bin:$PATH
保存,生效环境变量。
source /etc/profile
用java -version查看JAVA环境变量是否设置正确。
7、安装Hadoop 2.x(用普通用户安装)
1)下载hadoop-2.2.0.tar.gz,上传到/home/huser/hadoop,解压安装包。
2)修改etc/hadoop/hadoop-env.sh中的export JAVA_HOME=usr/java/jdk1.7.0_51,即前面安装的JAVA路径。
3)修改etc/hadoop/yarn-env.sh中的export JAVA_HOME=/usr/java/jdk1.7.0_51,即前面安装的JAVA路径。
4)修改etc/hadoop/slaves,添加:
slave1
slave2
5)修改etc/hadoop/core-site.xml,在configuration下面添加:
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/huser/hadoop/hadoop-2.2.0/tmp/</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>
##需要新建tmp文件夹,/home/huser/hadoop/hadoop-2.2.0/tmp/
6)修改etc/hadoop/hdfs-site.xml,在configuration下面添加:
<property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/huser/hadoop/hadoop-2.2.0/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/huser/hadoop/hadoop-2.2.0/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
##需要新建name和data文件夹,/home/huser/hadoop/hadoop-2.2.0/name,/home/huser/hadoop/hadoop-2.2.0/data
7)修改etc/hadoop/mapred-site.xml,在configuration下面添加:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property>
8)修改etc/hadoop/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>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property>
9)以上个别配置文件默认不存在,复制相应的template文件获取。
10)格式化节点。
./bin/hdfs namenode –format
11)启动hdfs。
./sbin/start-dfs.sh
出现错误报信。
14/04/19 04:27:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /home/huser/hadoop/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
master]
64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known
Server: ssh: Could not resolve hostname Server: Name or service not known
You: ssh: Could not resolve hostname You: Name or service not known
warning:: ssh: Could not resolve hostname warning:: Name or service not known
##Hadoop本身没有32位和64位区分,但JAVA本身有位数区分,引用了本地库就要注意位数,检查位数file ./libhadoop.so.1.0.0
./libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
##可以看出类库是32位,所以会报错,解决办法:
一种重新编译Hadoop,详见:http://www.cnblogs.com/guarder/p/3697636.html
二种暂时解决,修改etc/hadoop/hadoop-env.sh:
export HADOOP_COMMON_LIB_NATIVE_DIR=/home/huser/hadoop/hadoop-2.2.0/lib/native export HADOOP_OPTS="-Djava.library.path=/home/huser/hadoop/hadoop-2.2.0/lib"
12)再次启动集群
启动hdfs:
./sbin/start-dfs.sh
启动yarn:
./sbin/start-yarn.sh
13)查看启动情况。
master上面进程:
22143 NameNode 22529 Jps 22316 SecondaryNameNode 22459 ResourceManager
slave上面进程:
21438 Jps 21341 NodeManager