ubuntu编写as(ubuntu下用什么软件写代码)

大家好,今天来为大家分享ubuntu编写as的一些知识点,和ubuntu下用什么软件写代码的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

如何使用Python为Hadoop编写一个简单的MapReduce程序

我们将编写一个简单的 MapReduce程序,使用的是C-Python,而不是Jython编写后打包成jar包的程序。

我们的这个例子将模仿 WordCount并使用Python来实现,例子通过读取文本文件来统计出单词的出现次数。结果也以文本形式输出,每一行包含一个单词和单词出现的次数,两者中间使用制表符来想间隔。

先决条件

编写这个程序之前,你学要架设好Hadoop集群,这样才能不会在后期工作抓瞎。如果你没有架设好,那么在后面有个简明教程来教你在Ubuntu Linux上搭建(同样适用于其他发行版linux、unix)

如何使用Hadoop Distributed File System(HDFS)在Ubuntu Linux建立单节点的 Hadoop集群

如何使用Hadoop Distributed File System(HDFS)在Ubuntu Linux建立多节点的 Hadoop集群

Python的MapReduce代码

使用Python编写MapReduce代码的技巧就在于我们使用了 HadoopStreaming来帮助我们在Map和 Reduce间传递数据通过STDIN(标准输入)和STDOUT(标准输出).我们仅仅使用Python的sys.stdin来输入数据,使用sys.stdout输出数据,这样做是因为HadoopStreaming会帮我们办好其他事。这是真的,别不相信!

Map: mapper.py

将下列的代码保存在/home/hadoop/mapper.py中,他将从STDIN读取数据并将单词成行分隔开,生成一个列表映射单词与发生次数的关系:

注意:要确保这个脚本有足够权限(chmod+x/home/hadoop/mapper.py)。

#!/usr/bin/env python

import sys

# input comes from STDIN(standard input)

for line in sys.stdin:

# remove leading and trailing whitespace

line= line.strip()

# split the line into words

words= line.split()

# increase counters

for word in words:

# write the results to STDOUT(standard output);

# what we output here will be the input for the

# Reduce step, i.e. the input for reducer.py

#

# tab-delimited; the trivial word count is 1

print'%s\\t%s'%(word, 1)在这个脚本中,并不计算出单词出现的总数,它将输出"<word> 1"迅速地,尽管<word>可能会在输入中出现多次,计算是留给后来的Reduce步骤(或叫做程序)来实现。当然你可以改变下编码风格,完全尊重你的习惯。

Reduce: reducer.py

将代码存储在/home/hadoop/reducer.py中,这个脚本的作用是从mapper.py的STDIN中读取结果,然后计算每个单词出现次数的总和,并输出结果到STDOUT。

同样,要注意脚本权限:chmod+x/home/hadoop/reducer.py

#!/usr/bin/env python

from operator import itemgetter

import sys

# maps words to their counts

word2count={}

# input comes from STDIN

for line in sys.stdin:

# remove leading and trailing whitespace

line= line.strip()

# parse the input we got from mapper.py

word, count= line.split('\\t', 1)

# convert count(currently a string) to int

try:

count= int(count)

word2count[word]= word2count.get(word, 0)+ count

except ValueError:

# count was not a number, so silently

# ignore/discard this line

pass

# sort the words lexigraphically;

#

# this step is NOT required, we just do it so that our

# final output will look more like the official Hadoop

# word count examples

sorted_word2count= sorted(word2count.items(), key=itemgetter(0))

# write the results to STDOUT(standard output)

for word, count in sorted_word2count:

print'%s\\t%s'%(word, count)

测试你的代码(cat data| map| sort| reduce)

我建议你在运行MapReduce job测试前尝试手工测试你的mapper.py和 reducer.py脚本,以免得不到任何返回结果

这里有一些建议,关于如何测试你的Map和Reduce的功能:

——————————————————————————————————————————————

\r\n

# very basic test

hadoop@ubuntu:~$ echo"foo foo quux labs foo bar quux"|/home/hadoop/mapper.py

foo 1

foo 1

quux 1

labs 1

foo 1

bar 1

——————————————————————————————————————————————

hadoop@ubuntu:~$ echo"foo foo quux labs foo bar quux"|/home/hadoop/mapper.py| sort|/home/hadoop/reducer.py

bar 1

foo 3

labs 1

——————————————————————————————————————————————

# using one of the ebooks as example input

#(see below on where to get the ebooks)

hadoop@ubuntu:~$ cat/tmp/gutenberg/20417-8.txt|/home/hadoop/mapper.py

