一、背景介绍
进入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组成.
NameNode中记录了文件是如何被拆分成block以及这些block都存储到了那些DateNode节点.
NameNode同时保存了文件系统运行的状态信息.
DataNode中存储的是被拆分的blocks.
Secondary NameNode帮助NameNode收集文件系统运行的状态信息.
JobTracker当有任务提交到Hadoop集群的时候负责Job的运行,负责调度多个TaskTracker.
TaskTracker负责某一个map或者reduce任务.
1.hdfs分布式文件系统
hdfs的优点
- 高容错性
- 适合批处理
- 适合大数据处理
- 流式文件访问
- 可构建在廉价机器上
2.mapreduce大规模数据集的并行运算
三、安装环境
实验需要3台虚拟机,一主两从式,一台主机master当协调节点处理多个slave节点,用户能访问master节点来管理整个hadoop集群
硬件:3台虚拟机
内存:至少512MB
硬盘:至少20G
操作系统:rhel6.4 64位 最小化安装
主机名 | IP | 描述 |
hadoop-master | 10.0.200.200 |
namenode,resourcemanager |
hadoop-slave1 | 10.0.200.201 |
datanode,nodemanager |
hadoop-slave2 | 10.0.200.202 |
datanode,nodemanager |
1.安装openssh
在每台虚拟机上安装openssh,最小化虚拟机默认没有安装,自行配置yum安装openssh。3台虚拟机之间需要相互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
[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/
可以看到在master上可以无密登录到slave1上,在后面数百台机器上运行hadoop集群就会机
5.hadoop安装和配置
[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@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:50070
如果成功可以看到如下效果
运行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