1、摘要 随着云时代的来临,大数据也吸引越来越多的关注,企业在日常运营中生成、积累的用户网络行为数据。这些数据是如此庞大,计量单位通常达到了PB、EB甚至是ZB。Hadoop作为一个开源的分布式文件系统和并行计算编程模型得到了广泛的部署和应用。本文将介绍Hadoop完全分布式集群的具体搭建过程与基于Hive的数据分析平台的设计与实现。关键字 Hadoop,MapReduce,HiveAbstract With the advent of cloud, big data also attract more and more attention, the enterprise of the gener
2、ation and accumulation in the daily operation of the user network behavior data. The data is so large, the measuring unit is usually achieved the PB, EB, and even the ZB. The Hadoop distributed file system as an open source, and parallel computing programming model has been widely deployed and appli
3、cation. This article introduces Hadoop completely distributed cluster process of concrete structures, and the design and implementation of data analysis platform based on the Hive.key words Hadoop,MapReduce,Hive目录第一章某某企业数据分析系统设计需求分析4第二章HADOOP简介5第三章HADOOP单一部署83.1Hadoop集群部署拓扑图83.2安装操作系统Centos93.3Hadoo
4、p基础配置153.4SSH免密码登录183.5安装JDK193.6安装Hadoop203.6.1安装32位Hadoop203.6.2安装64位Hadoop293.7Hadoop优化333.8Hive安装与配置343.8.1 Hive安装343.8.2 使用MySQL存储Metastore343.8.3 Hive的使用373.9Hbase安装与配置389.1 Hbase安装389.2 Hbase的使用403.10集群监控工具Ganglia44第四章HADOOP批量部署494.1 安装操作系统批量部署工具Cobbler494.2 安装Hadoop集群批量部署工具Ambari55第五章使用HADOO
5、P分析网站日志64第六章总结68第七章参考文献69致谢70第一章 某某企业数据分析系统设计需求分析某某企业成立于1999年,其运营的门户网站每年产生大概2T的日志信息,为了分析网站的日志,部署了一套Oracle数据库系统,将所有的日志信息都导入Oracle的表中。随着时间的推移,存储在Oracle数据库中的日志系统越来越大,查询的速度变得越来越慢,并经常因为查询的数据量非常大而导致系统死机。日志信息的分析成为了XX企业急需解决的问题,考虑到单机分析的扩展性与成本问题,且XX企业当前有一部分服务器处于闲置状态,最终决定在现有服务器的基础上部署一套分布式的系统来对当前大量的数据进行分析。结合淘宝目
6、前已经部署成功的数据雷达系统,同时由于XX企业预算有限,为了节约资金,决定采用开源的Hadoop来部署公司的数据分析系统。l 采用Hadoop集群优势:1. 高可靠性,能够维护多个工作数据副本,确保能够针对失败的节点重新分布处理。2. 高扩展性,在计算机集簇间分配数据并完成计算,这些集簇可以很容易扩展到数以千计的节点中去。3. 高效性,以并行的方式工作,通过并行处理加快处理速度。4. 高容错性,自动保存数据多个副本,并能够自动将失败任务重新分配。5. 廉价性,框架可以运行在任何普通的PC上。l 采用Hadoop集群劣势:1. 采用单master的设计,单master的设计极大地简化了系统的设计
7、和实现,由此带来了机器规模限制和单点失效问题。2. 编程复杂,学习曲线过于陡峭,让许多人难以深入。3. 开源性,在广大社区维护不断推进Hadoop的发展的同时,一旦代码出现漏洞并未被发现,而又被有心的人利用,将会对数据的安全造成毁灭性的后果。4. 缺乏认证,Hadoop并没有对使用Hadoop的权限进行细致的划分。第二章 Hadoop简介Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统和MapReduce为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。HDFS的高容错性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成
8、分布式系统,MapReduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。所以用户可以利用Hadoop轻松地组织计算机资源,从而搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。2.1 Hadoop生态系统Hadoop已经发展成为包含多个子项目的集合。核心内容是MapReduce和Hadoop分布式文件系统(DHFS)。它也包含了Common、Avro、Chukwa、Hive、Hbase等子项目,他们在核心层的基础上提供了高层服务,为Hadoop的应用推广起到了重要作用。如图2.1所示:图2.1 Hadoop结构图Hadoop C
9、ore/Common从Hadoop 0.20版本开始,Hadoop 的Core 项目便更名为Common.,它是Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,主要包括FileSystem、PRC和串行化库。Hivehive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。HbaseHBase是一个分布式的、面向列的开
10、源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。AvroAvro是doug cutting主持的RPC项目,有点类似Google的protobuf和Facebook的thrift。是用
11、于数据序列化的系统。提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程PRC调用以及简单的动态语言集成功能。MapReduce实现了MapReduce编程框架,用于大规模数据集的并行运算。能够使编程人员在不理解分布式并行编程概念的情况下也能方便将自己的程序运行在分布式系统上。HDFS分布式文件系统,其设计目标包括:检测和快速恢复硬件故障;数据流的访问;简化一致性模型等。ZooKeeperZookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeepe
12、r的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。PigPig是SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能。Yahoo网格运算部门开发的又一个克隆Google的项目Sawzall。ChukwaChukwa是基于Hadoop的大集群监控系统,是开源的数据搜集系统。通过HDFS来存储数据,并依赖MapReduce 来处理数据。2.2 Hadoop在互联网的应用淘宝淘宝Hadoop集群现在超过1700个节点,服务于用于整个阿里巴巴集团各部门
13、,数据来源于各部门产品的线上数据库(Oracle, MySQL)备份,系统日志以及爬虫数据,截止2011年9月,数量总量已经超过17个PB,每天净增长20T左右。每天在Hadoop集群运行的MapReduce任务有超过4万(有时会超过6万),其中大部分任务是每天定期执行的统计任务,例如数据魔方、量子统计、推荐系统、排行榜等等。这些任务一般在凌晨1点左右开始执行,3-4个小时内全部完成。每天读数据在2PB左右,写数据在1PB左右。百度度对海量数据处理的要求是比较高的,要在线下对数据进行分析,还要在规定的时间内处理完并反馈到平台上。百度在互联网领域的平台需求下所示,这里就需要通过性能较好的云平台进
14、行处理了,Hadoop就是很好的选择。在百度,Hadoop主要应用于以下几个方面:l 日志的存储和统计;l 网页数据的分析和挖掘;l 商业分析,如用户的行为和广告关注度等;l 在线数据的反馈,及时得到在线广告的点击情况;l 用户网页的聚类,分析用户的推荐度及用户之间的关联度。FacebookFacebook作为全球知名的社交网站,拥有超过3亿的活跃用户,其中约有3千万用户至少每天更新一次自己的状态;用户每月总共上传10亿余张照片、1千万个视频;以及每周共享10亿条内容,包括日志、链接、新闻、微博等。因此Facebook需要存储和处理的数据量是非常巨大的,每天新增加4TB压缩后的数据,扫描135
15、TB大小的数据,在集群上执行Hive任务超过7500次,每小时需要进行8万次计算,所以高性能的云平台对Facebook来说是非常重要的,而Facebook主要将Hadoop平台用于日志处理、推荐系统和数据仓库等方面。第三章 Hadoop单一部署3.1 Hadoop集群部署拓扑图3.1Hadoop集群部署拓图集群中包括4个节点:1个master,3个Salve,节点之间局域网连接,可以相互ping通,节点IP地址分布如下:机器名称IP地址网关系统192.168.93.210192.168.93.254CentOS-6.5-x86_64192.168.93.211192.168.93.254Cen
16、tOS-6.5-x86_64192.168.93.212192.168.93.254CentOS-6.5-x86_64192.168.93.213192.168.93.254CentOS-6.5-i3863.2 安装操作系统Centos1) 选择第一项,按Enter键下一步,如图3.2所示。图3.2 安装操作系统2) 选择Skip,跳过光盘介质检测,如图3.3所示。图3.3 光盘介质检测3) 开始Centos的安装,选择OK,如图3.4所示。图3.4 操作系统安装欢迎界面4) 选择安装时的语言,这里我们选择英语,选择OK,下一步,如图3.5所示。图3.5 安装向导语言选择界面5) 键盘布局使用
17、US,如图3.6所示。图3.6 选择键盘语言界面6) 重新读取磁盘,如图3.7所示。图3.7 重新读取磁盘界面7) 这里选择Shanghai时区,如图3.8所示。图3.8 选择UTC时区界面8) 填入管理员Root密码后,选择OK,下一步,如图3.9所示。图3.9 填写管理员密码界面9) 因为是全新安装,我们选择替换已有安装系统,选择OK,下一步,如图3.10所示。图3.10 选择安装系统分区界面10) 确认写入磁盘,下一步,如图3.11所示。图3.11 确认格式化磁盘界面11) 开始写入系统文件,100%即为完成写系统操作,如图3.12所示。图3.12 操作系统安装界面12) 重启,进入系统
18、,如图3.13所示。图3.13 重启系统界面3.3 Hadoop基础配置1) 配置master的IProotlocalhost # vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0HWADDR=00:0C:29:75:77:A2TYPE=EthernetUUID=bb54feab-d287-4c56-844d-63632511651dONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=staticIPADDR=192.168.93.201NETMASK=255.255.255.0GATEWAY=192.168.
19、93.254DNS1=192.168.92.2DNS2=192.168.92.32) 配置master的主机名rootlocalhost # vi /etc/sysconfig/networkNETWORKING=yesHOSTNAME=3) 重启系统,使配置生效rootlocalhost # reboot4) 其它三台主机根据规划的IP进行设置5) 设置master主机的IP地址:rootmaster # vim /etc/hosts192.168.93.201 192.168.93.202 192.168.93.203 192.168.93.203 6) 复制hosts文件本其它的节点:h
20、dusermaster $ scp -r /etc/hosts hduser: /etc/hostshdusermaster $ scp -r /etc/hosts hduser: /etc/hostshdusermaster $ scp -r /etc/hosts hduser: /etc/hosts7) master Ping测试:rootmaster # ping -c 1rootmaster # ping -c 18) Hadoop001 Ping测试:roothadoop001 # ping -c 1roothadoop001 # ping -c 19) Hadoop002 Ping
21、测试:roothadoop002 # ping -c 1roothadoop002 # ping -c 110) Hadoop003 Ping测试:roothadoop003 # ping -c 1roothadoop003 # ping -c 111) 分别添加集群用户:rootmaster # useradd hduserrootmaster # passwd hduserChanging password for user hduser.New password: Retype new password: passwd: all authentication tokens updated
22、 successfully.roothadoop001 # useradd hduserroothadoop001 # passwd hduserChanging password for user hduser.New password: Retype new password: passwd: all authentication tokens updated successfully.roothadoop002 # useradd hduserroothadoop002 # passwd hduserChanging password for user hduser.New passwo
23、rd: Retype new password: passwd: all authentication tokens updated successfully.12) JDK下载地址。 13) Hadoop下载地址:14) 上传Hadoop和JDK文件到集群主机,如图3.14所示:图3.14 使用xftp上传界面3.4 SSH免密码登录1) 产生rsa密钥:hdusermaster $ ssh-keygen -t rsahdusermaster $ cat .ssh/id_rsa.pub .ssh/authorized_keyshduser master $ chmod 600 .ssh/au
24、thorized_keys2) Slave主机也与Master类似产生rsa密钥。也lave主机nfig atd offperty20131818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818183) master上导入hadoop001与hadoop002上的公钥:hdu
25、sermaster $ ssh hduser cat /.ssh/authorized_keys .ssh/authorized_keys hdusermaster $ ssh hduser cat /.ssh/authorized_keys .ssh/authorized_keys 4) hadoop001导入master的公钥:hduserhadoop001 $ ssh hduser cat /.ssh/id_rsa.pub .ssh/authorized_keys5) hadoop002导入master的公钥:hduserhadoop002 $ ssh hduser cat /.ssh/
26、id_rsa.pub .ssh/authorized_keys3.5 安装JDK1) master上安装JDK:rootmaster # mkdir /usr/javatar zxvf jdk-7u45-linux-x64.tar.gz -C /usr/java/rootmaster # tar zxvf jdk-7u45-linux-i586.tar.gz -C /usr/java/rootmaster # vim /etc/profileJAVA_HOME=/usr/java/jdk1.7.0_45JRE_HOME=/usr/java/jdk1.7.0_45/jrePATH=$PATH:$
27、JAVA_HOME/bin:$JRE_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libexport JAVA_HOME JRE_HOME PATH CLASSPATH rootmaster # source /etc/profile rootmaster # java -versionjava version 1.7.0_45Java(TM) SE Runtime Environment (build 1.7.0_45-b18)Java HotSpot(TM) Client VM (
28、build 24.45-b08, mixed mode)2) 其它三台主机也要部署JDK3.6 安装Hadoop3.6.1安装32位Hadoop1) 配置Hadoop环境变量:hdusermaster hadoop-2.2.0$ vim etc/hadoop/hadoop-env.shexport JAVA_HOME=/usr/java/jdk1.7.0_45hdusermaster hadoop-2.2.0$ vim etc/hadoop/yarn-env.shJAVA_HOME=/usr/java/jdk1.7.0_45/2) 解压Hadoop文件并建立相应的目录:hdusermaster
29、 $ tar zxvf hadoop-2.2.0.tar.gzhdusermaster $ mkdir -p dfs/name,datahdusermaster $ mkdir temp3) 设定Hadoop集群中Slaves角色主机: hdusermaster $ vim hadoop-2.2.0/etc/hadoop/slaves4) 配置core-site.xml文件:hdusermaster $ vim hadoop-2.2.0/etc/hadoop/core-site.xml fs.defaultFShdfs:/:9000 io.file.buffer.size 131072 had
30、oop.tmp.dir file:/home/hduser/temp hadoop.proxyuser.hduser.hosts * hadoop.proxyuser.hduser.groups * 5)配置hdfs-site.xml文件:hdusermaster $ vim hadoop-2.2.0/etc/hadoop/hdfs-site.xml dfs.namenode.secondary.http-address :9001 dfs.namenode.name.dir file:/home/hduser/dfs/name dfs.datanode.data.dir file:/home
31、/hduser/dfs/data dfs.replication 3 dfs.webhdfs.enabled true 5) 配置mapred-site.xml文件:hdusermaster $ vim hadoop-2.2.0/etc/hadoop/mapred-site.xml mapreduce.framework.name yarn mapreduce.jobhistory.address :10020 mapreduce.jobhistory.webapp.address :19888 6) 配置yarn-site.xml文件:hdusermaster $ vim hadoop-2.
32、2.0/etc/hadoop/yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.resourcemanager.address :8032 yarn.resourcemanager.scheduler.address :8030 yarn.resourcemanager.resource-tracker.address :80
33、31 续上 yarn.resourcemanager.admin.address :8033 yarn.resourcemanager.webapp.address :8088 7) 将配置好的Hadoop文件复制到其它节点:hdusermaster $ scp -r hadoop-2.2.0/ hduser:hdusermaster $ scp -r hadoop-2.2.0/ hduser:hdusermaster $ scp -r hadoop-2.2.0/ hduser:8) 格式化namenode:hdusermaster $ ./hadoop-2.2.0/bin/hdfs name
34、node -format9) 启动hdfs:hdusermaster hadoop-2.2.0$ ./sbin/start-dfs.sh10) 启动yarn:hdusermaster hadoop-2.2.0$ ./sbin/start-yarn.sh11) 验证服务启动情况:hdusermaster $ jps3454 NameNode4003 Jps3622 SecondaryNameNode3758 ResourceManagerhduserhadoop001 $ jps2190 NodeManager2090 DataNode2288 Jpshduserhadoop002 $ jps2167 Jps2069 NodeManager1969 DataNodehduserhadoop003 $ jps1853 Jps1761 NodeManager1661 DataNode12) 查看集群状态:hdusermaster hadoop-2.2.0$ ./