[hadoop]Hadoop 小象安装测试在 Ubuntu (2)

[hadoop]Hadoop 小象安装测试在 Ubuntu (2)


前言

续前篇 http://codebeta.blogspot.tw/2012/12/hadoophadoop-ubuntu.html,接下来是试跑 wordcount 程序,验证系统有安装好。

下载所需数据

要执行 wordcount 程序,要先有数据才行。Noll 好心已经给了三个连结的文档让你下载。

  • http://www.gutenberg.org/etext/20417 The Outline of Science, Vol. 1 (of 4) by J. Arthur Thomson
  • http://www.gutenberg.org/etext/5000 The Notebooks of Leonardo Da Vinci
  • http://www.gutenberg.org/etext/4300 Ulysses by James Joyce

每一个电子书,请下载 UTF-8 的文字档,放在你想要的位置。这里选的是 /tmp/gutenberg

[email protected]:~$ ls -l /tmp/gutenberg/
total 3592
-rw-r--r-- 1 hduser hadoop  674566 Dec 23 07:37 pg20417.txt
-rw-r--r-- 1 hduser hadoop 1573150 Dec 23 07:39 pg4300.txt
-rw-r--r-- 1 hduser hadoop 1423801 Dec 23 07:38 pg5000.txt
[email protected]:~$

启动 hadoop 丛集

[email protected]:~$ /usr/local/hadoop/bin/start-all.sh

复制数据到 HDFS (Hadoop 的文件系统)

使用 hadoop 的命令,把文件从真实文件系统,送进 HDFS。

[email protected]:~$ /usr/local/hadoop/bin/hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg
[email protected]:~$ /usr/local/hadoop/bin/hadoop dfs -ls /user/hduser
Found 1 items
drwxr-xr-x   - hduser supergroup          0 2012-12-25 00:23 /user/hduser/gutenberg
[email protected]:~$ /usr/local/hadoop/bin/hadoop dfs -ls /user/hduser/gutenberg
Found 4 items
drwxr-xr-x   - hduser supergroup          0 2012-12-25 00:23 /user/hduser/gutenberg/gutenberg
-rw-r--r--   1 hduser supergroup     674566 2012-12-25 00:21 /user/hduser/gutenberg/pg20417.txt
-rw-r--r--   1 hduser supergroup    1573150 2012-12-25 00:21 /user/hduser/gutenberg/pg4300.txt
-rw-r--r--   1 hduser supergroup    1423801 2012-12-25 00:21 /user/hduser/gutenberg/pg5000.txt
[email protected]:~$

执行 MapReduce 程序

请注意执行的路径:要先 cd 到 /usr/local/hadoop。

