0.环境搭建准备
实体机Win7 64位
SSH Secure Shell Client
Centos 6.5 版本
Hadoop 2.6.0 版本(编译后64位)
OpenJdk1.7.0
注:jdk的安装方法有三种,具体参照http://blog.csdn.net/u0114142...
1.实验环境
IP hostname role
192.168.47.131 hadoop1 ActiveNameNode
192.168.47.132 hadoop2 StandByNameNode
192.168.47.133 hadoop3 DataNode1
192.168.47.134 hadoop4 DataNode2
2.基本配置
(注:下面的代码有的是用超级用户权限才能执行,所以遇到权限不够的时候,代码前面加上sudo,将自己当前用户变为超级用户的方法比较简单,就不多说了,也可以使用root权限,但比较费事。)
2-1 网络配置
物理地址
hadoop1 00:0C:29:4E:45:5B
hadoop2 00:50:56:28:02:B1
hadoop3 00:50:56:3F:4C:59
hadoop4 00:50:56:3C:D1:7D
1.查看虚拟机物理地址 设置—网络适配器—高级—Mac地址 如下图:
PS:每次复制完虚拟机后,它们物理地址都相同,按下生成,即可生成新的物理地址,这样可以保证每一台虚拟机的物理地址不同,防止后面网络配置出错。
2.进行eth0配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改硬件地址
并加入以下三行
IPADDR=192.168.47.131
NETMASK=255.255.255.0
GATEWAY=192.168.47.2
观察下面两项,改成如下设置
ONBOOT=yes
BOOTPROTO=none
3.配置DNS
vim /etc/resolv.conf
输入nameserver 192.168.47.2 即网关(也可以参照其他资料上设置,最终连上网就行)
保存后,输入
service iptables stop
考虑到后面节点的启动,也可以将防火墙设置为永久关闭,命令如下:
chkconfig iptables off
如果还是没连接,输入
service network restart
4.修改主机名
编辑系统文件
vim /etc/sysconfig/network
在里面添加下面语句(根据实际修改)
HOSTNAME=hadoop1
5.配置hosts文件
vim /etc/hosts
192.168.47.131 hadoop1
192.168.47.132 hadoop2
192.168.47.133 hadoop3
192.168.47.134 hadoop4
网络配置这里比较重点,网上有很多方法,个人觉得这种方法算是比较简单易行的,整体虚拟机网络设置为dhcp,即自动获取,这样可以保证虚拟机和外网互通,建议可以在windows和虚机间ping一下,检查是否联网,之后在几台虚拟机上设置静态Ip,可以ifconfig一下,检查是否设置成功。
2-2 SSH免密码登录
1.安装SSH:
yum install openssh-clients
如果输入yum install ssh可能会报错,报错如下
ssh安装成功界面
3.修改SSH配置文件
vim /etc/ssh/sshd_config
修改成如下图(其实就是把前面 ‘#’ 删除即可)
重启SSH:
service sshd restart
进入当前用户下,生成秘钥
cd /home/hadoop
ssh-keygen -t rsa
一路回车
设置.ssh目录和公秘钥权限
sudo chmod 700 /home/hadoop
sudo chmod 700 -R ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
配置本机免密码登录
cat id_rsa.pub >> authorized_keys
检验能否无密码ssh登录本机
[hadoop@hadoop1 .ssh]$ssh hadoop1
第一次登录需要回答yes,以后都不需要,可以直接登录。
注意:这里生成密钥建议在几台虚拟机克隆过后网络配置、文件配置完成后施行,免密码登录这里直接影响最后格式化及节点启动是否成功,所以笔者在最后设置,检验完免密码登录后,启动格式化。
这里我配置了activenamenode到其他几个datanode的免密码登录,即hadoop1到hadoop2、hadoop3、hadoop4的免密码登录,也可以设置双向的。
hadoop1主机免密码登录hadoop2主机
1.进入hadoop1的.ssh目录下
cd ~/.ssh
2.把authorized_keys复制到其他机器上,如节点hadoop2
scp authorized_keys hadoop@hadoop2:/home/hadoop/.ssh/temp
注意:若出现权限不足,可以root权限过去
scp authorized_keys root@hadoop2:/home/hadoop/.ssh/temp
3.进入hadoop2的.ssh目录,修改拥有者和用户组
cd ~/.ssh/
chown hadoop temp
chgrp hadoop temp
cat temp >> authorized_keys
现在可以从hadoop1免密码登录hadoop2,在hadoop1主机上
ssh hadoop2
成功后可以删除临时文件temp(这个临时文件不需要新建,系统自己会建)
rm temp
从hadoop2主机免密码登录到hadoop1
1.在hadoop2上执行
cd ~/.ssh
scp authorized_keys hadoop@name:/home/hadoop/.ssh/temp
在hadoop1上执行
cd ~/.ssh/
cat temp >> .ssh/authorized_keys
在hadoop2虚拟机上测试
ssh hadoop1
确定activenamenode可以免密码登录到任何一个datanode后,开始启动节点,注意最起码保证以上要求,在本例中应该最少设置hadoop1能免密码登录到hadoop2、hadoop3、hadoop4,否则会出现最后格式化的时候出现连接不上其他几台虚拟机的报错(原理嘛很简单,就是namenode会与其他几个datanode进行交互,如果设置了密码,也不可能人工输入密码,程序就会报错)。
2-3 hadoop软件安装及文件配置
2-3-1安装过程
1.解压安装包
将已下载好的hadoop-2.6.0.tar.gz 存放在hadoop用户目录下, 并解压至当前主用户目录下.
tar -zxvf /home/hadoop-2.6.0.tar.gz -C /home/hadoop/
Apache Hadoop 各个版本的下载地址:http://archive.apache.org/dis...
2.配置Hadoop的环境变量
sudo vim /etc/profile
在末尾加上以下配置,保存退出
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.环境变量生效
sudo source /etc/profile
2-3-2 文件配置
进入到目录hadoop-2.6.0里的/etc/hadoop/目录下进行文件的配置
1.vim hadoop-env.sh
增加java和hadoop环境变量及本地库
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.121.x86_64
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
2.修改core-site.xml文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:8020</value>
</property>
3.修改yarn-site.xml文件
<name>yarn.resourcemanager.address</name>
<value>hadoop1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>hadoop1:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>${yarn.home.dir}/etc/hadoop/fairscheduler.xml</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<description>Where to aggregate logs to.</description>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>30720</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>12</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
注意resourcemanager是哪台虚拟机,自己设定并修改配置。
4.修改mapred-site.xml文件
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- jobhistory properties -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop2:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop2:19888</value>
</property>
主要设置standbynamenode节点相关端口号
5.设置hdfs-site.xml文件,这是比较核心的文件,经常格式化不成功问题也出现在这里。
<name>dfs.nameservices</name>
<value>hadoop-test</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoop-test</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-test.nn1</name>
<value>hadoop1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-test.nn2</name>
<value>hadoop2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-test.nn1</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-test.nn2</name>
<value>hadoop2:50070</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop2:8485;hadoop3:8485;hadoop4:8485/hadoop-test</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hdfs/journal/</value>
</property>
可以在主目录下建立hdfs文件夹,及里面的data,name,journal三个文件夹,有时候系统也会自动生成,这点诸位可以自行尝试。
6.修改yarn-env.sh
加入java环境变量即可
7.修改slaves(即各个datanode 主机名),加入以下三行
hadoop2
hadoop3
hadoop4
8.在/home/hadoop/hadoop-2.6.0/etc/hadoop/目录下新建一个文件fairsheduler.xml
touch fairsheduler.xml
将下面的内容复制进去
<allocations>
<queue name="infrastructure">
<minResources>102400 mb, 50 vcores </minResources>
<maxResources>153600 mb, 100 vcores </maxResources>
<maxRunningApps>200</maxRunningApps>
<minSharePreemptionTimeout>300</minSharePreemptionTimeout>
<weight>1.0</weight>
<aclSubmitApps>root,yarn,search,hdfs</aclSubmitApps>
</queue>
<queue name="tool">
<minResources>102400 mb, 30 vcores</minResources>
<maxResources>153600 mb, 50 vcores</maxResources>
</queue>
<queue name="sentiment">
<minResources>102400 mb, 30 vcores</minResources>
<maxResources>153600 mb, 50 vcores</maxResources>
</queue>
</allocations>
3.验证hadoop
hadoop 启动(HDFS , YARN启动)
注意:所有操作均在Hadoop部署目录下进行。
启动Hadoop集群:
-
Step1 :在各个JournalNode节点上,输入以下命令启动journalnode服务:
sbin/hadoop-daemon.sh start journalnode
通过jps可以查看到启动情况
-
Step2:在[nn1]上,对其进行格式化,并启动:
bin/hdfs namenode –format
观察到如下界面即为格式化成功,status为0即为成功,若为1或者其他数字则有错,请重新检查之前的步骤。
格式化成功后,启动acivenamenode
sbin/hadoop-daemon.sh start namenode
-
Step3:在[nn2]上,同步nn1的元数据信息:
bin/hdfs namenode -bootstrapStandby
观察到如下图,备用节点格式化成功
-
Step4:启动[nn2]:
sbin/hadoop-daemon.sh start namenode
经过以上四步操作,nn1和nn2均处理standby状态
-
Step5:将[nn1]切换为Active
bin/hdfs haadmin -transitionToActive nn1
-
Step6:在[nn1]上,启动所有datanode
sbin/hadoop-daemons.sh start datanode
查看数据节点启动情况
-
Step7:启动yarn:在[nn1]上,输入以下命令
sbin/start-yarn.sh
此时在activenamenode下输入jps,观察到除了NameNode进程,还有ResourceManager的进程;在datanode下输入jps,观察到除了DataNode进程,还有NodeManager的进程,这里就不截图了。
-
Step8:关闭hadoop集群:在[nn1]上,输入以下命令
sbin/stop-dfs.sh
web地址访问:
192.168.47.131:50070
activenamenode
Standbynamenode
192,168.47.132:50070
查看datanodes信息
在web端输入 192.168.47.131:8088即可看到yarn工作界面
看到如上界面即表示hadoop YARN环境搭建部署ok了,第一次搭建打开网页成功后,之后可能第二次格式化会出各种问题,笔者也在探索,还有后续内容喔。