hadoop分布式安装

来源:互联网 发布:淘宝联盟高佣金通过 编辑:程序博客网 时间:2024/06/10 20:53

本文约定:

CentOS环境安装  CentOS-6.5-x86_64-bin-DVD.iso

三台机器分别为hadoop01、hadoop02、hadoop03

版本:hadoop-2.6.4 jdk1.8.0_112 zookeeper-3.4.6

安装目录:/opt 下

集群的部署情况
hadoop01 192.168.100.100 jdk、hadoop、zknamenode、zk、journade、zkfc
hadoop02 192.168.100.101 jdk、hadoop、zknamenode、zk、journade、zkfc rm、nm、datanode
hadoop03 192.168.100.102 jdk、hadoop、zkzk、journade、rm、nm、datanode

zk:zookeeperrm:resourcemanager nm:nodemanager


安装linux环境

一、防火墙
1、关闭防火墙
]# service iptables stop
2、从开机启动项中关闭防火墙
]# chkconfig iptables off/on-->打开
3、查看防火墙状态
]# service iptables status
4、查看防火墙的开机状态
]# chkconfig --list | grep iptables
二、主机名
]# vim /etc/sysconfig/network
修改其中的host
HOSTNAME=hadoop01
修改IP地址
选择手动manual
添加IP地址
IP:192.168.100.101
NetMask:255.255.255.0
GatWay:192.168.100.2
DNS: 124.207.160.106,219.239.26.42
重启服务:service network restart
配置域名映射:
]# vim /etc/hosts
加入一行内容:
192.168.100.101hadoop01
同时在windows的域名映射文件C:/windows/System32/drivers/etc/hosts中加入:
192.168.100.101hadoop01
关闭selinux
vim /ect/selinux/config
设置selinux=disabled
1、修改linux的启动模式(可以略过本步骤)
vim /etc/inittab
将模式从5修改为3
id:5:initdefault:---》id:3:initdefault:

重启linux系统

配置ssh免密码登录:
配置各个机器间的免密码登录
在三台机器上面都生成相应的密码
ssh-keygen -t rsa

在hadoop01上面的操作:
ssh-copy-id -i root@hadoop02
ssh-copy-id -i root@hadoop03
在hadoop02上面的操作:
ssh-keygen -t rsa
ssh-copy-id -i root@hadoop02
ssh-copy-id -i root@hadoop03
在hadoop03上面的操作:
ssh-keygen -t rsa
ssh-copy-id -i root@hadoop03

安装jdk
1、安装JDK
当前目录:/opt
1°、解压
opt]# tar -zxvf soft/jdk-8u112-linux-x64.tar.gz
2°、重命名:
opt]# mv jdk1.8.0_112/ jdk
3°、将JAVA_HOME配置到linux的环境变量里面:
vim /etc/profile.d/hadoop-etc.sh
加入以下内容:
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
4°、让环境变量生效:
source /etc/profile.d/hadoop-etc.sh
5°、测试jdk是否安装成功:
java -version

拷贝至hadoop02 和hadoop03上

scp -r jdk root@hadoop02:/opt

scp -r jdk root@hadoop03:/opt

ZooKeeper的搭建:

修改主机名
vim /etc/sysconfig/network
同时在这三台其中的/etc/hosts文件中把
192.168.100.101hadoop01
192.168.100.102hadoop02
192.168.100.103hadoop03

hadoop01上解压:tar -zxvf zookeeper-3.4.6.tar.gz -C /opt

mv  zookeeper-3.4.6  zookeeper

在/opt/zookeeper/conf下 cp zoo_sample.cfg zoo.cfg配置

dataDir=/opt/zookeeper/data(需手动创建该目录)

server.101=hadoop01:2888:3888
server.102=hadoop02:2888:3888
server.103=hadoop03:2888:3888

再在/opt/zookeeper/data下 touch myid   ------->    echo 101 > myid

添加环境变量

vim /etc/profile.d/hadoop-etc.sh
加入以下内容:
export
ZOOKEEPER_HOME=/opt/zookeeper

export PATH=$ZOOKEEPER_HOME/bin:$PATH  

拷贝至hadoop02 和hadoop03上

scp -r zookeeper root@hadoop02:/opt

scp -r zookeeper root@hadoop03:/opt

再将相对应机器上的myid修改为102和103

hadoop01/02/03需要使环境变量生效

再每台机器上启动zk服务

zkServer.sh start

启动之后可以通过zkServer.sh status查看每一台zk的角色
有一个leader和两个follower