[email protected]:/usr/local/hadoop$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg/* /user/hduser/gutenberg-output

[注1]若在别的工作路径,会发生:

[email protected]:~$ /usr/local/hadoop/bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg /user/hduser/gutenberg-output
Exception in thread "main" java.io.IOException: Error opening job jar: hadoop*examples*.jar

[注2]在命令加 * 的理由在 http://stackoverflow.com/questions/6891600/how-to-get-hadoop-wordcount-example-working

[注3]如果已经执行过,想再执行一次,会因为 output 目录已经存在而失败。此时可以执行删目录的命令:

[email protected]:/usr/local/hadoop$ bin/hadoop dfs -rmr /user/hduser/gutenberg-output
Deleted hdfs://localhost:54310/user/hduser/gutenberg-output
[email protected]:/usr/local/hadoop$

执行结果如下:

[email protected]:/usr/local/hadoop$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg/* /user/hduser/gutenberg-output
12/12/25 00:52:27 INFO input.FileInputFormat: Total input paths to process : 6
12/12/25 00:52:27 INFO util.NativeCodeLoader: Loaded the native-hadoop library
12/12/25 00:52:27 WARN snappy.LoadSnappy: Snappy native library not loaded
12/12/25 00:52:28 INFO mapred.JobClient: Running job: job_201212250016_0007
12/12/25 00:52:29 INFO mapred.JobClient:  map 0% reduce 0%
12/12/25 00:52:44 INFO mapred.JobClient:  map 16% reduce 0%
12/12/25 00:52:47 INFO mapred.JobClient:  map 33% reduce 0%
12/12/25 00:52:53 INFO mapred.JobClient:  map 50% reduce 0%
12/12/25 00:52:56 INFO mapred.JobClient:  map 66% reduce 11%
12/12/25 00:52:59 INFO mapred.JobClient:  map 83% reduce 11%
12/12/25 00:53:01 INFO mapred.JobClient:  map 100% reduce 11%
12/12/25 00:53:04 INFO mapred.JobClient:  map 100% reduce 22%
12/12/25 00:53:10 INFO mapred.JobClient:  map 100% reduce 100%
12/12/25 00:53:15 INFO mapred.JobClient: Job complete: job_201212250016_0007
12/12/25 00:53:15 INFO mapred.JobClient: Counters: 29
12/12/25 00:53:15 INFO mapred.JobClient:   Job Counters
12/12/25 00:53:15 INFO mapred.JobClient:     Launched reduce tasks=1
12/12/25 00:53:15 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=45175
12/12/25 00:53:15 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
12/12/25 00:53:15 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
12/12/25 00:53:15 INFO mapred.JobClient:     Launched map tasks=6
12/12/25 00:53:15 INFO mapred.JobClient:     Data-local map tasks=6
12/12/25 00:53:15 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=25718
12/12/25 00:53:15 INFO mapred.JobClient:   File Output Format Counters
12/12/25 00:53:15 INFO mapred.JobClient:     Bytes Written=886978
12/12/25 00:53:15 INFO mapred.JobClient:   FileSystemCounters
12/12/25 00:53:15 INFO mapred.JobClient:     FILE_BYTES_READ=4429692
12/12/25 00:53:15 INFO mapred.JobClient:     HDFS_BYTES_READ=7343786
12/12/25 00:53:15 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=7529522
12/12/25 00:53:15 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=886978
12/12/25 00:53:15 INFO mapred.JobClient:   File Input Format Counters
12/12/25 00:53:15 INFO mapred.JobClient:     Bytes Read=7343034
12/12/25 00:53:15 INFO mapred.JobClient:   Map-Reduce Framework
12/12/25 00:53:15 INFO mapred.JobClient:     Map output materialized bytes=2948682
12/12/25 00:53:15 INFO mapred.JobClient:     Map input records=155864
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce shuffle bytes=2681669
12/12/25 00:53:15 INFO mapred.JobClient:     Spilled Records=511924
12/12/25 00:53:15 INFO mapred.JobClient:     Map output bytes=12152190
12/12/25 00:53:15 INFO mapred.JobClient:     Total committed heap usage (bytes)=978935808
12/12/25 00:53:15 INFO mapred.JobClient:     CPU time spent (ms)=7070
12/12/25 00:53:15 INFO mapred.JobClient:     Combine input records=1258344
12/12/25 00:53:15 INFO mapred.JobClient:     SPLIT_RAW_BYTES=752
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce input records=204644
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce input groups=82335
12/12/25 00:53:15 INFO mapred.JobClient:     Combine output records=204644
12/12/25 00:53:15 INFO mapred.JobClient:     Physical memory (bytes) snapshot=1124028416
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce output records=82335
12/12/25 00:53:15 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=2677747712
12/12/25 00:53:15 INFO mapred.JobClient:     Map output records=1258344

检查输出结果,使用以操作:

[email protected]:/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser/gutenberg-output
Found 3 items
-rw-r--r--   1 hduser supergroup          0 2012-12-25 00:53 /user/hduser/gutenberg-output/_SUCCESS
drwxr-xr-x   - hduser supergroup          0 2012-12-25 00:52 /user/hduser/gutenberg-output/_logs
-rw-r--r--   1 hduser supergroup     886978 2012-12-25 00:53 /user/hduser/gutenberg-output/part-r-00000
[email protected]:/usr/local/hadoop$

把结果的内容显示出来的命令:

[email protected]:/usr/local/hadoop$ bin/hadoop dfs -cat /user/hduser/gutenberg-output/part-r-00000

把结果搬回真实文件系统,然后看内容的命令:

[email protected]:/usr/local/hadoop$ mkdir /tmp/gutenberg-output
[email protected]:/usr/local/hadoop$ bin/hadoop dfs -getmerge /user/hduser/gutenberg-output /tmp/gutenberg-output
12/12/25 01:03:58 INFO util.NativeCodeLoader: Loaded the native-hadoop library
[email protected]:/usr/local/hadoop$ head /tmp/gutenberg-output/gutenberg-output
"(Lo)cra"    2
"1490    2
"1498,"    2
"35"    2
"40,"    2
"A    4
"AS-IS".    2
"A_    2
"Absoluti    2
"Alack!    2
[email protected]:/usr/local/hadoop$

Hadoop Web Interface

目前版本有提供 web 界面,只能看状态,不能改。

  • http://localhost:50070/ – 可以看 NameNode 的状态

  • http://localhost:50030/ – 可以看 JobTracker 的状态

  • http://localhost:50060/ – 可以看 TaskTracker 的状态

结语

到这里,单电脑丛集的 Hadoop 系统,算是非常简单的介绍完毕。可以从这里的操作知道,若是需要一个可用的 Hadoop,要经过:(1)操作系统的安装、(2)java系统的安装、(3)hadoop系统的安装、(4)以上三个系统的设定。要执行程序,则要:(1)程序数据的准备、(2)将数据搬进至Hadoop文件系统、(3)撰写执行 MapReduce 程序、(4)将数据搬出Hadoop文件系统。这些工作都不是简单买个套装程序回来,拖一拖、拉一拉,或是按一按钮就可以解决的事情。而且,这个单丛集系统,还不具备备援、分散式计算的功能,都还需要进一步的规划及调整。

从这个最简单的系统,接下来则会因着各人的工作项目而有不同的发展方向:

  • 系统工程师,要开始研究 hadoop 设定,使之成为分散式系统。并且建立备援机制。研究 hadoop 管理工具
  • 软件工程师,依据需求,安装 HBASE 或 Cassandra 数据库,或者利用文件来存放数据。研究 MapReduce 程序风格。建立自用的界面程序与数据系统、文件系统做存取。

分享