三、分布式hadoop集群搭建
1、hadoop简介
- 官网
- 简介
Apache Hadoop 是一个框架,用于在由商品硬件构建的大型集群上运行应用程序。Hadoop框架透明地为应用程序提供可靠性和数据移动性。Hadoop实现了一个名为 Map / Reduce 的计算范例 ,其中该应用程序分为许多小工作片段,每个小片段都可以在集群中的任何节点上执行或重新执行。另外,它提供了一个分布式文件系统(HDFS ),该文件系统将数据存储在计算节点上,从而在整个群集中提供了很高的聚合带宽。两者 的MapReduce 和Hadoop分布式文件系统的设计使得节点故障是由框架自动处理。
2、环境准备
java开发环境前面已经有讲述这里不再累赘详情看系列之第一篇(需要),分布式zookeeper已经搭建完成环境搭建可详细查看系列之第二篇提供了完整的搭建过程。我们所要搭建的hadoop版本是hadoop 2.7.2。本文搭建了一个由三节点(master、slave1、slave2)构成的Hadoop完全分布式集群(区别单节点伪分布式集群)
hadoop官网下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
3、搭建hadoop
(1) 创建hadoop用户和hadoop用户组
groupadd hadoop // 创建用户组
useradd hadoop –g hadoop // 创建用户
passwd hadoop // 设置密码
su - hadoop // 跳转到hadoop用户并刷新环境
(2) 配置host
将所有用到的机器都配置hosts(包括zookeeper地址,hadoop集群) 如下
vi /etc/hosts
解释:上面三个是我们要用的hadoop集群节点,后面是zookeeper机器节点,三个节点都需要配置。
(3) 配置ssh
hadoop集群启动的启动需要在一台执行启动所有的从节点所以需要配置ssh免密登录执行相关命令所以互相配置ssh免密登录非常重要。
- 配置sudo权限和免密不需要询问密码
路径: vi /etc/sudoers
改变: 末尾添加 hadoop ALL=(ALL) ALL 保存后退出,并切换回hadoop用户
执行用户: root用户
路径: vi /etc/ssh/ssh_config
修改文件: StrictHostKeyCkecking no
修改
成为
目的是ssh登录时不再需要询问是否登录
注意:如果配置3台同时互访不需要密码登录则需要在多个节点上同时生成秘钥,同时添加到文件中,如下:(3台同时保持一致)
- ssh设置
设置master节点和两个slave节点之间的双向ssh免密通信,下面以master节点ssh免密登陆slave节点设置为例,进行ssh设置介绍(以下操作均在master机器上操作所有操作都保持一致执行下面操作):
在hadoop用户下面
----------step1
首先进入 ~/.ssh目录 执行 cd ~/.ssh 如果出现不存在文件夹错误则需要执行ssh localhost(是因为没有执行过登录需要执行再执行就有了)
-----------step2
进入目录: cd ~/.ssh
生成集群各个节点的rsa密钥:ssh-keygen -t rsa (这里连续按键enter键可以了)
生成两个文件
改变权限 chmod 644 id_rsa.pub
----------step3生成相对应密码文件
创建秘钥文件: touch authorized_keys
给文件赋值: chmod 644 authorized_keys
拷贝秘钥:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
剩下两个节点同样操作生成秘钥文件并且赋值一样的权限,并且都添加进来
三个全部加进来互相访问
---------- step 4
查看是否开启防火墙如果开起了要关闭,检查如果有则还需要配置hosts.allow
三台同样配置hosts.allow
vi /etc/hosts.allow
----------- step 5 ssh登录验证
ssh "ip"
也可以使用ssh “hosts进行登录”
------------step6整理known_hosts集群节点保持一致
说明:有可能这样下来还不能免密登录这说明秘钥文件还是有问题,检查秘钥文件每个是不是完整的一条,有的时候这样粘贴复制的话就使得一个秘钥变成了两行秘钥发生变化这样的问题一定要确认和注意,还有就是互相访问的时候记得一定要先退出。
(4) 配置hadoop配置文件
主要配置文件
配置hadoop的配置文件主要改变core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml,文件都在 etc/hadoop下面,所有的配置文件都在这里
可能会遇到错误:(意思是找不到java路径这时候我们应该改变一个文件hadoop-env.sh)
改变java路径
我是用的是外部的zookeeper
- 需要创建这样目录结构
- 配置core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs:"hadoop主节点":9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/app/hadoop/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1:12181,zk2:12181,zk3:12181</value>
</property>
<property>
<name>hadoop.proxyuser.appadmin.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.appadmin.groups</name>
<value>*</value>
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.httpaddress</name>
<value>"hadoop主节点":9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/app/hadoop/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/app/hadoop/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
- mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>"hadoop主节点":10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>"hadoop主节点":19888</value>
</property>
<property>
<name>mapred.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapred.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
- slave
- yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>classloader.resolve-order</name>
<value>parent-first</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>"hadoop主节点":8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>"hadoop主节点":8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>000361-web-11450:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>"hadoop主节点":8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>000361-web-11450:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10000</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8000</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>3000</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2000</value>
</property>
</configuration>
4、配置hadoop环境变量并且启动hadoop
- 配置环境变量
#hadoop environment vars
export HADOOP_HOME=/app/hadoop/hadoop-2.7.2
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin CLASSPATH JAVA_HOME
- 验证环境
校验所有的节点的hadoop环境变量和java环境变量保证正确
- 启动
格式化namenode执行:hadoop namenode -format
执行启动脚本: start-all.sh
5、检查hadoop的运行状况
- 查看jps是否有以下几个进程存在,排除hbase的
- 登录页面查看
6、总结
至此分布式hadoop集群到此搭建完毕,后面继续跟进hbase的搭建和hadoop搭建的完善