目录
前言:
本文主要介绍linux操作环境下Hadoop的安装与配置,相关软件包信息如下:
- 操作系统:Centos6.8;
- JDK:1.7+版本;
- Vmware:10;
- Hadoop:2.6.4版本;
- SHH连接工具:Xshell7;
一、虚拟机安装与配置
1、下载镜像文件
Centos官网:https://www.centos.org/download/
Centos6.8下载网址:https://vault.centos.org/6.8/isos/x86_64/
下载步骤:进入Centos官网,点击alternative downloads 进入跳转页面,在Archived Versions中选择版本6.8,点击右侧Tree,在列表中选择ios/进入,点击x86_64/进入,选择:CentOS-6.8-x86_64-bin-DVD1.iso文件下载;
2、安装Vmware
参考文章:http://www.zhanshaoyi.com/8118.html
3、创建虚拟机
步骤:
- 打开VMware;点击“创建新的虚拟机”;选择“典型(推荐)(T)”;选择“稍后安装操作系统”;客户机操作系统选择“Linux(L)”,版本(V)选择“CentOS 6 64位”;虚拟机名称(V)填写“master”,位置(L)选择一个新文件夹存储;最大磁盘大小(GB)(S)选择20G,选择将虚拟磁盘拆分成多个文件(M);点击自定义硬件,点击新 CD/DVD(IDE)自动检测,选择使用ISO映像文件(M),选择前面已下载好的文件:CentOS-6.8-x86_64-bin-DVD1.iso文件;点击关闭,点击完成;
- 点击“开启此虚拟机”,选择第一个选项“Install or upgrade an existing system”(注意:使用 Crtl+Alt 快捷键可在虚拟机和个人电脑间切换),输入Enter开始安装;在“Choose Skip to skip the media test and start the installation ”选择“Skip”(按上下左右键切换后Enter);安装语言选择“English”,系统语言选择“U.S.English”;选择“Basic Storage Devices”;勾选“Accept my choise to all devices with undetected partitions or filesystems”,选择“Yes,discard any data”;
- Hostname设置为master.centos.com(该步骤设置主机名,需记住主机名称,以便后续修改配置文件);
- 时区选择“Asia/Shanghai”,勾选“System clock uses UTC”;Password输入123456(会提示为弱密码,选择Use Anyway);选择“Use all Space”,底下“Encrypt system”、“Review and modify partitioning layout”这两个选项均不勾选;选择“Write changes to disk”;选择“Minimal”,勾选“CentOS”,选择“Customize later”;点击“Reboot”重启虚拟机;
- 用户名输入:root;密码输入:123456(linux下输入密码时不展示密码),登陆虚拟机;
4、设置固定IP
- 输入:ifconfig 查看IP,inet addr显示IP为127.0.0.1;
- 输入:service network restart 以重启网络;
- 输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改配置文件:DEVICE为设备名,HWADDR为网卡地址,ONBOOT为设置系统启动时是否激活网卡,BOOTPROTO为网卡绑定时所使用的协议;修改内容:ONBOOT由no改为yes(使用虚拟机时需连接网卡),BOOTPROTO由dhcp改为static(使用静态协议),在底下添加:IPADDR(I要设置的固定IP)、NETMASK(子网掩码)、GATEWAY(网关)、DNS1(和网关的IP一致);
- 再次输入:service network restart 以重启网络;
注意:使用vi 命令对文件进行修改时,输入 i 开始编辑文件;编辑完成后按Esc键退出编辑;输入英文 : 后输入wq保存文件并退出;参考配置如下图所示:
DEVICE=eth0
HWADDR=00:0C:29:82:E2:96
TYPE=Ethernet
UUID=923f1922-5e57-4938-98b3-6ebd63eea97a
ONBOOT=yse
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.128.130
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNSI=192.168.128.2
5、修改VMware虚拟机配置
- 点击编辑-虚拟机网络编辑器,子网IP(I)由192.168.222.0修改为192.168.128.0
- 点击NAT设置(S),网关IP(G)由192.168.222.2修改为192.168.128.2
- 点击DHCP设置(C),开始IP地址(S)由192.168.222.128修改为192.168.128.128,结束IP地址(S)由192.168.222.254修改为192.168.128.128
二、Xshell安装与使用
1、下载安装Xshell
地址:https://www.netsarang.com/zh/free-for-home-school/
2、连接虚拟机
使用快捷键 Alt+N 新建会话,主机:输入虚拟机对应IP,这里填:192.168.128.130
用户身份验证:输入用户名root和密码123456,点击确定,新建会话;
3、安装软件
运行命令:cd /etc/yum.repos.d/ 进入yum.repos.d目录,运行ls查看当前目录下文件,修改CentOS-Base.repo、CentOS-Debuginfo.repo、CentOS-fasttrack.repo、CentOS-Vault.repo这4个文件,再次执行ls命令查看是否已经修改:
cd /etc/yum.repos.d/
ls
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak
ls
运行命令:vi CentOS-Media.repo 修改文件,输入 i 进入编辑模式,baseurl(下载软件位置)提供了三个,只保留第一行,将其改为file:///media/;gpgcheck(是否检查更新)设置为0;enabled(是否从该位置安装软件包)设置为1;按Esc退出编辑,输入:后键入wq保存修改并退出;
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
返回虚拟机VMware,右键-设置-CD/DVD(IDE)-设备状态 勾选已连接;
返回Xshell,运行命令:mount /dev/dvd /media(把/dev/dvd下的信息挂载到根目录下的media文件夹,注意:dvd后需输入空格)
挂载成功后,运行命令:yum clean all 更新yum源;
下载安装软件包,运行命令:yum install -y vim zip openssh-server openssh-clients
三、安装Java
1、下载JDK
进入oracle网站:https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html
选择Java SE7,下载文件:jdk-7u80-linux-x64.rpm
2、安装JDK
在Xshell上新建文件传输(Ctrl+Alt+F),右侧窗口输入 /opt 后enter,左侧选择文件jdk-7u80-linux-x64.rpm,右键点击传输;传输完成后,在Xshell连接窗口输入命令:cd /opt 进入opt目录,输入命令ls可看到传输进来的文件:jdk-7u80-linux-x64.rpm;
输入命令:rpm -ivh jdk-7u80-linux-x64.rpm 进行java的安装;
输入命令:java -version 查看是否安装成功;
查看java安装位置:cd /usr/java 执行ls 可看到安装位置:jdk1.7.0_80,即java的安装路径为:/usr/java/jdk1.7.0_80
四、搭建Hadoop集群
1、下载安装Hadoop
Hadoop下载网址1:https://archive.apache.org/dist/hadoop/common/
Hadoop下载网址2:http://archive.apache.org/dist/hadoop/core/
选择版本2.6.4,下载文件:hadoop-2.6.4.tar.gz
在Xshell上新建文件传输(Ctrl+Alt+F),右侧窗口输入 /opt 后enter,左侧选择文件hadoop-2.6.4.tar.gz,右键点击传输;传输完成后,在Xshell连接窗口输入命令:cd /opt 进入opt目录,输入命令ls可看到传输进来的文件:hadoop-2.6.4.tar.gz
输入命令:tar -zxf hadoop-2.6.4.tar.gz -C /usr/local/ 解压缩文件至/usr/local/目录下;
2、修改Hadoop配置文件
输入命令:cd /usr/local/hadoop-2.6.4/etc/hadoop/
运行ls,可看到各个配置文件,需要进行配置;
core-site.xml配置
输入命令:vi core-site.xml
输入i进入编辑模式,在<configuration>、</configuration>之间编辑:设置hadf系统命名为fs.defaultFS;设置主机名(与主节点名称保持一致);设置hadoop临时文件路径为/var/log/hadoop/tmp;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/log/hadoop/tmp</value>
</property>
</configuration>
hadoop-env.sh配置
输入命令:vi hadoop-env.sh
输入i进入编辑模式,修改JAVA_HOME为java的安装路径:/usr/java/jdk1.7.0_80;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;通过此步骤设置Hadoop的运行环境;
export JAVA_HOME=/usr/java/jdk1.7.0_80
hdfs-site.xml配置
输入命令:vi hdfs-site.xml
输入i进入编辑模式,在<configuration>、</configuration>之间编辑:设置namenode数据存放路径为file:///data/hadoop/hdfs/name;datanode数据存放的路径为file:///data/hadoop/hdfs/data;secondary namenode地址为主节点的50090端口,此处主节点设置为master(注意主节点需更改为自己的主节点);设置文件存放备份数dfs.replication为默认值3,即一个文件默认保存3份;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
mapred-env.sh配置
输入命令:vi mapred-env.sh
输入i进入编辑模式,在# export JAVA_HOME=/home/y/libexec/jdk1.6.0/ 这一句下面添加JAVA_HOME的路径:export JAVA_HOME=/usr/java/jdk1.7.0_80;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;通过此步骤设置mapreduce运行环境;
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/usr/java/jdk1.7.0_80
mapred-site.xml配置
输入命令:cp mapred-site.xml.template mapred-site.xml 进行文件拷贝;
输入命令:vi mapred-site.xml
输入i进入编辑模式,在<configuration>、</configuration>之间编辑:设置mapreduce运行框架为yarn;设置任务日志地址mapreduce.jobhistory.address为主节点的10020端口,此处主节点设置为master(注意主节点需更改为自己的主节点);设置日志服务地址为主节点的19888端口;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- jobhistory properties -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
slaves配置
输入命令:vi slaves
输入i进入编辑模式,删除localhost,输入各个子节点名称,此处输入slave1、slave2、slave3(各占一行);修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;通过此步骤设置了子节点;
slave1
slave2
slave3
yarn-env.sh配置
输入命令:vi yarn-env.sh
输入i进入编辑模式,在# export JAVA_HOME=/home/y/libexec/jdk1.6.0/ 这一句下面添加JAVA_HOME的路径:export JAVA_HOME=/usr/java/jdk1.7.0_80;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;通过此步骤设置yarn运行环境;
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/usr/java/jdk1.7.0_80
yarn-site.xml配置
输入命令:vi yarn-site.xml
输入i进入编辑模式,在<configuration>、</configuration>之间编辑:设置resourcemanager位置在主节点;设置resourcemanager地址在主节点8032端口上;设置调度器地址在主节点8030端口等;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data/tmp/logs</value>
</property>
</configuration>
设置环境变量
输入命令:vi /etc/profile
输入i进入编辑模式,在底下添加JAVA_HOME、HADOOP_HOME路径,并添加至系统路径PATH(使用美元符号$指定变量,路径与路径之间用:分隔),修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
退出之后输入命令:source /etc/profile 使前面的修改生效;
export JAVA_HOME=/usr/java/jdk1.7.0_80
export HADOOP_HOME=/usr/local/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin
3、虚拟机克隆
关闭master虚拟机,右键-管理-克隆-克隆至虚拟机的当前状态(C)-创建完整克隆(F),虚拟机名称命名为slave1;使用同样方式克隆出虚拟机slave2、slave3;
进入虚拟机slave1,输入用户名root,密码123456;
运行命令:rm -rf /etc/udev/rules.d/70-persistent-net.rules 删除文件;
运行命令:ifconfig -a 查看硬件地址Hwaddr和网卡设备,截图记录;
运行命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0
输入i进入编辑模式,DEVICE由eth0修改为eth1(参考截图,多数为eth1);修改Hwaddr(与截图保持一致);将UUID这一行注释掉;将IPADDR地址由130改为131;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
DEVICE=eth1
HWADDR=00:0C:29:11:14:C5
TYPE=Ethernet
##UUID=923f1922-5e57-4938-98b3-6ebd63eea97a
ONBOOT=yse
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.128.131
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNSI=192.168.128.2
运行命令:vi /etc/sysconfig/network
输入i进入编辑模式,HOSTNAME由master.centos.com修改为slave1.centos.com;修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
NETWORKING=yes
HOSTNAME=slave1.centos.com
运行命令:reboot 重启虚拟机slave1;
重启slave1虚拟机后,输入root及密码123456登陆;输入ifconfig查看IP是否已更改;
对虚拟机slave2、slave3使用同样的方式进行修改;注意slave2的IPADDR需改成132,slave3的IPADDR需改成133;
重启slave1、slave2、slave3后,使用Xshell新建连接会话分别连接slave1、slave2、slave3;
4、配置SSH免密码登陆
在Xshell主节点master会话中输入命令:ssh-keygen -t rsa 连续按三次Enter键,生成公钥和私钥;
输入命令:cd /root/.ssh/ 执行ls可看到公钥和私钥;
输入命令: vi /etc/hosts
输入i进入编辑模式,可看到映射关系如下图所示,此映射关系可删除也可保留;
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
在映射关系下方添加新映射:节点IP、节点名称、主机名(分别输入主节点和子节点的IP、节点名称、主机名;需要根据自己的节点和主机名设置);修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.128.130 master master.centos.com
192.168.128.131 slave1 slave1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com
在Xshell子节点slave1会话中输入命令:vi /etc/hosts 修改子节点文件;
192.168.128.130 master master.centos.com
192.168.128.131 slave1 slave1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com
同样的对子节点slave2、slave3进行修改;
返回主节点连接,输入命令:ssh-copy-id -i /root/.ssh/id_rsa.pub master将公钥传到master节点上(会提示是否连接,输入yes,输入密码123456)
输入命令:ssh-copy-id -i /root/.ssh/id_rsa.pub slave1将公钥传到slave1节点上
输入命令:ssh-copy-id -i /root/.ssh/id_rsa.pub slave2将公钥传到slave2节点上
输入命令:ssh-copy-id -i /root/.ssh/id_rsa.pub slave3将公钥传到slave3节点上
在master节点输入ssh slave1进入slave1节点;输入exit退出;
在master节点输入ssh slave2进入slave2节点;输入exit退出;
在master节点输入ssh slave3进入slave3节点;输入exit退出;
由这三步检测可知无密码登陆已经设置成功;
5、配置ntp时间同步服务&格式化
在主节点master上运行命令:mount /dev/dvd /media(把/dev/dvd下的信息挂载到根目录下的media文件夹,注意:dvd后需输入空格)
输入命令:yum -y install ntp 下载ntp(结果出现Complete表明下载成功)
在子节点slave1、slave2、slave3节点执行同样操作,挂载yum源并下载安装ntp;
在主节点输入命令:vim /etc/ntp.conf
输入i进入编辑模式,将底下server开头的行注释掉,输入如图所示信息,修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10
在子节点slave1输入命令:vim /etc/ntp.conf
输入i进入编辑模式,将底下server开头的行注释掉,输入:server master,修改完成后按Esc退出编辑,输入: 后键入wq保存修改并退出;
对slave2、slave3执行同样操作;
在主节点和各个子节点输入命令:service iptables stop & chkconfig iptables off
该命令作用是:永久关闭防火墙
在主节点上输入命令:service ntpd start & chkconfig ntpd on
该命令作用是:启动ntp服务;并设置为永久启动;
在子节点slave1输入命令:ntpdate master
该命令进行时间同步,同样的在slave2、slave3执行ntpdate master
在每个子节点上输入命令:service ntpd start & chkconfig ntpd on
注意:需按顺序执行;
在主节点上执行命令:hdfs namenode -format 进行格式化
若看到输出:
INFO commom.Storage:Storage directory /data/hadoop/hdfs/name has been successfully formatted.
则证明集群配置成功,否则需返回对每个节点的配置文件检查并修改后重新格式化;(根据失败提示可定位到配置文件)
五、集群的启动和关闭
启动集群:
输入命令:cd /usr/local/hadoop-2.6.4/sbin 通过ls查看该目录下文件;
输入命令:./start-dfs.sh 启动dfs;
输入命令:./start-yarn.sh 启动yarn框架服务;
输入命令:./mr-jobhistory-daemon.sh start historyserver 启动history服务;
在主节点、子节点上执行命令:jps 查看已开启的服务;
正常情况下,主节点应该有:SecondaryNameNode、ResourceManager、NameNode、JobHistoryServer、Jps服务;子节点应该有:NodeManager、Jps、DataNode服务;若没有这些服务,可能配置有问题或时间未同步导致部分节点未启动,需返回检查配置;
关闭集群:
集群的关闭不能直接关闭虚拟机,需要按指定顺序关闭集群服务;
在主节点上输入命令:./stop-yarn.sh 关闭yarn框架;
输入命令:./stop-dfs.sh 关闭dfs的NameNode、DataNode及SecondaryNameNode;
输入命令:./mr-jobhistory-daemon.sh stop historyserver 关闭history服务;
输入命令:jps 查看是否已关闭集群服务;