大数据hadoop分布式系统

时间:2021-04-13 06:06:35

一、背景介绍

     进入2012年,大数据(big data)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,并命名与之相关的技术发展与创新。它已经上过《纽约时报》《华尔街日报》的专栏封面,进入美国白宫官网的新闻,现身在国内一些互联网主题的讲座沙龙中,甚至被嗅觉灵敏的国金证券、国泰君安、银河证券等写进了投资推荐报告。
    数据正在迅速膨胀并变大,它决定着企业的未来发展,虽然很多企业可能并没有意识到数据爆炸性增长带来问题的隐患,但是随着时间的推移,人们将越来越多的意识到数据对企业的重要性。
    正如《纽约时报》2012年2月的一篇专栏中所称,“大数据”时代已经降临,在商业、经济及其他领域中,决策将日益基于数据和分析而作出,而并非基于经验和直觉。
哈佛大学社会学教授加里·金说:“这是一场革命,庞大的数据资源使得各个领域开始了量化进程,无论学术界、商界还是*,所有领域都将开始这种进程。

    现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。大数据(Big data)通常用来形容一个公司创造的大量非结构化和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。在现今的社会,大数据的应用越来越彰显他的优势,它占领的领域也越来越大,电子商务、O2O、物流配送等,各种利用大数据进行发展的领域正在协助企业不断地发展新业务,创新运营模式。有了大数据这个概念,对于消费者行为的判断,产品销售量的预测,精确的营销范围以及存货的补给已经得到全面的改善与优化。“大数据”在互联网行业指的是这样一种现象:互联网公司在日常运营中生成、累积的用户网络行为数据。这些数据的规模是如此庞大,以至于不能用G或T来衡量。
    大数据到底有多大?一组名为“互联网上一天”的数据告诉我们,一天之中,互联网产生的全部内容可以刻满1.68亿张DVD;发出的邮件有2940亿封之多(相当于美国两年的纸质信件数量);发出的社区帖子达200万个(相当于《时代》杂志770年的文字量);卖出的手机为37.8万台,高于全球每天出生的婴儿数量37.1万……
截止到2012年,数据量已经从TB(1024GB=1TB)级别跃升到PB(1024TB=1PB)、EB(1024PB=1EB)乃至ZB(1024EB=1ZB)级别。国际数据公司(IDC)的研究结果表明,2008年全球产生的数据量为0.49ZB,2009年的数据量为0.8ZB,2010年增长为1.2ZB,2011年的数量更是高达1.82ZB,相当于全球每人产生200GB以上的数据。而到2012年为止,人类生产的所有印刷材料的数据量是200PB,全人类历史上说过的所有话的数据量大约是5EB。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。而到了2020年,全世界所产生的数据规模将达到今天的44倍。每一天,全世界会上传超过5亿张图片,每分钟就有20小时时长的视频被分享。然而,即使是人们每天创造的全部信息——包括语音通话、电子邮件和信息在内的各种通信,以及上传的全部图片、视频与音乐,其信息量也无法匹及每一天所创造出的关于人们自身的数字信息量。
   这样的趋势会持续下去。我们现在还处于所谓“物联网”的最初级阶段,而随着技术成熟,我们的设备、交通工具和迅速发展的“可穿戴”科技将能互相连接与沟通。科技的进步已经使创造、捕捉和管理信息的成本降至2005年的六分之一,而从2005年起,用在硬件、软件、人才及服务之上的商业投资也增长了整整50%,达到了4000亿美元。


二、Hadoop是什么?

Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算.

Hadoop框架中最核心设计就是:HDFS和MapReduce.HDFS提供了海量数据的存储,MapReduce提供了对数据的计算.


HDFS:Hadoop Distributed File System,Hadoop的分布式文件系统.大文件被分成默认64M一块的数据块分布存储在集群机器中.


MapReduce:Hadoop为每一个input split创建一个task调用Map计算,在此task中依次处理此split中的一个个记录(record),map会将结果以key--value的形式输出,hadoop负责按key值将map的输出整理后作为Reduce的输入,Reduce Task的输出为整个job的输出,保存在HDFS上.


Hadoop的集群主要由 NameNode,DataNode,Secondary NameNode,JobTracker,TaskTracker组成.

大数据hadoop分布式系统

NameNode中记录了文件是如何被拆分成block以及这些block都存储到了那些DateNode节点.

NameNode同时保存了文件系统运行的状态信息. 

DataNode中存储的是被拆分的blocks.

Secondary NameNode帮助NameNode收集文件系统运行的状态信息.

JobTracker当有任务提交到Hadoop集群的时候负责Job的运行,负责调度多个TaskTracker.

TaskTracker负责某一个map或者reduce任务.


1.hdfs分布式文件系统

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

