史上最简单的Hadoop完全分布式环境搭建入门-单机部署

Hadoop的完全分布式环境搭建:第一篇单机部署

(提前声明:文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章,转载请注明)
(文章参考:Elasticsearch权威指南,Spark快速大数据分析文档,Elasticsearch官方文档,实际项目中的应用场景)
(帮到到您请点点关注,文章持续更新中!)
Git主页 https://github.com/Mydreamandreality

前景:因为公司数据以每日xxxGB的数据增长,故根据实际需求开始研究大数据存储与分析,清洗挖掘的相关技术,最后敲定了Hadoop+Hbase+Elasticsearch+spark等系列技术栈,现进入研究测试阶段

1

 - 关于Hadoop数据集群方案的个人愚见: 
 - 首先如果需要用hadoop进行大数据分析,那么你们的数据量一定是常规技术无法承载的
 - 否则就没有必要为了Hadoop而Hadoop,大数据的解决方案有很多,hadoop只是比较热门的一种    
 - 其次就是你们目前面临困境,比如是需要实时处理还是需要离线分析
 - 在选择前一定要先对选型的技术进行应用场景调研,生态圈,开源,文档,
 - 最后进行压测和速度测试,以及后续开发,运维的成本计算
 - 否则你拿MapReduce对数据进行实时计算,拿Elasticsearch做大量离线分析,
   日增长10TB数据,最后部署三个节点,发现每天各种宕机,节点异常,队列阻塞....那就有点难受了

->>>>>>>>>>>>>>>>>>>>>

 - 集群预规划:
 - 如果根据实际需求,就是最大的硬件成本投入,理论上讲,一个hadoop集群中
 - [NameNode,SeconddaryNameNode,masterNmaeNode]需要单独分配节点,所以至少需要三台服务器支撑
 - NameNode调动协调整体集群进行工作,在yarn之上有一个resourceManager比较吃资源,
   所以先要保证NameNode节点的配置
 - secondaryNameNode和DataNode节点的存储配置要保持大致相同,有一台是用做备份的节点

->>>>>>>>>>>>>>>>>>>>>>>>

 - 接下来就是硬件上的选择:CPU,内存,硬盘 ,这个当然是越高越好..........
 - 很荣幸我们友商有一份demo案例,友商给出的配置是单机双节点最低配置32G,8核
 - 数据集群节点之间交换数据频繁,千兆网卡,交换机配置占比较高
 - 如果存在单机单节点Elasticsearch,32G内存,4核CPU是最低配置,否则Elasticsearch会频繁宕机,
 - 在友商环境已经做过实验

->>>>>>>>>>>>>>>>>>>>>>>>

 - 接下来就是集群服务器节点数量规划
 - 我现在假设 已存在10TB数据,预计每日增长10G+,我们先保证一年内的集群正常工作,数据保留
 - 比较合理的计算方案为:(10G*365+10TB)*3*2=81TB *3是备份的需求*2是节点系统运算空间
 - 如果每台节点的存储空间为10TB,81/10=9台用于存储计算的节点,可能有其他紧急情况容灾服务器
 - 总结果:10台集群节点
 - 当然最终还是需要进行实际测试,一定数据量的情况下在X台服务器上的运行计算时间,
 - 根据实际的需求和指标再进行一个评定

