分类 工具 下的文章

渐进学习hadoop

渐进式的学习Hadoop:
(1)先搭建一个单节点的 Hadoop平台,先将那些疑问放一边,先去学习如何搭建这个平台;
(2)尝试用Hadoop管理各类文件,尝试将数据存放于其非关系型数据库中,尝试编写一个MapReduce程序,通过些步骤,能够大概的认识到Hadoop是一个海量的数据、文件的存放平台,上面提供了各种通用的工具以帮助用户更好的去分析、应用与处理这些数据与文件;
(3)考虑一个问题:如果当前有一个任务交给你,去实现一个TB、乃至PB级数据的海量存取与快速查询,你最后如果实现了这一任务,其实就是实现了一个专用任务的Hadoop平台,考虑到未来有很多类似的任务,将你的专用Hadoop平台改造成通用性平台,以方便其他用户使用,那你可能就真正实现了一个类似于Hadoop的应用系统。用这样的思维去看待Hadoop可能会让用户理解的为更透彻,另外当用户对这个认识模糊时,大可以不用太担心,这多半是由于当前的实际工作可能还用不上,如果真碰到这样的大数据处理,通过思考就能很快理解Hadoop的好处。
(4)实现多节点的安装与部署,并尝试设置节点失效,看一下如何去管理与调度、监测任务的执行。
(5)实现大批量专用工具部署,并尝试实现1万个文件的存取、数千万数据的写入与查询,再去重新认识一下Hadoop。
(6)尝试在工作中开始实现Hadoop。

Storm实时计算平台

Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.8.0,基本是用Clojure写的。
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 Storm的主工程师Nathan Marz表示:
Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比 Hadoop之于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。
Storm的主要特点如下:
简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
容错性。Storm会管理工作进程和节点的故障。
水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。
本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
Storm集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节 点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无 状态的,这样一来它们就变得十分健壮,两者的协调工作是由Apache ZooKeeper来完成的。
Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Sprout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream Grouping规定了Bolt接收什么东西作为输入数据。数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者 广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为 Direct)。Topology是由Stream Grouping连接起来的Spout和Bolt节点网络。在Storm Concepts页面里对这些术语有更详细的描述。
可以和Storm相提并论的系统有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。两者最大的区别在于Storm会保证消息得到处理。这些系统中有的拥有内建数据存储层,这是Storm所没有的,如果需要持久化,可以使用一个类似于Cassandra或Riak这样的外部数据库。
入门的最佳途径是阅读GitHub上的官方《Storm Tutorial》。 其中讨论了多种Storm概念和抽象,提供了范例代码以便你可以运行一个Storm Topology。开发过程中,可以用本地模式来运行Storm,这样就能在本地开发,在进程中测试Topology。一切就绪后,以远程模式运行 Storm,提交用于在集群中运行的Topology。
要运行Storm集群,你需要Apache Zookeeper、ØMQ、JZMQ、Java 6和Python 2.6.6。ZooKeeper用于管理集群中的不同组件,ØMQ是内部消息系统,JZMQ是ØMQ的Java Binding。有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群。关于详细的步骤,可以阅读Storm Wiki上的《Setting up a Storm cluster》
storm官网:
http://storm-project.net/
storm git:
https://github.com/nathanmarz/storm

体验云存储