hdfs的优点

  • 高容错性 
 数据自动保存多个副本 
副本丢失后,自动恢复 
  • 适合批处理 
移动计算而非数据 
 数据位置暴露给计算框架 
  •  适合大数据处理 
 GB、TB、甚至PB级数据 
 百万规模以上的文件数量 
 10K+节点规模
  • 流式文件访问 
 一次性写入,多次读取 
 保证数据一致性 
  •  可构建在廉价机器上 
 通过多副本提高可靠性 
 提供了容错和恢复机制

2.mapreduce大规模数据集的并行运算

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

大数据hadoop分布式系统

三、安装环境

实验需要3台虚拟机,一主两从式,一台主机master当协调节点处理多个slave节点,用户能访问master节点来管理整个hadoop集群


硬件:3台虚拟机

内存:至少512MB

硬盘:至少20G

操作系统:rhel6.4 64 最小化安装

主机名 IP 描述
hadoop-master 10.0.200.200

namenoderesourcemanager

hadoop-slave1 10.0.200.201

datanodenodemanager

hadoop-slave2 10.0.200.202

datanodenodemanager


1.安装openssh

在每台虚拟机上安装openssh,最小化虚拟机默认没有安装,自行配置yum安装openssh3台虚拟机之间需要相互ssh登录

[root@master ~]#yum install openssh* -y

2. 配置主机名和IP

为了方便管理,规范性命名,使用连续网段的IP的静态IP


[root@master ~]#vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=hadoop-master


