买了一本书《Hadoop权威指南》第二版,书写的真不错,就是思维跳跃性太大,看了没两章,是前后狂翻(没办法,他一说就是看附录A安装Hadoop,看附录C准备NCDC天气数据)
附录A需要研究一下,根据自己的需求确定下来,学习阶段也就本地模式就够了,不要玩什么集群模式,浪费感情,浪费计算机资源。具体过程上网搜搜吧,好多人写,不过你需要的就是最基本的模式,只要安装Java、解压缩Hadoop,配置hadoop的bin目录到path环境变量。就可以了。集群了之类的,不要玩那些没用的,入门以后再说。我相信你30分钟都能搞好一个liunx系统,并安装jdk、解压缩hadoop,配置JAVA_HOME,和path环境变量。
附录C:准备NCDC天气数据,这一章节巨崩溃,看了两天(全是下班后的业余时间)也就从它所描述的NCDC官网上下载到了我需要的测试数据,好多,看了半天本来就是测试,随便找两个温度测试站点的2年的数据合并一下作为测试数据算了。
下面开始我对前两章的理解,希望给后来者能通过一晚上的时间,快速学习会第二章节的内容。
1. 准备工作(30分钟)
1) 科普HDFS基础命令
1,查看目录(列表)信息
#bin/hadoop dfs -ls /
2,创建目录test
#bin/hadoop dfs -mkdir test
3,删除目录test
#bin/hadoop dfs -rmr test
4,上传文件到HDFS目录
#bin/haddop dfs -put *.txt test
5,下载文件
#bin/hadoop dfs -get test test1
6. 查看一个文件
#bin/hadoop dfs –tail test
#bin/hadoop dfs –cat test
2) 准备天气预报数据
打开FTP
ftp://ftp.ncdc.noaa.gov/pub/data/gsod/
随意下两个年份的文件进行分析。
2011/007018-99999-2011.op.gz
2010/999999-94645-2012.op.gz
上传这两个gz文件到Linux服务器上,解压缩gz文件,执行命令合并两个临时文件
cat 007018-99999-2011.op 999999-94645-2012.op> ncdc-all.op
将合并后的温度文件,上传到hdfs上,等待分析备用。
hadoop dfs -put ncdc-all.op ./hdfs/temperature
2. 编写Map-Reduce函数和调度函数(Job)(60分钟)
多看看代码吧,没坏处。详见附件。附件没法上传,等我上传到资源里面吧。
http://download.csdn.net/detail/xzknet/4905094
哦,对了,附件密码忘记说了,和文件名称一样。哈哈
3. 上传Jar包到Linux服务器。(30分钟)
将第二步编写的代码打包成HadoopTest.jar放到本地某一个目录下,例如:
/home/xzknet/demo/ch02/
然后进入该目录执行如下命令
hadoop jar ./ch02.jar /home/xzknet/demo/ch02/hdfs output
系统返回如下信息
xzknet@bogon:~/demo/ch02$hadoop jar ./ch02.jar /home/xzknet/demo/ch02/hdfs output
12/12/1807:35:48 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker,sessionId=
12/12/1807:35:48 WARN mapred.JobClient: Use GenericOptionsParser for parsing thearguments. Applications should implement Tool for the same.
12/12/1807:35:48 INFO mapred.FileInputFormat: Total input paths to process : 1
12/12/1807:35:48 INFO mapred.JobClient: Running job: job_local_0001
12/12/1807:35:48 INFO mapred.FileInputFormat: Total input paths to process : 1
12/12/1807:35:48 INFO mapred.MapTask: numReduceTasks: 1
12/12/1807:35:48 INFO mapred.MapTask: io.sort.mb = 100
12/12/1807:35:48 INFO mapred.MapTask: data buffer = 79691776/99614720
12/12/1807:35:48 INFO mapred.MapTask: record buffer = 262144/327680
12/12/1807:35:48 INFO mapred.MapTask: Starting flush of map output
12/12/1807:35:49 INFO mapred.MapTask: Finished spill 0
12/12/1807:35:49 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000000_0 is done.And is in the process of commiting
12/12/1807:35:49 INFO mapred.LocalJobRunner:file:/home/xzknet/demo/ch02/hdfs/temperature:0+99802
12/12/1807:35:49 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' done.
12/12/1807:35:49 INFO mapred.LocalJobRunner:
12/12/1807:35:49 INFO mapred.Merger: Merging 1 sorted segments
12/12/1807:35:49 INFO mapred.Merger: Down to the last merge-pass, with 1 segments leftof total size: 7878 bytes
12/12/1807:35:49 INFO mapred.LocalJobRunner:
12/12/1807:35:49 INFO mapred.TaskRunner: Task:attempt_local_0001_r_000000_0 is done.And is in the process of commiting
12/12/1807:35:49 INFO mapred.LocalJobRunner:
12/12/1807:35:49 INFO mapred.TaskRunner: Task attempt_local_0001_r_000000_0 is allowedto commit now
12/12/1807:35:49 INFO mapred.FileOutputCommitter: Saved output of task'attempt_local_0001_r_000000_0' to file:/home/xzknet/demo/ch02/output
12/12/1807:35:49 INFO mapred.LocalJobRunner: reduce > reduce
12/12/1807:35:49 INFO mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done.
12/12/1807:35:49 INFO mapred.JobClient: map 100%reduce 100%
12/12/1807:35:49 INFO mapred.JobClient: Job complete: job_local_0001
12/12/1807:35:49 INFO mapred.JobClient: Counters: 13
12/12/1807:35:49 INFO mapred.JobClient: FileSystemCounters
12/12/1807:35:49 INFO mapred.JobClient: FILE_BYTES_READ=244318
12/12/1807:35:49 INFO mapred.JobClient: FILE_BYTES_WRITTEN=78028
12/12/1807:35:49 INFO mapred.JobClient: Map-Reduce Framework
12/12/1807:35:49 INFO mapred.JobClient: Reduce input groups=2
12/12/1807:35:49 INFO mapred.JobClient: Combine output records=0
12/12/1807:35:49 INFO mapred.JobClient: Mapinput records=718
12/12/1807:35:49 INFO mapred.JobClient: Reduce shuffle bytes=0
12/12/1807:35:49 INFO mapred.JobClient: Reduce output records=2
12/12/1807:35:49 INFO mapred.JobClient: Spilled Records=1432
12/12/1807:35:49 INFO mapred.JobClient: Mapoutput bytes=6444
12/12/1807:35:49 INFO mapred.JobClient: Mapinput bytes=99802
12/12/1807:35:49 INFO mapred.JobClient: Combine input records=0
12/12/1807:35:49 INFO mapred.JobClient: Mapoutput records=716
12/12/1807:35:49 INFO mapred.JobClient: Reduce input records=716
然后查看当前目录,生成output目录,打开此目录,可以看到生成结果文件,我们会看到此目录包含crc文件,是一个HDFS文件夹。
我们可以直接打开此结果文件,我们即可以看到两年的最高气温
xzknet@bogon:~/demo/ch02$ls
ch02.jar hdfs ncdc-all.op output
xzknet@bogon:~/demo/ch02$cd output
xzknet@bogon:~/demo/ch02/output$ls
part-00000
xzknet@bogon:~/demo/ch02/output$ls
part-00000
xzknet@bogon:~/demo/ch02/output$tail part-00000
2010 85.4
2012 73.7
注意:eclipse的导出Jar包时,export选项中有MainClass选项,注意设置该选项,否则:运行hadoop jar 命令时在***.jar后面需要指定包括包路径的mainclass类名.
跟书上的命令不大一样,不过他那里是指的local的方式,
这里ch02.jar在本地,要分析的数据文件temperature 在hdfs上,产生的输出在hdfs上,output是一个文件夹
xzknet@bogon:~/demo/ch02$ hadoop dfs -cat ./output/part-00000
2010 85.4
2012 73.7
xzknet@bogon:~/demo/ch02$ hadoop dfs -tail ./output/part-00000
2010 85.4
2012 73.7
到这里,恭喜你,你已经入门了。并用Hadoop开发了自己第一个云计算程序。