体验“云存储”
Dropbox据说在分享文件的时候是有每日20G流量限制的,超过会封号;
腾讯的微云,我问过客服,说是没有,分享人数,下载次数,流量控制等限制;
QQ中转站有下载次数限制
百度网盘有版权问题,可能会分享失败
各种廉价及有吸引力的 云选择日益增多。但是通过3月19号公布一个Strategy Analytics调查显示,美国市场已被大公司开发的生态系统所霸占。研究发现Apple在硬件和服务上的融合已很大限度上成为这种生态系统的标杆,在该领域占主导地位;而Dropbox、Amazon和Google紧随其后。
Strategy Analytics调查了接近2300个连接终端后得出结论:Apple的iCloud和iTunes Match服务拥有了市场上27%的用户;其它取得了两位数成绩的公司有:Dropbox 17%、Amazon Cloud Drive 15%以及Google Drive的10%;而其它的竞争对手的用户占有率都未超过4%。
研究还发现云服务采用最高的人群为年轻人,特别是在20到24岁之间的青年;其中只有Apple云服务的女性用户比男性用户来的多,而其中音乐存储的采用率最高。有90%左右的Apple、Amazon及Google云用户都使用这些服务存储他们的音乐,即使Dropbox(区别于其它Apple等公司,并没有围绕着内容生态系统)服务的用户中有45%都来自音乐储存。Strategy Analytics指出Dropbox似乎准备在这一领域大展拳脚,这得益于 12月份收购的Audiogalaxy;Audiogalaxy是个音乐流及存储公司,使Dropbox可以快速的整合像本地音乐播放器这些功能。
Ed Barton —— Strategy Analytics数字媒体总监,说道:“音乐已经成为云战争的主要战场。”他指出,Google为争取客户给安卓设备提供了2万首免费音乐备份服务。与其竞争的服务同样提供了类似的小规模免费服务,不过它们通常是根据使用的空间收费。
音乐成为 云战争主战场已有多年之久,但是Barton指出:对流视频的需求可能会促成更深层的采用。也是出于这个原因,他非常看好好莱坞支持的Ultraviolet服务,根据该公司的调查:这个服务已经占据了市场上4%的用户份额,尽管这个服务因为出错率高和界面复杂激怒过很多初期用户。
在另一个需要注意的发现中,Samsung Music Hub占据了3%的美国云存储。这个韩国电子巨头一直追求着使Apple迅速崛起的软硬件协同效应,而它们扩张的云脚步正是实现这一目标的一部分。
微软在这一榜单上的缺席无疑是惹人注意的,该公司SkyDrive云服务上的文件已超10亿。Redmond也正致力将服务整合到最普及的产品,比如Office。Strategy Analytics并没有公布对这些公司调查的详细统计数据。
虽然有些公司还在讨论采用什么类型的云服务,甚至是在考虑是否采用云服务,但是云的采用还是成为了主流。通过研究发现,美国线上用户中有45%至少使用了一种云服务。
Barton说,虽然那些“2013年是云计算一年”的论调有些言过其实,但毫无疑问的是云存储已经成为数字平台的一个关键使用策略,而在2至3年内更将随处可见。

利用devstack在ubuntu上安装openstack

系统要求:ubuntu12.04 32位
安装git:

sudo apt-get install git

获取devstack脚本:

git clone https://github.com/openstack-dev/devstack.git

在当前用户目录下执行命令,否则会报没权限
进入devstack目录

cd devstack
./stack.sh

脚本执行过程需要按照提示设置几个密码,执行过程大概:
(1)下载并安装Openstack运行所需要的系统软件,大概包括一些python的组件、mysql、rabbitmq-server等
(2)下载openstack组件,包括nova 、keystone、glance、noVNC、horizon等
(3)下载并安装openstack源码所依赖的python库和框架
(4)安装openstack各组件
(5)启动各项服务
然后就是漫长到等待,需要看网络情况,经常装到一半没速度了,可以换用其他到Ubuntu 更新源。

Horizon is now available at http://172.16.95.187/
Keystone is serving at http://172.16.95.187:5000/v2.0/
Examples on using novaclient command line is in exercise.sh
The default users are: admin and demo
The password: 123456
This is your host ip: 172.16.95.187
stack.sh completed in 1961 seconds.

访问http://172.16.95.187/,输入用户名密码即可
http://devstack.org/

IaaS层实现思路