[root@master ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="System eth0"
HWADDR=B8:97:5A:00:4E:54
IPADDR=10.0.200.200
NETMASK=255.255.0.0
GATEWAY=10.0.2.253
DNS1=114.114.114.114


配置/etc/hosts,把/etc/hosts的IP信息分发到所有主机上

[root@master ~]# vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.200.200 hadoop-master
10.0.200.201      hadoop-slave1
10.0.200.202      hadoop-slave2

3.安装JDK

安装JDK参考百度,本实验使用 jdk1.8.0_31版本,由于hadoop使用java语言编写,所有运行hadoop的机器都要安装jdk


安装JDK如下效果

[root@master ~]# java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)

4.ssh无密登录

在所有机器上创建hadoop用户,统一密码hadoop,在master上创建hadoop用户的公钥,改名authorized_keys分发到所有机器上,授予600权限


[root@master ~]#useradd hadoop
[root@master ~]#passwd hadoop
[root@master ~]#su - hadoop
[hadoop@master ~]$ssh-keygen -t rsa
[hadoop@master ~]$ cd .ssh
[hadoop@master .ssh]$ mv id_rsa.pub authorized_key
[hadoop@master .shh]$ chmod 600 authorized_key

 

 
 
 
[hadoop@master .ssh]$ scp authorized_keys hadoop-slave1:~/.ssh/
 
 
 
 
 
[hadoop@master .ssh]$ scp authorized_keys hadoop-slave2:~/.ssh/

 

大数据hadoop分布式系统

可以看到在master上可以无密登录到slave1上,在后面数百台机器上运行hadoop集群就会机

5.hadoop安装和配置

在主节点上操作,解压hadoop-2.6.0.tar.gz到hadoop用户家目录,编辑hadoop的配置文件,用hadoop用户操作

hadoop官网下载
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.0/

[hadoop@master ~]# su - hadoop
[hadoop@master ~]$ tar zxvf hadoop-2.6.0.tar.gz
[hadoop@master ~]$ cd hadoop-2.6.0/etc/hadoop/
 
 

修改hadoop-env.sh和yarn-env.sh文件的JAVA_HOME来指定JDK的路径

[hadoop@master ~]$ vi hadoop-env.sh
 
 
export JAVA_HOME=/usr/java/jdk1.8.0_31
[hadoop@master ~]$ vi yarn-env.sh
 
 
export JAVA_HOME=/usr/java/jdk1.8.0_31

 
 

编辑从节点列表文件slaves

[hadoop@master etc]$vi slaves
hadoop-slvaes1hadoop-slaves2

编辑core-site.xml,指定主节点的地址和端口 
 

[hadoop@master etc]$ vi core-site.xml
<configuration><property>  <name>fs.defaultFS</name>  <value>hdfs://master:9000</value> </property></configuration>

 
 

复制mapred-site.xml.template为mapred-site.xml,指定mapreduce工作方式
[hadoop@master etc]$vi mapred-site.xml
<configuration>
<property>   <name>mapreduce.framework.name</name>   <value>yarn</value> </property></configuration>

编辑yarn-site.xml,指定yran的主节点和端口

[hadoop@master etc]$vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties --><property>   <name>yarn.nodemanager.aux-services</name>   <value>mapreduce_shuffle</value>  </property>   <property>   <name>yarn.resourcemanager.hostname</name>   <value>master</value>  </property></configuration>
 
将hadoop-2.6.0文件夹分发到其他2台虚拟机上
[hadoop@master ~]$scp -r hadoop-2.6.0 hadoop-slaves1:~
[hadoop@master ~]$scp -r hadoop-2.6.0 hadoop-slaves2:~
 
  
 

六、运行测试

格式化分布式文件系统
[hadoop@master ~]$ hadoop-2.6.0/bin/hadoop namenode -format
[hadoop@master ~]$ hadoop-2.6.0/sbin/start-all.sh
 
 
 
 

打开浏览器http://10.0.200.200:8088
如果成功应该看到如下效果

大数据hadoop分布式系统


打开浏览器http://10.0.200.200:50070
如果成功可以看到如下效果

大数据hadoop分布式系统


运行mapreduce测试

[hadoop@hadoop-master ~]$ hadoop jar hadoop-2.6.0/share/hadoop/mapreduce/hadoop- mapreduce-examples-2.6.0.jar pi 1 1000000000
</pre><pre name="code" class="plain">Number of Maps  = 1Samples per Map = 100000000016/08/20 22:59:09 WARN util.NativeCodeLoader: Unable to load native-hadoop librar                                                                                       y for your platform... using builtin-java classes where applicableWrote input for Map #0Starting Job16/08/20 22:59:13 INFO client.RMProxy: Connecting to ResourceManager at hadoop-ma                                                                                       ster/192.168.100.50:803216/08/20 22:59:15 INFO input.FileInputFormat: Total input paths to process : 116/08/20 22:59:16 INFO mapreduce.JobSubmitter: number of splits:116/08/20 22:59:17 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_147                                                                                       1704622640_000116/08/20 22:59:19 INFO impl.YarnClientImpl: Submitted application application_147                                                                                       1704622640_000116/08/20 22:59:20 INFO mapreduce.Job: The url to track the job: http://hadoop-mas                                                                                       ter:8088/proxy/application_1471704622640_0001/16/08/20 22:59:20 INFO mapreduce.Job: Running job: job_1471704622640_000116/08/20 22:59:42 INFO mapreduce.Job: Job job_1471704622640_0001 running in uber                                                                                        mode : false16/08/20 22:59:42 INFO mapreduce.Job:  map 0% reduce 0%16/08/20 23:00:07 INFO mapreduce.Job:  map 67% reduce 0%16/08/20 23:00:46 INFO mapreduce.Job:  map 100% reduce 0%16/08/20 23:01:20 INFO mapreduce.Job:  map 100% reduce 100%16/08/20 23:01:24 INFO mapreduce.Job: Job job_1471704622640_0001 completed successfully16/08/20 23:01:24 INFO mapreduce.Job: Counters: 49        File System Counters                FILE: Number of bytes read=28                FILE: Number of bytes written=211893                FILE: Number of read operations=0                FILE: Number of large read operations=0                FILE: Number of write operations=0                HDFS: Number of bytes read=270                HDFS: Number of bytes written=215                HDFS: Number of read operations=7                HDFS: Number of large read operations=0                HDFS: Number of write operations=3        Job Counters                Launched map tasks=1                Launched reduce tasks=1                Data-local map tasks=1                Total time spent by all maps in occupied slots (ms)=58521                Total time spent by all reduces in occupied slots (ms)=31620                Total time spent by all map tasks (ms)=58521                Total time spent by all reduce tasks (ms)=31620                Total vcore-seconds taken by all map tasks=58521                Total vcore-seconds taken by all reduce tasks=31620                Total megabyte-seconds taken by all map tasks=59925504                Total megabyte-seconds taken by all reduce tasks=32378880        Map-Reduce Framework                Map input records=1                Map output records=2                Map output bytes=18                Map output materialized bytes=28                Input split bytes=152                Combine input records=0                Combine output records=0                Reduce input groups=2                Reduce shuffle bytes=28                Reduce input records=2                Reduce output records=0                Spilled Records=4                Shuffled Maps =1                Failed Shuffles=0                Merged Map outputs=1                GC time elapsed (ms)=519                CPU time spent (ms)=50240                Physical memory (bytes) snapshot=263278592                Virtual memory (bytes) snapshot=4123402240                Total committed heap usage (bytes)=132087808        Shuffle Errors                BAD_ID=0                CONNECTION=0                IO_ERROR=0                WRONG_LENGTH=0                WRONG_MAP=0                WRONG_REDUCE=0        File Input Format Counters                Bytes Read=118        File Output Format Counters                Bytes Written=97Job Finished in 131.664 secondsEstimated value of Pi is 3.14159272000000000000