英文参考文档链接如下:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html
这篇文章描述了单节点的伪分布式hadoop部署。下面是我根据官方文档进行自我部署测试 。
一、写在前面的话
hadoop包括的东西很多,而且文档上的东西也不一定全都正确 ,再加上运行环境的多样化,学习中途出现各种问题是很常见的,遇到问题的时候,先自己花点时间想想能不能自己解决,如果不能再上网找方法,既然都准备要学习它了,就要有自信,hadoop在牛逼也是一种技术,是技术就没有学不会的。
还有我的个人建议是不要一上来就开始跑hadoop这种hello级别的例子,先自己了解下hadoop是什么,主要包括哪些方面,这些东西又是干什么的。这时候我们不知道具体操作,但是心里有点概念会让自己对后面学习过程中的一些步骤多些理解。
二、说说环境
操作系统:看官网推荐的是ubuntu系统,所以我用的是64bit 的ubuntu12.10这个版本
必要软件:ssh 用 apt-get install ssh
rsync 用 apt-get install rsync
java 用 orache 的 64bit 7u55版本,安装方法见链接
hadoop 上官网下2.6.0的stable版本
三、准备工作
将下载的hadoop 解压到/usr/local/下
cp hadoop-2.6.0.tar /usr/local
cd /usr/local
tar xf hadoop-2.6.0.tar
修改配置文件,我用的是vim,也可以用其他的工具,安装的话也是apt-get install vim
vim /usr/local/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
在26行,修改java home的路径
export JAVA_HOME="/usr/local/java/jdk1.7.0_55"
我没有找到 HADOOP_PREFIX的内容所有
没有加下面的内容
export HADOOP_PREFIX=/usr/local/hadoop
运行hadoop应该会有下面的一些命令提示
root@mtang-VirtualBox:/usr/local/hadoop-2.6.0/bin# ./hadoop
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar <jar> run a jar file
checknative [-a|-h] check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath prints the class path needed to get the
credential interact with credential providers
Hadoop jar and the required libraries
daemonlog get/set the log level for each daemon
trace view and modify Hadoop tracing settings
or
CLASSNAME run the class named CLASSNAME
四、独立的hadoop
独立的就是没有配置任何分布式特性的,默认的就是这样,这比较方便调试,下面的命令可以让给你看到点输出信息。
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
$ cat output/*
五、伪分布式hadoop
5.1 修改配置文件
将下面的内容拷贝到你的配置文件/usr/local/hadoop-2.6.0/etc/hadoop/core-site.xml ,刚打开的时候应该是自由<configuration>,中间是空的。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
如上,拷贝下面内容到配置文件/usr/local/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
5.2 设置免密码的ssh
首先试下下面的命令ssh localhost看是否需要密码,如果要那么执行下面的命令,$表示一行的开头,不要拷贝进去了。
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
上面的命令是生成一个证书,然后通过这个证书完成免密码ssh连接
5.3 开始执行吧
1. 格式化文件系统,这次我们用到了HDFS了,HDFS是一种分布文件系统,对分布式文件系统不了解的就先把它当作本地的文件系统,FAT32,NTFS之类的,再简单点说就是你的硬盘,这次的任务是格式化你的"硬盘“
/usr/local/hadoop-2.6.0/bin/hdfs namenode -format
2.接下来我们启动我们的namenode,namenode是hdfs的内容
/usr/local/hadoop-2.6.0/sbin/start-dfs.sh
3. 这时候我们可以通过浏览器查看namenode的界面,在浏览器输入下面内容,当然如果不是本机localhost换成机器IP吧。
http://localhost:50070/
4. 在dfs上创建目录吧,用来存放待处理的文件的
/usr/local/hadoop-2.6.0/bin/hdfs dfs -mkdir -p /user/root/input
5. 把本地待处理的文件拷贝到dfs上的
/usr/local/hadoop-2.6.0/bin/hdfs dfs -put /usr/local/hadoop-2.6.0/etc/hadoop/* /user/root/input
6. 接下来我们就可以运行期待的已久的hadoop分析任务了,注意是一行
/usr/local/hadoop-2.6.0/bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
如果你多次运行上面的命令碰巧出现下面的错误的话
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/root/output already exists
你需要先删除这个文件夹
/usr/local/hadoop-2.6.0/bin/hdfs dfs -rm -r /user/root/output
7. 好了,运行完了,把结果拷贝到本地磁盘看看
/usr/local/hadoop-2.6.0/bin/hdfs dfs -get /user/root/output /root/output
看看结果
cat /root/output/*
其实也可以不用拷贝,直接在hfs上看的
/usr/local/hadoop-2.6.0/bin/hdfs dfs -cat /user/root/output/*
6 dfs.audit.logger
4 dfs.class
3 dfs.server.namenode.
2 dfs.period
2 dfs.audit.log.maxfilesize
2 dfs.audit.log.maxbackupindex
1 dfsmetrics.log
1 dfsadmin
1 dfs.servers
1 dfs.replication
1 dfs.file
/usr/local/hadoop-2.6.0/sbin/stop-dfs.sh
cp mapred-site.xml.template mapred-site.xml
然后加入下面内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
然后继续修改 etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
sbin/start-yarn.sh
3. 打开网页可以查看ResourceManager 的页面
http://localhost:8088/
4. 运行mapreduce的任务
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
当你运行的时候可能会遇到Connect refused 的错误,提示服务器9000拒绝,然后我们回到前面看看哪里用了9000端口会发现DFS用了,所以继续定位重新启动dfs ,etc/hadoop/start-dfs.sh的日志会发现datanode没有启动,而且会有java.io.IOException: Incompatible clusterIDs的错误,上网查了下是因为做format 的时候没有清空dataNode下的data目录引起的,一个可行的解决方法是手动删除data目录下所有文件。
看下datanode 的日志 ,一般在%hadoop_home%/logs/下,我们会发先我们的datanode的data目录为/tmp/hadoop-root/dfs/data,手动删除即可。
sbin/stop-yarn.sh
6. 看结果,方法和以前一样