單拿標題來講,看來有點裝x,但是沒有惡意,知識記錄自己的學習過程,希望能碰到一些志同道合的人,一起討論。

首先,我們要理解:什麼是hadoop?給人的第一感覺就一個字“雲”,似乎帶著點神奇的色彩,不可否認hadoop有他獨特的地方,但也沒那麼神乎其神。他是一個開源框架,可以編寫和執行分散式應用處理大規模資料,通過建立hadoop叢集和執行一些mapred例子,我所感到只有就個字:“方便”、“健壯”、“可擴充套件”、“簡單”。hadoop自身帶有檔案系統,可以處理大規模資料,相比較下:

會和sql資料庫有什麼區別呢?

1.隨著資料量的增大,提高資料庫配置的開銷越來越大,2倍於pc機的伺服器的價格遠遠高於2臺pc機的價格,這就是hadoop的優勢,增加一個電腦(節點),要比一次伺服器升級划算的多。

2.用鍵值代替了關係表,個人感覺在大規模資料面前的資料處理,鍵值對跟為靈活。

如何理解hadoop的mapreduce:

概念性的東西聽著有些乏味:下面我們動手改一個自己的mapreduce程式:

我們都知道hadoop自帶例子中有一個wordcount的例子,下面我們就改寫這個例子,執行一個屬於我們自己的mapreduce程式;

1、首先要找到wordcount的原始碼,在hadoop目錄下的src/examples/org/apache/hadoop/examples/WordCount.java

2、建立資料夾並且把wordcount檔案拷出來:

mkdir playground

mkdir playground/src

mkdir playground/classes

cp src/examples/org/apache/hadoop/examples/WordCount.java playground/src/WordCount.java


3、在hadoop框架中編譯和執行這個副本

javac -classpath hadoop-0.20.2-core.jar:lib/commons-cli-1.2.jar -d playground/classes/ playground/src/WordCount.java 
[[email protected] hadoop-0.20.2]$ jar -cvf playground/wordcount.jar -C playground/classes/ .
標明清單(manifest)
增加:org/(讀入= 0) (寫出= 0)(儲存了 0%)
增加:org/apache/(讀入= 0) (寫出= 0)(儲存了 0%)
增加:org/apache/hadoop/(讀入= 0) (寫出= 0)(儲存了 0%)
增加:org/apache/hadoop/examples/(讀入= 0) (寫出= 0)(儲存了 0%)
增加:org/apache/hadoop/examples/WordCount.class(讀入= 1911) (寫出= 996)(壓縮了 47%)
增加:org/apache/hadoop/examples/WordCount$IntSumReducer.class(讀入= 1789) (寫出= 746)(壓縮了 58%)
增加:org/apache/hadoop/examples/WordCount$TokenizerMapper.class(讀入= 1903) (寫出= 819)(壓縮了 56%)


4、執行你的程式,出現如下資訊說明執行成功:

[[email protected] hadoop-0.20.2]$ bin/hadoop jar playground/wordcount.jar org.apache.hadoop.examples.WordCount input my_output
11/12/05 21:33:30 INFO input.FileInputFormat: Total input paths to process : 1
11/12/05 21:33:31 INFO mapred.JobClient: Running job: job_201111281334_0014
11/12/05 21:33:32 INFO mapred.JobClient:  map 0% reduce 0%
11/12/05 21:33:41 INFO mapred.JobClient:  map 100% reduce 0%
11/12/05 21:33:53 INFO mapred.JobClient:  map 100% reduce 100%
11/12/05 21:33:55 INFO mapred.JobClient: Job complete: job_201111281334_0014
11/12/05 21:33:55 INFO mapred.JobClient: Counters: 17
11/12/05 21:33:55 INFO mapred.JobClient:   Job Counters 
11/12/05 21:33:55 INFO mapred.JobClient:     Launched reduce tasks=1
11/12/05 21:33:55 INFO mapred.JobClient:     Launched map tasks=1
11/12/05 21:33:55 INFO mapred.JobClient:     Data-local map tasks=1
11/12/05 21:33:55 INFO mapred.JobClient:   FileSystemCounters
11/12/05 21:33:55 INFO mapred.JobClient:     FILE_BYTES_READ=25190
11/12/05 21:33:55 INFO mapred.JobClient:     HDFS_BYTES_READ=44253
11/12/05 21:33:55 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=50412
11/12/05 21:33:55 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=17876
11/12/05 21:33:55 INFO mapred.JobClient:   Map-Reduce Framework
11/12/05 21:33:55 INFO mapred.JobClient:     Reduce input groups=1857
11/12/05 21:33:55 INFO mapred.JobClient:     Combine output records=1857
11/12/05 21:33:55 INFO mapred.JobClient:     Map input records=734
11/12/05 21:33:55 INFO mapred.JobClient:     Reduce shuffle bytes=25190
11/12/05 21:33:55 INFO mapred.JobClient:     Reduce output records=1857
11/12/05 21:33:55 INFO mapred.JobClient:     Spilled Records=3714
11/12/05 21:33:55 INFO mapred.JobClient:     Map output bytes=73129
11/12/05 21:33:55 INFO mapred.JobClient:     Combine input records=7696
11/12/05 21:33:55 INFO mapred.JobClient:     Map output records=7696
11/12/05 21:33:55 INFO mapred.JobClient:     Reduce input records=1857

5、檢視結果,在檔案系統的my_output中

6、最後大家可以任意更改wordcount.java裡面的檔案,達到自己想要的效果。

.