云计算,什么是云计算,它到底离我们有多远?
这些内容我已经在《云计算的定义和特征》中阐述过了,需要看的朋友可以再去翻出来看看。
这篇文章我们重点讨论IaaS
IaaS的使用者是谁?IaaS能提供怎样的服务?他们怎么利用提供的服务?
是研发人员,有了IaaS层以后,他们就不需要等待公司的流程,盼星星盼月亮似地等着审批机器。IaaS层提供资助服务,完全可以由使用者自助申请,通过云管理平台审批,而后得到想要的机器。这种是直接提供虚拟机。
还有一种场景,我的IaaS层在外面是看不到东西的,这里的IaaS层只是为内部的中间件提供一个可部署、易维护的一个环境,而用户使用的服务是中间件提供的。这种我们得到的服务是间接的,看不到摸不着的。
我们可以像想,在我的I层有一堆的PC Server ,每台PC Server上都有内存、CPU、硬盘这些重要组件。虚拟化带来的切割资源,将一个性能较好的机器,切分成相对性能较差的机器。
未完待续……

Hadoop云计算资料收集

Hadoop云计算资料收集,会陆续更新……
先说下我本人对各种资料、信息来源的看法:
1、书:有些书不错,必须得买,必须得深入的看,这种书比较少;但有些书,乍一看书目很不错,但内容多为浅尝辄止,没啥新意,看看书目就行了,作为查找资料的依据,自学的大纲,不买;垃圾书就不说了。
2、培训:任何事情都有好坏两方面,我对此的态度是不排斥,也不喜欢;好多培训课程在课程安排上还是不错的,因此在自学的时候可以参考培训学校安排的学习路线,参加不参加培训看个人基础,关键是自己知道自己应该学什么,而不是别人告诉你,你要学什么充分利用培训网站上的课程表,安排自学路线,还是不错的方法。充分利用培训学校的培训视频,找到自己需要的知识点,切记,前提一定是知道自己想要学什么;
任何东东都有两面性,取其精华去其糟粕,学好技术才是我们最终目标,看事物的时候不能一刀切!
希望资源失效的时候,大家提醒下,也好及时删除,如果有什么资源,也欢迎大家及时分享。


云计算相关:
北航云计算视频教程  http://soft.buaa.edu.cn/MC/show.asp?id=534
重点推荐张荣典老师的《云计算之前生今世与未来》http://www.huijiangtan.com/pubcontent1.php


Hadoop相关:
史密斯学院关于Hadoop一些资料(英文的)   http://cs.smith.edu/classwiki/index.php/Category:Hadoop
高负载低延迟:动态算法+Hadoop+AWS+NoSQL解析 http://www.csdn.net/article/2013-01-18/2813788-analyzing-billions-of-credit-card-transa
csdn Hadoop专题:http://subject.csdn.net/hadoop/
Mapreduce相关,介绍的内容很基础和比较底层:http://www.importnew.com/?s=hadoop%E6%95%99%E7%A8%8B
如何给Hadoop集群选择硬件:http://blog.cloudera.com/blog/2013/08/how-to-select-the-right-hardware-for-your-new-hadoop-cluster/


Java:
java异常处理:http://www.importnew.com/5616.html
tomcat的配置: http://blog.lihai.me/deploy-webapp-on-tomcat.html
调度系统Quartz快速入门:http://www.importnew.com/4107.html


开源相关:
图灵社区,正在翻译的《开源软件架构》http://www.ituring.com.cn/book/1143#jtss-tsina

jenkins远程部署Deploy Plugin配置

