最近通过HPC的单节点服务器跑了下hadoop,除了这个事情外还再忙实验室的事情。匆忙之际,也不能忘了总结,现总结如下。
在运行hadoop程序前,按照老师的建议首先做了以下工作:
1. 大体学习了《鸟哥的私房菜》,结合Ubuntu12.04环境,学习熟悉常见指令及用法
2. 学习《Head first Java》的编程思想,主要学习的是前10章
3. 学习、练习《Advanced Unix Programming》的前三章,学习gcc、makefile,对不太熟悉的地方及时的进行了编程练习,大体看了第4章,还没有练习;
4. 学习《Hadoop in Action》前三章的内容,了解第四章
5. 学习运行WordCount的流程,还没有成功
(一)大体介绍
1 学习《鸟哥的私房菜》,纯粹是为了熟悉linux的编程指令大体翻了一下这本书,知道这本书的大体内容,对前几章做了大体的记录。
http://blog.csdn.net/sgs1018/article/details/9229987
http://blog.csdn.net/sgs1018/article/details/9230001
http://blog.csdn.net/sgs1018/article/details/9232217
http://blog.csdn.net/sgs1018/article/details/9257561
其实指令很多,关键是能在使用的时候学会查询就可以了,但是有些基础性的知识,还有有必要学习如shell的编写等,毕竟linux的编程环境还是非常需要的。
2 学习《Head first Java》的编程思想,学习java纯粹是为了编写Hadoop程序,因为hadoop是基于java开发的,通过java可以很快的调用底层API,当然可以通过hadoopstreaming用其它语言编写,这个比较好,有个博客可以看下http://dongxicheng.org/mapreduce/hadoop-streaming-programming/。由于时间比较短,《Head firstJava》只是大体看了下前10章的基础知识,对网络编程和界面的开发没有看,这部分的内容以前编写过这样的程序,入门不是很难。
基础知识参见http://blog.csdn.net/sgs1018/article/details/8947459
3 至于《Advanced Unix Programming》,只是看了前三章只是为了了解unix下编程步骤,其中用到了gcc、 makefile。在第三章中了解linux下进程的操作方式了解了fork、exec的使用方式,对信号、僵尸进程有了概念上的了解,并且这一部分也做了编程练习。
4 《Hadoop in Action》也是只看了前三章,了解hadoop的具体框架和实现方式方法而绝非单纯的概念原理。具体的概念原理可以参考
http://blog.csdn.net/sgs1018/article/details/9232407
5学习运行wordcount的运行
学习wordcount就要知道其怎么运行的,具体可以参见http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html写的非常详细。
(二)个人总结
学习以上的内容所用时长3-4天,现列举主要的时间花费:
1)5部分的学习大约1天时间
2)5部分的练习、软件环境配置大约1天时间
3)wordcount的整个运行过程大约也花了1天时间,其中主要是权限问题。
下面对这个过程遇到的问题进行Q&A:
Q1:在远程登录服务器时怎么将文件传输到服务器本地:
A1::通常用scp命令,通信方式ssh,具体参见http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html
Q2:什么是ssh?
A2:具体参见http://baike.baidu.com/view/16184.htm
Q3:常见hadoop指令
A3:put将本地文件上传至hdfs,get从hdfs将文件下载至本地,jar运行jar程序
有不少时间是花费在权限问题上,在处理的过程中是以为程序的问题或者是指令的用法有误,结果实在不能解决向实验室人员说明情况后,修改权限后就解决了,浪费了时间很是惋惜啊。
(三)hadoop运行
具体参见http://www.linuxidc.com/Linux/2011-09/44092.htm
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html
写的很好。
PS:
下面是这个过程中遇到的未解决或生疏的问题:
1)linux下新建文件夹和二进制文件、读写、编译问题
2)文件的权限访问、设定问题
3)任意两台linux系统的互访问题
4)linux常见的通信方式除了ssh以外还有哪些