伪分布式的Hadoop+Hive+HBase搭建记录Word下载.docx
《伪分布式的Hadoop+Hive+HBase搭建记录Word下载.docx》由会员分享,可在线阅读,更多相关《伪分布式的Hadoop+Hive+HBase搭建记录Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。
GitHub上的最新版本是Storm0.8.0,基本是用Clojure写的。
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。
这是管理队列及工作者集群的另一种方式。
Storm也可被用于“连续计算”(continuouscomputation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。
它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。
Storm的主工程师NathanMarz表示:
Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比Hadoop用于批处理。
Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。
更棒的是你可以使用任意编程语言来做开发。
Storm的主要特点如下:
简单的编程模型。
类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
可以使用各种编程语言。
你可以在Storm之上使用各种编程语言。
默认支持Clojure、Java、Ruby和Python。
要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
容错性。
Storm会管理工作进程和节点的故障。
水平扩展。
计算是在多个线程、进程和服务器之间并行进行的。
可靠的消息处理。
Storm保证每个消息至少能得到一次完整处理。
任务失败时,它会负责从消息源重试消息。
快速。
系统的设计保证了消息能得到快速的处理,使用Ø
MQ作为其底层消息队列。
本地模式。
Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。
这让你可以快速进行开发和单元测试。
Storm集群由一个主节点和多个工作节点组成。
主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。
每个工作节点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。
Nimbus和Supervisor都能快速失败,而且是无状态的,这样一来它们就变得十分健壮,两者的协调工作是由ApacheZooKeeper来完成的。
Storm的术语包括Stream、Spout、Bolt、Task、Worker、StreamGrouping和Topology。
Stream是被处理的数据。
Spout是数据源。
Bolt处理数据。
Task是运行于Spout或Bolt中的线程。
Worker是运行这些线程的进程。
StreamGrouping规定了Bolt接收什么东西作为输入数据。
数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为Direct)。
Topology是由StreamGrouping连接起来的Spout和Bolt节点网络。
在StormConcepts页面里对这些术语有更详细的描述。
可以和Storm相提并论的系统有Esper、Streambase、HStreaming和YahooS4。
其中和Storm最接近的就是S4。
两者最大的区别在于Storm会保证消息得到处理。
Storm,如果需要持久化,可以使用一个类似于Cassandra或Riak这样的外部数据库。
Storm是分布式数据处理的框架,本身几乎不提供复杂事件计算,而Esper、Streambase属于CEP系统。
入门的最佳途径是阅读GitHub上的官方《StormTutorial》。
其中讨论了多种Storm概念和抽象,提供了范例代码以便你可以运行一个StormTopology。
开发过程中,可以用本地模式来运行Storm,这样就能在本地开发,在进程中测试Topology。
一切就绪后,以远程模式运行Storm,提交用于在集群中运行的Topology。
要运行Storm集群,你需要ApacheZookeeper、Ø
MQ、JZMQ、Java6和Python2.6.6。
ZooKeeper用于管理集群中的不同组件,Ø
MQ是内部消息系统,JZMQ是Ø
MQ的JavaBinding。
有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群。
关于详细的步骤,可以阅读StormWiki上的《SettingupaStormcluster》。
出现的背景
在过去10年中,随着互联网应用的高速发展,企业积累的数据量越来越大,越来越多。
随着GoogleMapReduce、Hadoop等相关技术的出现,处理大规模数据变得简单起来,但是这些数据处理技术都不是实时的系统,它们的设计目标也不是实时计算。
毕竟实时的计算系统和基于批处理模型的系统(如Hadoop)有着本质的区别。
但是随着大数据业务的快速增长,针对大规模数据处理的实时计算变成了一种业务上的需求,缺少“实时的Hadoop系统”已经成为整个大数据生态系统中的一个巨大缺失。
Storm正是在这样的需求背景下出现的,Storm很好地满足了这一需求。
在Storm出现之前,对于需要实现计算的任务,开发者需要手动维护一个消息队列和消息处理者所组成的实时处理网络,消息处理者从消息队列中取出消息进行处理,然后更新数据库,发送消息给其他队列。
所有这些操作都需要开发者自己实现。
这种编程实现的模式存在以下缺陷。
●单调乏味性:
开发者需要花费大部分时间去配置消息如何发送,消息发送到哪里,如何部署消息的处理者,如何部署消息的中间处理节点等。
如果使用Storm进行处理,那么开发者只需要很少的消息处理逻辑代码,这样开发者就可以专注于业务逻辑的开发,从而大大提高了开发实时计算系统的效率。
●脆弱性:
程序不够健壮,开发者需要自己编写代码以保证所有的消息处理者和消息队列的正确运行。
●可伸缩性差:
当一个消息处理者能处理的消息达到自己能处理的峰值时,就需要对消息流进行分流,这时需要配置新的消息处理者,以让它们处理分流消息。
对于需要处理大量消息流的实时系统来说,消息处理始终是实时计算的基础,消息处理的最后就是对消息队列和消息处理者之间的组合。
消息处理的核心是如何在消息处理的过程中不丢失数据,而且可以使整个处理系统具有很好的扩展性,以便能够处理更大的消息流。
而Storm正好可以满足这些要求。
应用领域
Storm有许多应用领域,包括实时分析、在线机器学习、信息流处理(例如,可以使用Storm处理新的数据和快速更新数据库)、连续性的计算(例如,使用Storm连续查询,然后将结果返回给客户端,如将微博上的热门话题转发给用户)、分布式RPC(远过程调用协议,通过网络从远程计算机程序上请求服务)、ETL(ExtractionTransformationLoading,数据抽取、转换和加载)等。
Storm的处理速度惊人,经测试,每个节点每秒可以处理100万个数据元组。
Storm可扩展且具有容错功能,很容易设置和操作。
Storm集成了队列和数据库技术,Storm拓扑网络通过综合的方法,将数据流在每个数据平台间进行重新分配。
图1所示为Storm处理消息流的示意图。
图1Storm数据流图
在Storm消息处理模型中,消息源就像图1中所示的水龙头,它可以源源不断地将消息发送到消息处理者那里,消息处理者接收消息,进行处理,然后消息处理者既可以将消息发送到其他消息处理者那里,或者不发送消息,表示消息处理结束。
Kafka
kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。
这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。
这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。
kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。
kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
通过O
(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:
即使是非常普通的硬件kafka也可以支持每秒数十万的消息。
支持通过kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。
Elasticsearch
相似solr
ElasticSearch是一个基于Lucene的搜索服务器。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。
设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:
搜索工作是很难的。
我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。
Elasticsearch旨在解决所有这些问题和更多的问题。
Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。
用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;
也可以通过HttpGet操作提出查找请求,并得到XML格式的返回结果。
Solr是一个高性能,采用Java5开发,
基于Lucene的全文搜索服务器。
同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
Lucene
Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。
Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。
Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。
在Java开发环境里Lucene是一个成熟的免费开源工具。
就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。
人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。
公用配置
部署系统
CentOS6.5
SSH安装配置
Hadoop用ssh通信,先进行免密码登录设定。
免密码登陆设定为root用户使用,伪分布模式用root用户(非root用户的免密码登陆参考全分布配置)
查看SSH是否安装
输入命令:
rpm
-qa
|
grep
ssh
注:
若没安装SSH则可输入:
yum
install
openssh-server安装。
启动SSH服务
执行servicesshdrestart重启SSH服务。
命令:
servicesshdstart启动服务
servicesshdstop停止服务
重启后执行netstat-antp|grepsshd查看是否启动22端口。
设置SSH免登陆
1执行ssh-keygen-trsa-P‘’-f~/.ssh/id_rsa
2执行cat~/.ssh/id_rsa.pub>
>
~/.ssh/authorized_keys
3执行sshlocalhost第一次登陆需输入密码,以后就可以直接登陆,测试免登陆是否设置成功。
JDK安装
下载JDK:
2dd3)
将jdk解压到/usr/local/jdk目录下(目录可根据自己设置,非必须在某个目录)
配置环境变量
将环境变量信息添加到/etc/profile文件尾部
#########setHOME&
PATH#########
JAVA_HOME=/usr/local/jdk/jdk1.7.0_67
CLASSPATH=.:
$JAVA_HOME/lib:
$JAVA_HOME/lib/dt.jar:
$JAVA_HOME/lib/tools.jar
PATH=$PATH:
$JAVA_HOME/bin
执行source/etc/profile使环境变量生效。
执行java-version,确认配置成功。
HADOOP部署
本次部署Hadoop2.6.0版本,此版本目前网络上比较成熟的版本,参考文档较多。
软件下载
Hadoop官方下载:
(此版本为32位版本)
Hadoop2.6064位版本360云盘共享:
f113),
上传服务器
解压包
1将安装包hadoop-2.6.0.tar.gz上传到/opt下。
2解压包执行tar-zvxfhadoop-2.6.0.tar.gz。
3解压完成,如图
Hadoop参数配置
Hadoop环境变量
执行vi/etc/profile添加
HADOOP_HOME=/opt/hadoop-2.6.0
$HADOOP_HOME/bin
执行source/etc/profile,使环境变量生效。
cd/opt/hadoop-2.6.0/etc/hadoop,进入参数配置目录。
分别修改配置文件如下
vihadoop-env.sh
找到exportJAVA_HOME=${JAVA_HOME},修改exportJAVA_HOME=/usr/local/jdk/jdk1.7.0_67
vicore-site.xml
<
configuration>
property>
name>
hadoop.tmp.dir<
/name>
value>
/hadoop/tmp<
/value>
/property>
fs.default.name<
hdfs:
//localhost:
9000<
/configuration>
标红的配置可根据实际路径修改。
vimapred-site.xml
mapred.job.tracker<
localhost:
9001<
标红的配置可根据机器名修改。
viyarn-site.xml
mapreduce.framework.name<
yarn<
yarn.nodemanager.aux-services<
mapreduce_shuffle<
vihdfs-site.xml
dfs.replication<
1<
dfs.namenode.name.dir<
/hadoop/hadoop-2.6.0/dfs/name<
dfs.datannode.data.dir<
/hadoop/hadoop-2.6.0/dfs/data<
dfs.replication的value为1表示是单机。
目录需要根据实际目录位置设置。
启动Hadoop
执行sh/opt/hadoop-2.6.0/bin/hadoopnamenode-format格式化
执行sh/opt/hadoop-2.6.0/sbin/start-all.sh,启动hadoop服务
查看
执行sh/opt/hadoop-2.6.0/bin/hadoopdfsadmin–report
DEPRECATED:
Useofthisscripttoexecutehdfscommandisdeprecated.
Insteadusethehdfscommandforit.
ConfiguredCapacity:
0(0B)
PresentCapacity:
DFSRemaining:
DFSUsed:
DFSUsed%:
NaN%
Underreplicatedblocks:
0
Blockswithcorruptreplicas:
Missingblocks:
MySQL配置
安装mysql并启动对应服务
分别执行以下命令:
yuminstallmysql
yuminstallmysql-server
yuminstallmysql-devel
servicemysqldstart
为Hive建立相应的MySQL帐号,并赋予足够的权限
1mysql的root命令行:
mysql-uroot-p
2创建hive数据库:
createdatabasehive;
3创建用户hive,它只能从localhost连接到数据库并可以连接到wordpress数据库
grantallonhive.*tohive@localhostidentifiedby'
hive'
;
zookeeper运行
下载
360云盘下载:
(访问密码3335)
解压
上传zookeeper-3.3.6到系统目录/usr/local中(目录根据需要可修改)
运行zookeeper
执行shzkEnv.sh设置环境变量。
执行shzkServer.sh启动zookeeper
HIVE配置
HIVE下载地址
官方下载:
360云盘地址:
(访问密码f113)
上传apache-hive-1.2.1-bin.tar.gz到/opt/hadoop-2.6.0目录
执行tar-xvfapache-hive-1.2.1-bin.tar.gz
参数配置
执行vi/etc/profile,添加HIVE环境变量
HIVE_HOME=$HADOOP_HOME/apache-hive-1.2.1-bin
$HIVE_HOME/bin
设置参数
cd$HIVE_HOME/conf,新建hive-site.xml文件,配置Hive元数据的存储方式(以mysql存储为例)
注意下面配置的是hive默认的是mysql的hive数据库,用户名是hive,密码是hive。
所以在进行下列操作前要用root登录mysql创建hive数据库并且分配给用户hive。
?
xmlversion="
1.0"
xml-stylesheettype="
text/xsl"
href="
configuration.xsl"
<
n