jenkins远程部署配置
1、安装Deploy Plugin插件
This plugin takes a war/ear file and deploys that to a running remote application server at the end of a build. The implementation is based on Cargo. The list of currently supported containers include:
Tomcat 4.x/5.x/6.x/7.x
JBoss 3.x/4.x
Glassfish 2.x/3.x
远程部署不包括resin啊!
插件下载地址:http://ftp-nyc.osuosl.org/pub/jenkins/plugins/deploy/1.9/deploy.hpi
版本:1.9
插件地址:https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin
登录Jenkins
选择 Jenkins->系统管理->管理插件->高级 上传插件,选择deploy.hpi文件上传,上传完成后需要重新启动Jenkins
在插件管理的已安装标签下,可以看到“Deploy to container Plugin”,证明插件安装成功
2、配置job
build已经完成打war包功能,Deploy Plugin只是负责远程部署
在“构建后操作” 选择“deploy war/era to a container”
输入下面参数:
WAR/EAR files:war包路径
Context path:空白,未填,还没弄清楚用处
Container:下拉菜单,选择容器
Deploy on failure:未勾选,还没弄清楚用处
可参考下图:
远程部署配置
部署结果:
远程部署成功
部署碰到个问题:
Jenkins控制台没有报任何错误,build也是成功的,但是就是未在远端服务器看到war包,查了资料,原来war包路径错误会导致部署失败,但是不会报错(猜想:因为此时已经build完成了,不属于build的范围,所以不会改变build结果)。
解决问题参考这个网址: http://stackoverflow.com/questions/9277223/jenkins-auto-deploy-tomcat-7
I was having the same problem, and in my case the (relative) path to the WAR file was incorrect. Apparently if you don’t have it exactly correct (it needs to be relative to the workspace root) then the deploy plugin will silently fail. In my case the path was:
target/whatever.war
Once that was fixed, I ran into a different problem in that the plugin expects to connect to the manager/text version of Tomcat Manager, rather than the manager/html version that I usually configure by default. You’ll need a line in your tomcat-users.xml file like the following:
(This is in addition to the “manager-gui” role you probably already have set up.)
Once those changes were made, the build and deployment worked just fine.

环境准备-Hadoop安装过程

环境准备
1、利用vmware安装centOS6系统
2、Window开启VMware Network Adapter VMnet8
注意:虚拟机网络类型选择NAT;安装操作系统是开启网络默认启动;获取IP为DNS自动获取;虚拟机安装成功后,关闭防火墙;检查虚拟机网络和物理机网络是否能ping通;



虚拟机ping物理主机
3、安装jdk,版本大为1.6,采用sun公司的jdk而不是openjdk
参考:《Linux下安装jdk

Linux操作系统目录的作用

了解linux下操作系统目录的作用对学习linux操作系统会有很大帮助。
Linux各个目录其实就是文件,
以下是根目录低下的个个目录的作用总结:
1. 根文件系统(/ )
根文件系统中包含了几乎所有的文件目录。相当于中央系统。进入的最简单方法是:cd /
2. /usr文件系统
/usr文件系统中包含了命令库文件和在通常操作中不会修改的文件。安装程序默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行/usr/bin下的程序。
3. /var文件系统
/var文件系统中包含一些经常改变的文件。例如假脱机(spool)目录文件日志目录?锁文件?临时文件和格式化后的手册文件。
4. /home文件系统
/home文件系统中保存了用户文件(用户自己的配置文件,定制文件,文档,数据等),root用户除外。
5. /proc文件系统
/proc文件系统中包含了全部虚拟文件。它们并不保存在磁盘中,也不占据磁盘空间(尽管命令ls -c会显示它们的大小)。当您查看它们时,您实际上看到的是内存里的信息,这些文件有助于我们了解系统内部信息。
根文件系统中主要包括以下目录:
/bin:普通用户可以使用的命令文件。
/sbin:一般为非普通用户使用的命令。有时普通用户也可能会用到。
/etc:系统的配置文件。
/root:系统管理员(root或超级用户)的主目录。
/dev:设备文件。在Linux中设备以文件形式出现,从而可以按照写文件的方式简便地对设备进行写操作。
/mnt:文件系统安装点。一般用于安装移动介质?其它文件系统(如DOS)的分区、网络共享文件系统或任何可安装文件系统。
/lib:根目录下的所有程序的共享库。
/boot:LILO使用的文件。Linux内核一般放在该目录下。当然您也可以设置LILO的配置文件,向LILO指明加载内核的其它路径。
/opt:可选择安装的大型应用程序。
/tmp:临时文件,该目录中的文件被系统自动清空。
/lost+found:在系统修复过程中恢复的文件,一般为空。
/usr文件系统中主要包括以下目录:
/usr/x11R6:X Window系统。
/usr/X11:等同于/usr/X11R6 (是到/usr/X11R6的符号链接)。
/usr/X11R6/bin:保存有大量的X Window小程序,或者是指向一些大应用程序的符号链接。
/usr/bin和/usr/sbin:相当于根文件系统下的对应目录,但在基本的系统自举过程中是不需要的(例如在紧急维护中)。
/usr/local:安装本地用户应用程序,例如,Netscape(每一个用户在一个单独的目录中)。
/usr/local/bin:可能是一些小的用户应用程序,也可能是一些指向/usr/local子目录中大应用程序的符号链接。