The 1

Project 1

Gutenberg 1

EBook 1

of 1

[...]

(you get the idea)

quux 2

quux 1

——————————————————————————————————————————————

在Hadoop平台上运行Python脚本

为了这个例子,我们将需要三种电子书:

The Outline of Science, Vol. 1(of 4) by J. Arthur Thomson\r\n

The Notebooks of Leonardo Da Vinci\r\n

Ulysses by James Joyce

下载他们,并使用us-ascii编码存储解压后的文件,保存在临时目录,比如/tmp/gutenberg.

hadoop@ubuntu:~$ ls-l/tmp/gutenberg/

total 3592

-rw-r--r-- 1 hadoop hadoop 674425 2007-01-22 12:56 20417-8.txt

-rw-r--r-- 1 hadoop hadoop 1423808 2006-08-03 16:36 7ldvc10.txt

-rw-r--r-- 1 hadoop hadoop 1561677 2004-11-26 09:48 ulyss12.txt

hadoop@ubuntu:~$

复制本地数据到HDFS

在我们运行MapReduce job前,我们需要将本地的文件复制到HDFS中:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs-copyFromLocal/tmp/gutenberg gutenberg

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs-ls

Found 1 items

/user/hadoop/gutenberg<dir>

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs-ls gutenberg

Found 3 items

/user/hadoop/gutenberg/20417-8.txt<r 1> 674425

/user/hadoop/gutenberg/7ldvc10.txt<r 1> 1423808

/user/hadoop/gutenberg/ulyss12.txt<r 1> 1561677

执行 MapReduce job

现在,一切准备就绪,我们将在运行Python MapReduce job在Hadoop集群上。像我上面所说的,我们使用的是

HadoopStreaming帮助我们传递数据在Map和Reduce间并通过STDIN和STDOUT,进行标准化输入输出。

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar

-mapper/home/hadoop/mapper.py-reducer/home/hadoop/reducer.py-input gutenberg/*

-output gutenberg-output

在运行中,如果你想更改Hadoop的一些设置,如增加Reduce任务的数量,你可以使用“-jobconf”选项:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar

-jobconf mapred.reduce.tasks=16-mapper...

一个重要的备忘是关于Hadoop does not honor mapred.map.tasks

这个任务将会读取HDFS目录下的gutenberg并处理他们,将结果存储在独立的结果文件中,并存储在HDFS目录下的

gutenberg-output目录。

之前执行的结果如下:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar

-mapper/home/hadoop/mapper.py-reducer/home/hadoop/reducer.py-input gutenberg/*

-output gutenberg-output

additionalConfSpec_:null

null=@@@userJobConfProps_.get(stream.shipped.hadoopstreaming

packageJobJar: [/usr/local/hadoop-datastore/hadoop-hadoop/hadoop-unjar54543/]

[]/tmp/streamjob54544.jar tmpDir=null

[...] INFO mapred.FileInputFormat: Total input paths to process: 7

[...] INFO streaming.StreamJob: getLocalDirs(): [/usr/local/hadoop-datastore/hadoop-hadoop/mapred/local]

[...] INFO streaming.StreamJob: Running job: job_200803031615_0021

[...]

[...] INFO streaming.StreamJob: map 0% reduce 0%

[...] INFO streaming.StreamJob: map 43% reduce 0%

[...] INFO streaming.StreamJob: map 86% reduce 0%

[...] INFO streaming.StreamJob: map 100% reduce 0%

[...] INFO streaming.StreamJob: map 100% reduce 33%

[...] INFO streaming.StreamJob: map 100% reduce 70%

[...] INFO streaming.StreamJob: map 100% reduce 77%

[...] INFO streaming.StreamJob: map 100% reduce 100%

[...] INFO streaming.StreamJob: Job complete: job_200803031615_0021

[...] INFO streaming.StreamJob: Output: gutenberg-output hadoop@ubuntu:/usr/local/hadoop$

正如你所见到的上面的输出结果,Hadoop同时还提供了一个基本的WEB接口显示统计结果和信息。

OpenStack为什么这么火

Openstack之所以很火,一是内因,OpenStack自身的优势——开源性。二是外因,众多企业和组织的参与开发,尤其是世界领军企业的加入,推动了OpenStack的高速成长。

Openstack的优势

控制性:开源的平台意味着不会被某个特定的厂商绑定和限制,而且模块化的设计能把遗留的和第三方的技术进行集成,从而来满足自身业务需要。OpenStack项目所提供的云计算,让IT团队可以成为自己的云计算服务厂商,虽然构建和维护一个开源私有云计算并不适合每一家公司;但是如果拥有基础设施和开发人员,OpenStack将是很好的选择。

兼容性:OpenStack公共云的兼容性可以使企业在将来很容易的将数据和应用迁移到基于安全策略的、经济的和其他关键商业标准的公共云中。使用亚马逊网络服务及其他云服务的企业,抱怨最多的就是“用户被绑架,无法轻易转移数据”。在云计算社区,有一个流行的概念,即数据是有重量的,一旦将数据存在某个云计算提供商那里,它就变得繁重而难以迁移,作为企业最重要的资源,如果在迁移的过程中不能保护好数据安全,很有可能会给企业带来灭顶之灾,相信没有公司愿意承担这个风险。

可扩展性:目前主流的Linux操作系统,包括Fedora、SUSE等都将支持OpenStack。OpenStack在大规模部署公有云时,在可扩展性上有优势,而且也可用于私有云,一些企业特性也在逐步完善中。随着Ubuntu 12.04 LTS正式全面将Eucalyptus替换成OpenStack,OpenStack将超过Eucalyptus成为云平台基础的第一选择。

灵活性:灵活性是OpenStack最大的优点之一,用户可以根据自己的需要建立基础设施,也可以轻松地为自己的集群增加规模。主要用Python编写的OpenStack代码质量相当高,很容易遵循,带有一个完全文档的API,用户可以使用JSON或者XML消息格式的不同组件的代码,这相当有利于项目的发展壮大。此外,OpenStack项目的代码将在极为宽松自由的Apache 2许可下发布,这意味着任何第三方都可以重新发布这些代码,在其基础上开发私有软件并按照新的许可发布,给众多的云计算企业,留下了的更大的发展空间。

行业标准:来自全球十多个国家的60多家领军企业,包括HP、Cisco、Dell、Intel以及微软都参与到了OpenStack的项目中,并且在全球使用OpenStack技术的云平台在不断的上线。云计算领军企业的加入,会无形透露出一个信息,就是OpenStack未来可能会成为一个行业标准,而且OpenStack项目研发的初衷就是制定一套开源软件标准。

实践检验:实践是检验真理的唯一标准,OpenStack的云操作系统,已被全球正在运营的大型公有云和私有云技术所验证过,比如,Dell公司已经推出了OpenStack安装程序Crowbar,不仅如此,OpenStack在中国的发展趋势也是非常之好,包括物联网用户、国内高校以及部分大小企业,都开始利用OpenStack建立云计算环境,整合企业架构以及治理公司内部的IT基础架构。

领军企业支持

在RackSpace宣布推出开源云计算平台OpenStack后,曾经震动了业界。在2010年的10月,微软表示将推动Windows Server 2008 R2和OpenStack的整合。之后不久,思科也宣布加入OpenStack,着重于OpenStack的网络功能并推出了新的NaaS服务(Network as a Service)。

OpenStack的热度在2011年仍旧未见衰减,7月底,Dell推出了第一套支持OpenStack架构的解决方案,开发了一个OpenStack安装程序Crowbar,可供企业使用Power Edge C服务器来建设一个OpenStack环境。随后HP云服务副总经理Emil Sayegh也在官方BBS上宣布加入OpenStack计划,除了提供赞助外,HP云端开发团队也将参与OpenStack计划的开发(编者注:2014年,HP已经推出了 Helion OpenStack)。

据不完全统计,2010年7月开源以后,越来越多的IT厂商宣布加入OpenStack,有超过30家公司表示对该开源平台项目有兴趣,而有些则已经积极地参与该项目,这些公司包括AMD、Cloudkick、Cloudswitch和NTT DATA等。

随着云计算创新的步伐不断加快,新一代的技术和成果也在快速增长。但是云计算市场的分散性导致客户难以选择云计算厂商和合作伙伴,一旦做错决定将不得不转移到新的云上进行重新构建。这对于一些大的公司来说,确实是一个挑战。鉴于上述原因,云需要一个开源的操作系统,开源云可以避免被锁的问题,而OpenStack就是这样一个开源的云操作系统,RackSpace CTO John Engates更将OpenStack的发展比作Linux和MySQL。

学习Linux的步骤是怎样的

首先,要学Linux编程,你得会用Linux,也就是得在命令行环境下生存下来。什么叫生存下来呢?就是我现在给你一台主机,键盘,显示器啥的,然后给你一个服务器版的Linux系统的光盘或者其他什么安装盘,你去把这台主机用起来。什么叫用起来呢?你平常用Windows电脑干啥,你现在还用这台电脑干啥。新建文件啊,查看文件,编辑文件,保存文件,复制,移动,删除,打包,解压,联网,下载个什么东西啊等等基本操作你得会。还有软件怎么安装,不仅要熟悉apt-get和yum,还有给你源码的软件怎么安装你得会,另外要熟悉Linux下的文件系统,每个目录是干啥的,目录下的文件是干嘛的,插入一个U盘,如何挂载这个U盘,操作U盘下的文件你得会啊。这个看一本书就行了,《鸟哥的Linux私房菜-基础篇》,记得是基础篇,记得安装Linux系统自己操作一遍,还有一本是服务器篇,你既然是要学Linux编程开发,那就不用看服务器架设篇了。做完这一步,你可以开发了。

Linux下开发,两种基本语言,C和C++咯,至于其他人要说Python,Java,Ruby啥的不讨论,因为就讨论Linux下的开发,什么是Linux开发呢?就是利用Linux的API进行开发咯,首先你得会C语言或者C++语言啊,这个去看丹尼斯的《C程序设计语言》,注意是丹尼斯的,C++的就去看《Essential C++》或者《C++ Primer》,然后在Linux下的程序开发,Linux的API是遵循POSIX标准的,自行谷歌什么叫POSIX。Linux下程序开发几大块,文件操作,这个很重要,你要知道Linux下的一个思想叫一切皆文件,可见文件读写多重要了。I/O模型,五大I/O模型,阻塞,非阻塞,复用,信号驱动和异步I/O,环环相扣丝丝相连,概念和操作都要仔细琢磨,最重要的当属复用,就是select,poll和epoll,面试笔试就问这个东西,要知道他们的适用范围和优缺点。进程和线程,包括进程和线程的概念和区别,进程和线程的建立,同步,通信,互斥等等。网络编程,就是socket编程,Linux编程,这个学不好等于啥都没学,这个估计还得了解一下TCP/IP协议,编程方面主要是那几步,申请socket,bind,listen,accept几步,要熟悉种常见的服务器模型,进程池线程池方式的,多进程方式的,复用方式的,最重要的是复用方式的,这部分可以先只写服务器,测试直接用Telnet就好了,加快速度么。其余的就是数据库,这个东西不属于Linux,但是还得会,要不然啥都做不了,看那本《MySQL必知必会》,当然深入的话还得找本专业的书细细看。这个时候就可以真刀真枪的去干点有意思的事了,比如写个终端下的类似于QQ的软件啊,包括服务器和客户端啊,慢慢的增加并发数,比如可以同时支持五千人在线啊,文件传输啊等等。然后学学Qt,熟悉一下图形界面,可以把你的终端下的QQ完全改成图形界面下的。估计到这个时候,你差不多在Linux下进行像样的开发了吧。在这个过程的学习中,相信你已经学会Makefile的编写啊,编译啊,链接啊等等一些细枝末节的东西了,还得反思一下把零散的东西串一串,要系统化。

接下来就是继续深入了,Linux为什么这么多人用,好处在哪里,你得去稍微的看看内核源码啊,内核的进线程调度啊,我告诉你,Linux内核的一个链表都够你研究好几节课的。哦,这个时候,数据结构啥的又得翻出来加强一下了不是,计算机网络啥的也得看看,操作系统原理啥的也得看看呢不是,把这些东西放在这里是合适的,前面让你知其然,知道怎么编程怎么做,现在要知其所以然了不是。

在学习的过程中,要不断积累和了解最新的东西,最起码要知道个概念,比如分布式,大数据,云计算,机器学习,计算机视觉,JIT等等,形成知识链,这样不会导致你最后不知道学啥。有个建议,一定要学一下Python,一定要学一下Python,一定要学一下Python,重要的事情说三遍。它能极大的提高你的工作效率,也能和C/C++结合在一起用,很nice的语言。

最后推荐几本书(前面的包含在内):

《鸟哥的Linux私房菜基础篇》

《C程序设计语言》丹尼斯写的

《Linux C编程一站式学习》宋劲杉写的

《Eensstial C++》

《C++ Primer》

《Effective C++》

《Linux网络编程》宋劲彬写的

《Unix环境高级编程》

《Unix网络编程》两部

《Linux高级程序设计》华清远见的

《MySQL必知必会》

《数据库系统概念》

《大话数据结构》

《算法导论》

《Linux内核情景分析》

《深入理解Linux内核》

《深入理解计算机系统》

《现代操作系统》

《深入理解计算机网络》

《TCP/IP》的三卷经典书

阅读剩余
THE END