Hadoop的安装
hadoop01机器上
1°、解压:
]# tar -zxvf /opt/soft/hadoop-2.6.4.tar.gz -C /opt/
2°、重命名:
opt]# mv hadoop-2.6.4/ hadoop
3°、添加hadoop相关命令到环境变量中
vim /etc/profile.d/hadoop-eco.sh
加入以下内容:
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
            3-1 生效
source /etc/profile.d/hadoop-eco.sh
4°、创建数据存储目录:(mkdir -p)
1) NameNode 数据存放目录: /opt/hadoop-repo/name
2) SecondaryNameNode 数据存放目录: /opt/hadoop-repo/secondary
3) DataNode 数据存放目录: /opt/hadoop-repo/data
4) 临时数据存放目录: /opt/hadoop-repo/tmp
5°、配置

1°、hadoop-env.sh---->hadoop运行环境配置
修改JAVA_HOME
export JAVA_HOME=/opt/jdk
2°、yarn-env.sh---->yarn的运行环境配置
修改JAVA_HOME
export JAVA_HOME=/opt/jdk
3°、slaves(删除原有的localhost)---->是datanode和nodemanager这些从节点的配置项
添加一下两行内容 为的就是能够让nodemanager操作本地datanode中的数据,而尽量不要跨机器):
hadoop02
hadoop03
4°、hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的edits数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop-repo/journal</value>
</property>
<property>  
<name>dfs.namenode.name.dir</name>  
<value>/opt/hadoop-repo/name</value>  
</property>  
<property>  
<name>dfs.datanode.data.dir</name>  
<value>/opt/hadoop-repo/data</value>  
</property> 
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
  sshfence
  shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
5°、配置core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-repo/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>
6°、配置mapred-site.xml
<configuration>
<!-- mr依赖的框架名称 yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- mr转化历史任务的rpc通信地址-->
<property>  
<name>mapreduce.jobhistory.address</name>  
<value>hadoop02:10020</value>  
</property>
<!-- mr转化历史任务的http通信地址-->
<property>  
<name>mapreduce.jobhistory.webapp.address</name>  
<value>hadoop02:19888</value>  
</property>
<!-- 会在hdfs的根目录下面创建一个history的文件夹,存放历史任务的相关运行情况-->
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/history</value>
</property>
<!-- map和reduce的日志级别-->
<property>
<name>mapreduce.map.log.level</name>
<value>INFO</value>
</property>
<property>
<name>mapreduce.reduce.log.level</name>
<value>INFO</value>
</property>
</configuration>
7°、配置yarn-site.xml
<configuration>
<!-- 开启RM高可靠 -->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>hadoop02</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>hadoop03</value>
</property>
<!-- 指定zk集群地址 -->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
</configuration>

8°、格式化hadoop文件系统
hdfs namenode -format
表示成功:Storage directory /opt/hadoop-repo/name has been successfully formatted.

9°、拷贝在hadoop01上面配置的hadoop文件

scp -r hadoop-repo/ root@hadoop02:/opt/
scp -r hadoop-repo/ root@hadoop03:/opt/
scp -r /opt/hadoop root@hadoop02:/opt
scp -r /opt/hadoop root@hadoop03:/opt

启动Hadoop集群

1°、确保zk集群是启动的(每一台都启动 zkServer.sh start)
2°、启动journalnode集群(每一台都要启动)
启动命令hadoop-daemon.sh start journalnode
可以通过jps查看到多了一个进程JournalNode
3°、对namenode进行格式化
在配置了NameNode机器中找一台,进行格式化,只格式化一次即可,
然后将生成的NameNode自身的元数据信息拷贝到另外一台NameNode的对应目录中区dfs.namenode.name.dir
在hadoop01上面执行格式化:
hdfs namenode -format
成功标志:Storage directory /opt/hadoop-repo/name has been successfully formatted.
将namenode元数据信息拷贝到uplooking02上面去:
scp -r hadoop-repo/name/* root@hadoop02:/opt/hadoop-repo/name/
4°、在namenode对应的任何一台机器上面格式化zkfc,目的在zk中创建维护namenode状态的目录
hdfs zkfc -formatZK
5°、分别启动hdfs和yarn
在hadoop01上面执行如下命令:
start-dfs.sh
在hadoop02上面执行如下命令:
start-yarn.sh(启动ResourceManager和NodeManager)
在hadoop03上面执行如下命令:
yarn-daemon.sh start resourcemanager

原创粉丝点击