一:系统安装与配置
虚拟机软件:Virtualbox 4.3.10(已安装对应扩展包)
虚拟机:Ubuntu 13.04 LTS 32位(至于为什么选择13.04,是由于最新的版本号装上后开机会出现错误,每一个人的平台不一样,我的是Mac OS X 10.9.2。应该选择自己合适的版本号)
虚拟机配置:
须要特别说明的是:在设置网络时,一定要选择“桥接网卡”,至于界面名称,我的电脑是不能选择有线网卡的,由于选择有线网卡连不上网,仅仅能选择Wi-Fi网卡了。至于为什么不能选择NAT模式,是由于NAT模式下外网是不能訪问虚拟机的,这样虚拟机之间也就不能互相訪问了。关于很多其它,请Google虚拟机的网络连接方式的差别。
还有就是,在安装时建议先反勾选“启用网络连接”,由于如启用,在安装时会下载更新和语言包,假设你的网络质量不好,这是非常耗时的。在安装完毕后,重新启动后再启用网络连接,把“软件源”设置为系统測试的最佳软件源server。
在安装系统时,每一个虚拟机的username都应尽量设置为一样的。由于,ssh默认以当前username去登录另外的主机,假设“另外的主机”没有“当前username”这样一个用户,后果可想而知!我的username都设置为:Hadoop,登录名是hadoop
我的主机名:master节点的主机名是Master,slaves节点的主机名分别为:Node1、Node2、Node3
安装完四台虚拟机后:
把网络的ip地址固定下来(手动加入ip地址),尽量让四台主机的ip地址相邻。
Ctrl + Alt + T 打开终端,输入:
sudo apt-get update
然后安装好系统更新,和语言支持。
安装必要的工具:
sudo apt-get install vimsudo apt-get install openssh-server
在每台主机上,
检測系统是否开启ipv6:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
假设结果显示0表示已开启,若为1表示已关闭
关闭ipv6:
sudo vim /etc/sysctl.conf
增加例如以下内容:
net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1
重新启动系统
至于为什么要关闭ipv6,后面再说。
在master节点中下载Hadoop和JDK:
Hadoop选择下载2.4.0
JDK我用的是1.7u55
二:主机互Ping
编辑/etc/hosts文件:
在终端中输入:
sudo vim /etc/hosts
在当中以“ip地址主机名”的格式增加每一个主机的信息,我的Master主机中的hosts文件内容例如以下:
每台主机都加入对应的主机信息后,重新启动,測试:ping Node1
每台上依次都ping一下,看是否是通的。
三:主机无password登录节点
在master节点上运行:
ssh-keygen -t rsa -P一直回车默认,生成的密钥对保存在~/.ssh文件夹下
在slaves节点上运行:
mkdir ~/.ssh生成用于保存密钥的目录
把公钥拷贝到全部Slave上(须要输入password):
scp /home/hadoop/.ssh/ id_rsa.pub hadoop@nistest.node:~/
在Slave机上把把id_rsa.pub追加到授权的key里面去:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
測试是否成功:
ssh Node1
依次測试一下
默认以当前用户登录,所以要求Master机和Slave机的username一致,
若Master机需无password登录自己:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
四:JAVA环境安装
从master机把JDK包依次远程拷贝到全部Slave机的/usr/local文件夹下(须要password):
scp “JDK包名“
改动JDK包文件的文件拥有者,使用户hadoop可以使用该文件:
sudo chown hadoop:hadoop “JDK包名”
在master节点中把JDK包移动到/usr/local下:
sudo mv “JDK包名” /usr/local
切换到/usr/local/文件夹下:
cd /usr/local
解压JDK包:
sudo tar –zxvf “JDK包名”
删除JDK包:
sudo rm -f “JDK包名”
重命名刚解压的JDK目录:
sudo mv "JDK目录名" /usr/local/jdk
把jdk目录的全部者改为hadoop:
sudo chown -R hadoop:hadoop jdk/
配置环境变量:
sudo vim /etc/profile
增加:export JAVA_HOME=/usr/local/jdk/
export JRE_HOME=/usr/local/jdk/jre
export LASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
使配置生效:
source /etc/profile假设是系统原来安装有其它的jdk,应该把刚才安装的jdk作为系统默认的jdk:
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk/bin/java 300 sudo update-alternatives --install /usr/bin/java java /usr/local/jdk/bin/java 3000 sudo update-alternatives --install /usr/bin/jar jar /usr/local/jdk/bin/jar 300 sudo update-alternatives --install /usr/bin/javah javah /usr/local/jdk/bin/javah 300 sudo update-alternatives --install /usr/bin/javap javap /usr/local/jdk/bin/javap 300
sudo update-alternatives --config java
sudo update-alternatives --config javac
在其它节点也进行上面的配置,当然也能够从master节点上把jdk目录拷贝到其它节点上,可是一定要注意在每一个节点上改动环境变量。
五:Hadoop安装与配置
先在Master机上安装配置
安装和配置Hadoop须要以"root"的身份进行
把Hadoop包文件拷贝到/usr/local下
cp “Hadoop包文件源“ /usr/local
在/usr/local下,解压"hadoop-2.4.0.tar.gz"安装包:
tar –zxvf hadoop-2.4.0.tar.gz
将"hadoop-2.4.0"目录重命名"hadoop":
mv hadoop-2.4.0 hadood
将目录"hadoop"读写权限分配给hadoop用户:
chown –R hadoop:hadoop hadoop
删除"hadoop-2.4.0.tar.gz"安装包:
rm –rf hadoop-2.4.0.tar.gz
以hadoop在/usr/local/hadoop下创建“tmp”、“dfs”目录,在“dfs”下创建“name”、“data”目录:
mkdir /usr/local/hadoop/tmpmkdir /usr/local/hadoop/dfs
mkdir /usr/local/hadoop/dfs/name
mkdir /usr/local/hadoop/dfs/data
再次把将目录"hadoop"全部权分配给hadoop用户:
chown –R hadoop:hadoop hadoop
配置"/etc/profile":
vim /etc/profile
增加:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新启动"/etc/profile":
source /etc/profile
配置Hadoop
这里要涉及到的配置文件有7个:
hadoop-env.sh
yarn-env.sh
slaves
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
都在/usr/local/hadoop/etc/hadoop文件夹下
下面行为以hadoop用户进行,切换到/usr/local/hadoop/etc/hadoop文件夹下
1.vim hadoop-env.sh
增加例如以下内容:
export JAVA_HOME=/usr/local/jdk export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
加入JDK的环境变量和让Hadoop优先使用ipv4,由于后面的配置文件里的网络port号系统默认是ipv6的,而ipv6是不通的,所以之前已经关闭ipv6,否则,在进行Hadoop測试时会重复连接根本连不通的ipv6port。2.vim yarn-env.sh
增加例如以下内容:
export JAVA_HOME=/usr/local/jdk
3.vim slaves
把salve节点的主机名增加,把原来的“localhost”删掉。
4.vim core-site.xml
<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:/usr/local/hadoop/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> </configuration>5.vim 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:/usr/local/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>6.vim 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> </configuration>7.vim 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> </configuration>注意:原来文件里的<configuration></configuration>对是存在的,不要反复增加:
原来系统内的mapred-site.xml文件是mapred-site.xml.template应用以下的命令对其重命名:
mv mapred-site.xml.template mapred-site.xml
配置其余机器:
将 master节点上配置好的hadoop所在文件夹"/usr/local/hadoop"拷贝到全部的slave的"/usr/local"文件夹下(实际上Slave机器上的slavers文件是不必要的, 复制了也没问题)
scp -r /usr/local/hadoop root@Node1:/usr/local
以root用户登录"Slave
chown -R hadoop:hadoop(username:用户组) hadoop(目录)
启动及验证:
在启动前关闭集群中全部机器的防火墙
sudo ufw disable
在"Master"上使用普通用户hadoop进行操作。(备注:仅仅需一次,下次启动不再须要格式化,仅仅需 start-all.sh)
hadoop namenode –format
启动hadoop:
start-all.sh查看DataNode的信息:
hadoop dfsadmin -report
查看已启用的服务:
jps
停用Hadoop:
stop-all.sh
发现了一个错误,已改动!假设您也发现了问题,请告诉我!谢谢!