此文章是在初期学习时部署Hadoop的个人文档记录,仅供参考,人不能一口吃成胖子,先从单机部署再到伪分布式最后的完全分布式,我都会总结成文档的形式,分享出来,有任何的问题可以留言讨论

  1. 安装VM.略过此步骤,下载Centos系统,下载地址centos参考链接:安装Centos
    1. 按照参考链接5分钟就能安装好,此处就不再重复了
    2. 在配置虚拟机时如果你的宿主机配置过硬尽量把内存和CPU调整的高一些
    3. 我的系统配置:内存2GB,4核处理器,40G硬盘(很卡,后续会跟公司申请服务器
  2. hostname设置为:HadoopNameNode,方便后续做完全分布式部署,设置免密登录,方便节点通信
  3. 开发环境关闭防火墙方便调试,临时关闭命令:service iptables stop,查看当前防火墙状态:
    service iptables status
  4. 设置VM虚拟网络环境,N个环境的子网IP网段都设置为192.168.100.xx-192.168.100.xxx(当前环境onecentos子网IP:192.168.253.100
  5. 卸载centos的OpenJdk,安装JDK1.8以上,卸载命令:
    1. 检查当前java安装包rpm -qa | grep Java
    2. rpm -e --nodeps 后面跟系统自带的jdk名
  6. 安装Hadoop2.6.0,配置环境变量(否则无法正常使 用hadoopshell命令)Hadoop下载链接,此处我使用2.6版本,下载后解压 tar -zxvf haddop.tar.gz
  7. 配置各自环境变量,配置路径 /etc/profile
java环境变量,在/etc/profile/文件追加
export JAVA_HOME="jdk安装路径"
export PATH=$JAVA_HOME/bin:$PATH
hadoop环境变量同上
  1. 验证环境:java-version hadoop version 正常返回当前version信息
  2. 编写测试案例,统计数据案例
  3. 编写hadoop shell命令
    1. haddop fs -mkdir 创建HDFS数据源
    2. hadoop fs -mkdir 创建HDFS输出源
    3. 创建数据: vi inputcount [内容随便写]
    4. hadoop fs - put 数据 数据源
    5. hadoop jar /usr/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount 数据源 输出源[jar之前的命令是我的hadoop安装地址]
    6. 执行统计程序
测试结果:
首先 :
测试过程中发现的问题:hadoop hdfs写入数据较慢,暂时不确定是否因为虚拟机配置不足
系统配置:内存2GB,4核处理器,40G硬盘
19/02/28 10:48:38 
INFO mapred。LocalJobRunner:减少任务执行器完成。
19/02/28 10:48:38 INFO mapreduce。任务:映射100%减少100%
19/02/28 10:48:38 INFO mapreduce。Job: Job job_local219547754_0001成功完成19/02/28 10:48:38 INFO mapreduce。
工作:计数器:33
文件系统计数器
文件:读取的字节数=541330
文件:写入的字节数=1042176
文件:读取操作数=0
文件:大读操作数=0
文件:写入操作数=0
使用映射-规约模式框架
地图输入记录= 19
地图输出记录= 18
地图输出字节= 149
映射输出实体化字节=80
输入字节= 95
结合输入记录= 18
结合输出记录= 7
减少输入组= 7
减少洗牌字节= 80
减少输入记录= 7
减少输出记录= 7
合并后的地图输出= 1
GC时间消耗(ms)=147
CPU时间(ms)=0
物理内存(字节)快照=0
虚拟内存(字节)快照=0
提交的堆使用总量(字节)=292028416BAD_ID = 0连接= 0IO_ERROR = 0WRONG_LENGTH = 0WRONG_MAP = 0WRONG_REDUCE = 0
文件输入格式计数器字节读= 98
文件输出格式计数器字节写= 58
执行日志:
14:47:44  启动任务
INFO mapred.LocalJobRunner: Starting task: attempt_local1584410053_0001_m_000000_0
14:50:20 任务结束 
INFO mapreduce.Job: Counters: 33
此操作涵盖数据写入,统计,输出

最终的测试结果:

task 启动时间 结束时间 是否成功 总耗时 总数据量 节点数量 系统配置
wordcount 10:07:03 10:07:03 Y 500毫秒 10条 1 内存2GB,4核处理器40G硬盘
task 启动时间 结束时间 是否成功 总耗时 总数据量 节点数量 系统配置
wordcount 10:07:03 10:07:24 Y 1000毫秒 66666条 1 内存2GB,4核处理器40G硬盘
task 启动时间 结束时间 是否成功 总耗时 总数据量 节点数量 系统配置
wordcount 10:07:12 10:07:37 Y 25秒 3000000条 1 内存2GB,4核处理器40G硬盘

发现问题点:
测试过程中发现的问题:hadoop hdfs写入数据(map)暂时不确定是否因为虚拟机配置不足
reduce测试中:宿主机的CPU飙的较高
300万条数据的文件大小为20MB,测试发现reduce对CPU的配置要求较高
(宿主机的CPU从15%飙到60%+)

有问题留言一起交流,
后续我会继续测试一下伪分布式和完全分布式的性能,进行一个对比


你可能感兴趣的:(#,Hadoop,大数据)