hadoop-2.6.0-cdh5.16.2集群最详细、一步到位搭建、还提供hadoop2.6.0-cdh5.16.2安装包!

前言

最近公司需要搭建一套基于hadoop-2.6.0-cdh5.16.2的环境,cdh5的官网也需要登陆,hadoop的压缩包也找了很久(下面提供网盘🔗),网上这个版本的部署参考资料很零散,没找到有哪一篇可以从头到尾一次性成功的,尝试了十多篇博客的部署方式,结合自己在部署过程中遇到的问题,整理了这一篇文章

一、服务器规划

服务分布

节点NN
(NameNode)
JN
(JournalNode)
ZKFC
(DFSZKFailoverController)
ZK
(Zookeeper)
DN
(DataNode)
RM
(ResourceManager)
NM
(NodeManager)
hadoop-001
(192.168.1.10)
*******
hadoop-002
(192.168.1.11)
******
hadoop-003
(192.168.1.12)
*****

部署路径

/home/server

开放端口

zookeepr:2181、2888、3888

hdfs:8485、9000、50070、50010、50020、50075

yarn:8030、8031、8032、8033、8041、8042、8088

mysql:3306

二、所有服务器下载安装包并解压

安装包:

hadoop:hadoop-2.6.0-cdh5.16.2(网盘:https://pan.baidu.com/s/1aOlEiCventeG8TZYC3I46A?pwd=i3vw

hadoop2.6.0-native依赖库(.so文件)(网盘:https://pan.baidu.com/s/1HOXvAgsAF8xIUycMQGAWDA?pwd=cwja

zooker:https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz

解压到:

/home/server/hadoop-2.6.0-cdh5.16.2

/home/server/apache-zookeeper-3.8.4-bin

hadoop2.6.0-native依赖库解压后(一定要在linux下解压,window解压之后会有意想不到的问题),将里面的文件全都复制到/home/server/hadoop-2.6.0-cdh5.16.2/lib/native里面

三、配置服务器之间ssh免密登陆

修改/etc/hosts

三个服务器都加入下面域名映射

192.168.1.10    hadoop-001
192.168.1.11    hadoop-002
192.168.1.12    hadoop-003

创建hadoop账号

# 创建账号
sudo useradd hadoop -m -s /bin/bash -g develop

# 设置密码
sudo passwd hadoop

将hadoop、zookeeper的目录所有者都改成hadoop

sudo chown -R hadoop:develop /home/server/hadoop-2.6.0-cdh5.16.2
sudo chown -R hadoop:develop /home/server/apache-zookeeper-3.8.4-bin

设置服务器hostname

三台服务器分别设置hostname

# 服务器hadoop-001
sudo hostnamectl set-hostname hadoop-001

# 服务器hadoop-002
sudo hostnamectl set-hostname hadoop-002

# 服务器hadoop-003
sudo hostnamectl set-hostname hadoop-003

设置三台服务器的hadoop账号ssh免密登陆

三台服务器,都执行相同操作

1、切换hadoop账号登陆服务器

ssh hadoop@localhost 

2、进入hadoop家目录的.ssh文件夹(没有则创建) /home/hadoop/.ssh

3、生成密钥

# 三个服务器都执行
ssh-keygen -t rsa

# 一路回车即可
# 会在.ssh文件夹下生成 id_rsa、id_rsa.pub
# 在服务器hadoop-001执行
ssh-copy-id hadoop@hadoop-001

# 在服务器hadoop-002执行
ssh-copy-id hadoop@hadoop-002

# 在服务器hadoop-003执行
ssh-copy-id hadoop@hadoop-003

然后在各自服务器的/home/hadoop/.ssh/authorized_keys文件中加入其他服务器的 /home/hadoop/.ssh/id_rsa.pub内容

4、重启sshd

sudo systemctl restart sshd

5、测试

尝试在hadoop-001登陆hadoop-002、hadoop-003,能不输入密码登陆则成功

ssh hadoop@hadoop-002 

四、部署zookeeper集群

按照服务器规划,三台服务器搭建zookeeper集群

统一在hadoop-001服务器上修改zookeeper的配置文件,然后分发给其他服务器

一切操作都基于hadoop账号登陆

进入zookeeper目录

cd /home/server/apache-zookeeper-3.8.4-bin

复制zoo_sample.cfg保存为zoo.cfg

cp conf/zoo_sample.cfg conf/zoo.cfg

修改 zoo.cfg

修改dataDir、dataLogDir参数的值

dataDir=/home/server/apache-zookeeper-3.8.4-bin/zkdata
dataLogDir=/home/server/apache-zookeeper-3.8.4-bin/logs

在配置文件后面加入

server.1=hadoop-001:2888:3888
server.2=hadoop-002:2888:3888
server.3=hadoop-003:2888:3888

将配置文件分发到其他服务器

scp  -r conf/ hadoop@hadoop-002:/home/server/apache-zookeeper-3.8.4-bin
scp  -r conf/ hadoop@hadoop-003:/home/server/apache-zookeeper-3.8.4-bin

每个服务器设置自己的myid

# 在hadoop-001的zookeeper目录执行
mkdir zkdata
echo 1 > zkdata/myid

# 在hadoop-002的zookeeper目录执行
mkdir zkdata
echo 2 > zkdata/myid

# 在hadoop-003的zookeeper目录执行
mkdir zkdata
echo 3 > zkdata/myid

在每个服务器上启动zookeeper

./bin/zkServer.sh start

五、部署hadoop集群

统一在hadoop-001机器上修改配置,然后分发给其他服务器

一切操作都基于hadoop账号登陆

进入hadoop目录

cd /home/server/hadoop-2.6.0-cdh5.16.2

修改 etc/hadoop/core-site.xml

在 configuration 块中加入

<!--hdfs-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>

<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/server/hadoop-2.6.0-cdh5.16.2/tmp</value>
</property>

<!--zookeeper集群地址-->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop-001:2181,hadoop-002:2181,hadoop-003:2181</value>
</property>

<!--ipc超时设置-->
<property>
    <name>ipc.client.connect.max.retries</name>
    <value>100</value>
    <description>Indicates the number of retries a client will make to establish
      a server connection.
    </description>
</property>
<property>
    <name>ipc.client.connect.retry.interval</name>
    <value>10000</value>
    <description>Indicates the number of milliseconds a client will wait for
    before retrying to establish a server connection.
    </description>
</property>

<!--账号代理-->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

修改 etc/hadoop/hdfs-site.xml

在 configuration 块中加入

<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
 
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/server/hadoop-2.6.0-cdh5.16.2/ha/dfs/name</value>
</property>
 
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/server/hadoop-2.6.0-cdh5.16.2/ha/dfs/data</value>
</property>
 
<property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>/home/server/hadoop-2.6.0-cdh5.16.2/ha/dfs/secondary</value>
</property>
 
<!-- 以下是  一对多,逻辑到物理节点的映射 -->
<!-- core-site.xml中fs.defaultFS填的那个value,就是这个逻辑集群名称 -->
<property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
</property>

<!--定义逻辑集群的物理节点(NameNode)-->
<property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
</property>
<!--nn1-->
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>hadoop-001:9000</value>
</property> 
<property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>hadoop-001:50070</value>
</property>

<!--nn2-->
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>hadoop-002:9000</value>
</property>
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>hadoop-002:50070</value>
</property>

<!--节点宕机超时设置,默认10分钟+30秒,dfs.namenode.heartbeat.recheck-interval 单位是毫秒,dfs.heartbeat.interval单位是秒 -->
<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>50000</value>
</property>
<property>
    <name>dfs.heartbeat.interval</name>
    <value>3</value>
</property>
 
 
<!-- 以下是JN在哪里启动,数据存那个磁盘 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop-001:8485;hadoop-002:8485;hadoop-003:8485/mycluster</value>
</property>
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/server/hadoop-2.6.0-cdh5.16.2/ha/dfs/jn</value>
</property>

<!-- HA角色切换的代理类和实现方法,我们用的ssh免密 --> 
<property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--HA模式下,要设置 shell(true) 这个值,不然namenode active节点宕机后,standby不会切换 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    <value>shell(true)</value>
</property>
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/hadoop/.ssh/id_dsa</value>
</property>
 
<property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
</property>
 
<!-- 开启自动化: 启动zkfc -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
 
<!-- 开启webhdfs -->
<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

修改 etc/hadoop/yarn-site.xml

在 configuration 块中加入

<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>

<!--设置zookeeper集群地址-->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop-001:2181,hadoop-002:2181,hadoop-003:2181</value>
</property>
 
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>kkrm</value>
</property>

<!--设置ResourceManager节点--> 
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm3</value>
</property>

<!-- rm1 -->
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop-001</value>
</property>
<!-- 指定rm1 的web端地址-->
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop-001:8088</value>
</property>
<!--指定rm1的内部通讯地址 -->
<property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>hadoop-001:8032</value>
</property>


<!-- rm3 -->
<property>
    <name>yarn.resourcemanager.hostname.rm3</name>
    <value>hadoop-003</value>
</property>
<!-- 指定的web端地址-->
<property>
    <name>yarn.resourcemanager.webapp.address.rm3</name>
    <value>hadoop-003:8088</value>
</property>
<!--指定的内部通讯地址 -->
<property>
    <name>yarn.resourcemanager.address.rm3</name>
    <value>hadoop-003:8032</value>
</property>
 
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
 
<property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
 
<property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
 
<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.nodemanager.resource.memory-mb</name>
    <value>4096</value>
</property>

修改 etc/hadoop/mapred-site.xml

默认没有mapred-site.xml,需要从mapred-site.xml.template复制一份

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

在 configuration 块中加入

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
 
<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=/home/server/hadoop-2.6.0-cdh5.16.2</value>
</property>
 
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=/home/server/hadoop-2.6.0-cdh5.16.2</value>
</property>
 
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=/home/server/hadoop-2.6.0-cdh5.16.2</value>
</property>

<property>
    <name>mapreduce.map.memory.mb</name>
    <value>1024</value>
</property>
 
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>1024</value>
</property>
 
<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx1024m</value>
</property>
 
<property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx1024m</value>
</property>

修改 sbin/start-dfs.sh,sbin/stop-dfs.sh

sbin/start-dfs.sh,sbin/stop-dfs.sh两个脚本在开头加入

HDFS_ZKFC_USER=hadoop
HDFS_JOURNALNODE_USER=hadoop
HDFS_DATANODE_USER=hadoop
HDFS_DATANODE_SECURE_USER=hadoop
HDFS_NAMENODE_USER=hadoop
HDFS_SECONDARYNAMENODE_USER=hadoop

修改 sbin/start-yarn.sh,sbin/stop-yarn.sh

sbin/start-yarn.sh,sbin/stop-yarn.sh两个脚本开头加入

YARN_RESOURCEMANAGER_USER=hadoop
HDFS_DATANODE_SECURE_USER=hadoop
YARN_NODEMANAGER_USER=hadoop

修改 etc/hadoop/slaves

如果里面有内容,则清掉,写入下面内容

hadoop-001
hadoop-002
hadoop-003

将修改分发到其他服务器

scp -r conf/ hadoop@hadoop-001:/home/server/hadoop-2.6.0-cdh5.16.2
scp -r conf/ hadoop@hadoop-002:/home/server/hadoop-2.6.0-cdh5.16.2

scp -r sbin/ hadoop@hadoop-001:/home/server/hadoop-2.6.0-cdh5.16.2
scp -r sbin/ hadoop@hadoop-002:/home/server/hadoop-2.6.0-cdh5.16.2

初始化namenode、zkfc

1、在所有服务器上启动 journalnode

nohup ./bin/hdfs journalnode &
tail -f nohup.out

看到有输出监听8485端口,则表示journalnode启动成功

2、初始化namenode(记住,这条命令只需要在hadoop-001服务器上执行即可!)

./bin/hdfs namenode -format

执行成功之后,会在 ha/dfs/ 目录下有一个 name 的文件夹

3、初始化zkfc(记住,这条命令只需要在hadoop-001服务器上执行即可!)

./bin/hdfs zkfc  -formatZK

4、namenode和zkfc都初始化完了之后,将各个服务器的 journalnode 停掉

用 jsp 命令出journalnode进程号,用kill停掉

5、将hadoop-001服务器上的 ha/dfs/name 文件夹同步到 hadoop-003

scp -r ha/dfs/name/ hadoop@hadoop-003:/home/server/hadoop-2.6.0-cdh5.16.2/ha/dfs/

开始启动集群!!!

1、启动!!

在 hadoop-001 机器上执行

./sbin/start-all.sh

在每个服务器上执行 jps 命令看服务进程,按照服务器规划,每个服务器要有以下服务在跑

# hadoop-001
NameNode
JournalNode
DFSZKFailoverController
DataNode
NodeManager
ResourceManager

# hadoop-002
NameNode
JournalNode
DFSZKFailoverController
DataNode
NodeManager

# hadoop-003
JournalNode
DataNode
NodeManager
ResourceManager

这些进程之间的关系

hdfs
  |--NameNode  存储元数据
     |--JournalNode  辅助 NameNode 写日志
     |--DFSZKFailoverController  辅助 NameNode HA
  |--DataNode  存储数据

yarn
  |--NodeManager  节点管理
  |--ResourceManager  资源管理

通常情况下,hadoop-003服务器上会少一个ResourceManager服务,因为star-all.sh脚本只能起自己的ResourceManager服务,其他服务器上的启动不了(不知道为什么)

所以如果hadoop-003缺少ResourceManager服务,那么需要手动去hadoop-003服务器上执行

./sbin/yarn-daemon.sh start resourcemanager

验证

验证resourceManager是否启动

./bin/yarn rmadmin -getServiceState rm1
./bin/yarn rmadmin -getServiceState rm3

浏览器访问yarn的web页面(http://hadoop-001的ip:8088/cluster)

浏览器访问hdfs的web页面(http://hadoop-001的ip:50070)

验证hdfs状态

./bin/hdfs haadmin -getServiceState nn1
./bin/hdfs haadmin -getServiceState nn2

扩展知识: 将其中一台hdfs状态强制改为active

./bin/hdfs haadmin -transitionToActive --forcemanual nn1
  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值