hadoop职位要求

Hadoop的职位一般有:
1、hadoop运维工程师(负责维护hadoop平台,确保平台平稳运行,作业正常提交)
2、基于hadoop平台,在此基础上进行开发新功能。(多数是写些MapReduce程序)
3、Hadoop解决方案架构(Hadoop相关产品技术架构设计、实现、应用)
大家可以参考现有的hadoop职位要求,选择自己的技术路线。hadoop其实离我们并不远!
下面是几个典型的职位要求:
1、hadoop高级运维工程师(暴风影音)
岗位职责
负责Hadoop平台运维和优化工作;
保证Hadoop平台各核心服务运行的稳定、高效;
对Hadoop平台运维不断优化,提升数据产品的质量和响应速度;
开发各种Hadoop大数据自动化运维与监控工具。/
岗位要求
本科3年以上Linux系统管理工作经验;
1年以上Hadoop平台管理经验;
熟悉Apache Hadoop部署、性能调优,熟悉jetty,thrift;
精通Shell/Python/Java/Php语言的一种或多种;
熟悉nagios,cacti,ganglia,zabbix,zenoss优先;
对大数据和自动化运维开发有浓厚兴趣,熟悉hadoop、hbase、hive、scribe、flume、storm等分布式相关技术优先。
2、hadoop研发工程师(优酷土豆)
职责:
1.基于hadoop的海量数据分析系统研发
2.基于hadoop集群的MapReduce程序的开发、测试及优化
要求:
1.对Linux操作系统熟练掌握,熟悉shell等脚本编程
2.扎实的java基础,两年以上java实际开发经验
3.熟悉hadoop集群的搭建、管理及优化
4.熟悉hadoop及hive,有MapReduce分布式编程经验
5.熟练掌握MySQL数据库,熟练使用SQL
6.对海量数据的分析、挖掘有浓厚兴趣,有海量数据处理经验
7.对技术有激情,喜欢钻研,能快速接受和掌握新技术,有较强的独立、主动的学习能力
8.理解能力强,有较强的逻辑思维分析能力
9.有强烈的责任心及良好的团队合作精神
其他:
1.两年以上工作经验,本科以上学历
2.有过移动数据统计系统开发经验者优先
3、Hadoop解决方案架构师(北京云基地企业管理有限公司)
工作职责:
1.产品技术架构设计、实现、应用
2.Hadoop及大数据相关技术研究
3.客户需求分析及沟通
4.向客户提供Hadoop咨询和培训
职位要求:
1.计算机相关专业毕业,3年以上工作经验,至少1年MapReduce开发经验
2.熟悉Linux操作系统,熟悉Java语言和开发环境
3.熟悉Hadoop生态系统相关项目的功能、架构、实现
4.对计算机体系结构和分布式系统有深入了解
5.优秀的表达和沟通能力