1. 編寫一個簡單的maprece程序,通常需要實現哪些模塊
map 根據輸入的映射函數,將一個集合映射為另一個集合,比如: 輸入集合為 {1,2,3,4,5},輸入的函數為 f(x) = x^2,那麼輸出的集合就是 {1,4,9,16,25}。 rece 就是根據輸入的歸約函數,將集合(一般指map輸出的集合)歸約,比如上面的輸出集合...
2. MapRece編程模型考慮哪些問題
程序員有好幾種啊 一,java程序員 : 二,php程序員 三,ios程序員 四,.net 5,C&C++&C# ...... 具體得看你想學什麼; 一,二,三學的人比較多, 也容易自學, 具體的話,你可以上中國查看每一種語言的特性, 比較一下它們之間的區別 ,確定自己想要學哪一種, 當然確定之後就一定要拚命堅持下去 ,千萬不要中途放棄, 斷斷續續地學效果很小的, 搞到最後可能就不想學了. 學這些語言的話最好上中國下載相關的培訓視頻, 淘寶可能有 ,好像十來塊錢就可以買到, 當然有些視頻可以免費下載, 不過不知道是否完整的, 如果真想購買最好買最新的培訓視頻. 另外最好可以找到一個人帶你學, 這樣更加有效果. 反正學程序一開始還沒什麼, 中間部分就可能會提不起精神了, 但是堅持下去了,就會很爽的了. 學程序的確實很有前途, 大學學校裡面學不到什麼東西的 , 一切得看自己自學 . 少年, 做一名程序員, 恩!非常好. 祝你順利!最後, 謹記:堅持就是勝利
3. 怎樣在研究在雲計算環境下 用maprece編程模型去編程 然後把程序放到集群上去跑
在hadoop上安裝eclipse,再在eclipse中配置hadoop環境變數,maprece編程的話可以看Hadoop in action
4. 基於hadoop的maprece編程的環境配置,下面哪一步是不必要的
分別對Map函數和Rece函數進行測試,功能正確後,就可以在小規模集群上進行測試,測試成功後就可以在Hadoop集群上進行運行。這里先不介紹單元測試的知識,後面再專門介紹如何在Hadoop中使用MRUnit進行單元測試。
MRUnit是由Couldera公司開發的專門針對 Hadoop中 編寫MapRece單元測試的框架,基本原理是JUnit4和 EasyMock。MR就是Map和Rece的縮寫。
MRUnit框架非常精簡,其核心的單元測試依賴於JUnit。
5. MapRece編程的預處理
數據去重的最終目標是讓原始數據中出現次數超過一次的數據在輸出文件中只出現一次。我們自然而然會想到將同一個數據的所有記錄都交給一台rece機器,無論這個數據出現多少次,只要在最終結果中輸出一次就可以了。
具體就是rece的輸入應該以數據作為key,而對value-list則沒有要求。當rece接收到一個<key,value-list>時就直接將key復制到輸出的key中,並將value設置成空值。
6. 跪求用JAVA 寫一個maprece程序,完成數據讀取處理,高分在線等
We want to count all the books in the library. You
count up shelf #1, I count up shelf #2. That's map. The more people we
get, the faster it goes.
我們要數圖書館中的所有書。你數1號書架,我數2號書架。這就是「Map」。我們人越多,數書就更快。
Now we get together and add our indivial counts. That's rece.
現在我們到一起,把所有人的統計數加在一起。這就是「Rece」。
你這個是並行處理程序,用來處理這么小的數據合適嗎?你有所需要的Hadoop環境嗎
7. maprece編程實例,例如把3個文件的數相加,下面錯誤
你map完以後的數據格式是
key:1 value:1 2 3
key:1 value:4 5 6
key:1 value:7 8 9
new BigInteger(tmp) 這句,tmp的格式是1 2 3這種字元串,先把tmp作為String解析成幾個數字再轉int相加
8. 有沒有關於maprece編程的書籍推薦
maprece編程書籍推薦一:《MapRece設計模式》
將各種有價值的MapRece設計模式匯集在一起,形成一本獨特的合集,可以幫讀者節省大量的時間和精力,無論讀者身處哪個領域,使用哪種編程語言,使用什麼開發框架。
書中對每一種模式都會詳細解釋其使用的上下文、可能存在的陷阱及使用的注意事項,以幫助讀者在對大數據問題架構建模時避免常見的設計錯誤。本書還提供了MapRece的一個完整綜述,解釋其起源和實現,並說明設計模式如此重要的原因。書中的所有示例代碼都是基於Hadoop平台編寫的。
maprece編程書籍推薦二:《Hadoop MapRece實戰手冊》
9. maprece什麼語言編程
maprece是hadoop的一個分布式計算框架,使用的是java語言編寫
10. 如何快速地編寫和運行一個屬於自己的MapRece例子程序
大數據的時代, 到處張嘴閉嘴都是Hadoop, MapRece, 不跟上時代怎麼行? 可是對一個hadoop的新手, 寫一個屬於自己的MapRece程序還是小有點難度的, 需要建立一個maven項目, 還要搞清楚各種庫的依賴, 再加上編譯運行, 基本上頭大兩圈了吧。 這也使得很多隻是想簡單了解一下MapRece的人望而卻步。
本文會教你如何用最快最簡單的方法編寫和運行一個屬於自己的MapRece程序, let's go!
首先有兩個前提:
1. 有一個已經可以運行的hadoop 集群(也可以是偽分布系統), 上面的hdfs和maprece工作正常 (這個真的是最基本的了, 不再累述, 不會的請參考 http://hadoop.apache.org/docs/current/)
2. 集群上安裝了JDK (編譯運行時會用到)
正式開始
1. 首先登入hadoop 集群裡面的一個節點, 創建一個java源文件, 偷懶起見, 基本盜用官方的word count (因為本文的目的是教會你如何快編寫和運行一個MapRece程序, 而不是如何寫好一個功能齊全的MapRece程序)
內容如下:
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.maprece.Job;
import org.apache.hadoop.maprece.Mapper;
import org.apache.hadoop.maprece.Recer;
import org.apache.hadoop.maprece.lib.input.FileInputFormat;
import org.apache.hadoop.maprece.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class myword {
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumRecer
extends Recer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void rece(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println('Usage: wordcount <in> <out>');
System.exit(2);
}
Job job = new Job(conf, 'word count');
job.setJarByClass(myword.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumRecer.class);
job.setRecerClass(IntSumRecer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
與官方版本相比, 主要做了兩處修改
1) 為了簡單起見,去掉了開頭的 package org.apache.hadoop.examples;
2) 將類名從 WordCount 改為 myword, 以體現是我們自己的工作成果 :)
2. 拿到hadoop 運行的class path, 主要為編譯所用
運行命令
hadoop classpath
保存打出的結果,本文用的hadoop 版本是Pivotal 公司的Pivotal hadoop, 例子:
/etc/gphd/hadoop/conf:/usr/lib/gphd/hadoop/lib/*:/usr/lib/gphd/hadoop/.//*:/usr/lib/gphd/hadoop-hdfs/./:/usr/lib/gphd/hadoop-hdfs/lib/*:/usr/lib/gphd/hadoop-hdfs/.//*:/usr/lib/gphd/hadoop-yarn/lib/*:/usr/lib/gphd/hadoop-yarn/.//*:/usr/lib/gphd/hadoop-maprece/lib/*:/usr/lib/gphd/hadoop-maprece/.//*::/etc/gphd/pxf/conf::/usr/lib/gphd/pxf/pxf-core.jar:/usr/lib/gphd/pxf/pxf-api.jar:/usr/lib/gphd/publicstage:/usr/lib/gphd/gfxd/lib/gemfirexd.jar::/usr/lib/gphd/zookeeper/zookeeper.jar:/usr/lib/gphd/hbase/lib/hbase-common.jar:/usr/lib/gphd/hbase/lib/hbase-protocol.jar:/usr/lib/gphd/hbase/lib/hbase-client.jar:/usr/lib/gphd/hbase/lib/hbase-thrift.jar:/usr/lib/gphd/hbase/lib/htrace-core-2.01.jar:/etc/gphd/hbase/conf::/usr/lib/gphd/hive/lib/hive-service.jar:/usr/lib/gphd/hive/lib/libthrift-0.9.0.jar:/usr/lib/gphd/hive/lib/hive-metastore.jar:/usr/lib/gphd/hive/lib/libfb303-0.9.0.jar:/usr/lib/gphd/hive/lib/hive-common.jar:/usr/lib/gphd/hive/lib/hive-exec.jar:/usr/lib/gphd/hive/lib/postgresql-jdbc.jar:/etc/gphd/hive/conf::/usr/lib/gphd/sm-plugins/*:
3. 編譯
運行命令
javac -classpath xxx ./myword.java
xxx部分就是上一步裡面取到的class path
運行完此命令後, 當前目錄下會生成一些.class 文件, 例如:
myword.class myword$IntSumRecer.class myword$TokenizerMapper.class
4. 將class文件打包成.jar文件
運行命令
jar -cvf myword.jar ./*.class
至此, 目標jar 文件成功生成
5. 准備一些文本文件, 上傳到hdfs, 以做word count的input
例子:
隨意創建一些文本文件, 保存到mapred_test 文件夾
運行命令
hadoop fs -put ./mapred_test/
確保此文件夾成功上傳到hdfs 當前用戶根目錄下
6. 運行我們的程序
運行命令
hadoop jar ./myword.jar myword mapred_test output
順利的話, 此命令會正常進行, 一個MapRece job 會開始工作, 輸出的結果會保存在 hdfs 當前用戶根目錄下的output 文件夾裡面。
至此大功告成!
如果還需要更多的功能, 我們可以修改前面的源文件以達到一個真正有用的MapRece job。
但是原理大同小異, 練手的話, 基本夠了。
一個拋磚引玉的簡單例子, 歡迎板磚。
轉載