by 三江小渡
主要写了JDK配置和hadoop的安装配置。windows下安装也类似,只是需要一个windows模拟linux环境的软件Cygwin。不过在windows下安装JDK很方便了,就不用参照linux安装JDK的步骤了。
Linux安装JDK步骤:
1. 先从网上下载jdk1.7或者1.6,去SUN的官方网站,尽量装1.6的版本。下载后安装:
给所有用户添加可执行的权限
#chmod +x jdk-1_5_0_02-linux-i586.rpm.bin
#./jdk-1_5_0_02-linux-i586.rpm.bin
一般这样就会安装好,会自动执行rpm安装,如果没有安装请自行rpm安装rpm后缀的jdk安装程序:
此时会生成文件jdk-1_5_0_02-linux-i586.rpm,同样给所有用户添加可执行的权限
#rpm -ivh jdk-1_5_0_02-linux-i586.rpm
出现安装协议等,按接受即可。
Linux安装JDK步骤2.设置环境变量。
#vim /etc/profile
在最后面加入
#set java environment
JAVA_HOME=/usr/java/jdk-1_5_0_02
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出。
Linux安装JDK步骤3.在终端使用echo命令检查环境变量设置情况和检查JDK是否安装成功。
sourece /etc/profile
#echo $JAVA_HOME
#echo $CLASSPATH
#echo $PATH
#java -version
如果看到JVM版本及相关信息,即安装成功!
然后就是安装hadoop了,先去官网下载个stable版本0.20.2,希望你下载这个hadoop-0.20.2.tar.gz。然后上传到你的服务器解压缩这个tar包:
#tar -zxvf hadoop-0.20.2.tar.gz
希望你这个包是安装在自己的当前用户目录,而且需要你当前用户不是root,否则会遇到不识别参数-jvm 或者heap溢出什么什么的各种问题,严格按步骤来做。
然后修改hadoop目录里conf目录下的hadoop-env.sh里:
# The java implementation to use. Required.
export JAVA_HOME=/usr/java/jdk1.6.0_31
这个路径根据实际情况自行修改。
然后你可以进行单机版的测试了,看看是否安装成功:
$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-*-examples.jar grep input output ‘dfs[a-z.]+’
$ cat output/*
注意这个执行目录默认的是hadoop的根目录,你会发现有hadoop-*-examples.jar这个一个文件的目录。没有错误提示就是安装成功了。
下边进行单机伪分布模式的安装:
需要你先测试#ssh localhost 是否需要密码,如果需要密码需要进行免密码的操作,因为每次输入密码会比较烦,尤其是将来布置集群的时候更烦。没有ssh,ubuntu系统就sudo apt-get install ssh 安装一下。
$ ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
然后再执行ssh localhost 看是否需要密码,不需要就是成功了。这个地方的localhost需要你的服务器配置有hosts文件,如果没有自行配置:vim /etc/hosts ,里边添加一句 127.0.0.1 localhost 即可。
有可能你需要重启ssh服务:service sshd restart,这个命令需要root权限,如果提示没有这个命令,需要你自行到/etc/rc.d/init.d 里边找到sshd ,然后执行 ./sshd restart 即可。如果你还是ssh链接需要密码,你需要查看ssh的配置/etc/ssh/sshd_config,将这两项设置如下:RSAAuthentication yes 和 PubkeyAuthentication yes,一般默认的就是yes,改好设置再次尝试。这里有一个前提,用ssh链接目标服务器的时候默认的用户名就是当前登录的用户名,所以这是hadoop搭建集群一直强调的需要所有机器的用户名一致。另外确保.ssh文件权限700,authorized_keys文件权限600。
然后配置hadoop/conf下的3个文件:
conf/core-site.xml:
<configuration> |
<property> |
<name>fs.default.name</name> |
<value>hdfs://localhost:9000</value> |
</property> |
</configuration> |
conf/hdfs-site.xml:
<configuration> |
<property> |
<name>dfs.replication</name> |
<value>1</value> |
</property> |
</configuration> |
conf/mapred-site.xml:
<configuration> |
<property> |
<name>mapred.job.tracker</name> |
<value>localhost:9001</value> |
</property> |
</configuration> |
在0.20.2之前的版本没有这三个文件,只有一个hadoop-site.xml文件。有些教程比较老,请注意一下。这里建议以上localhost全部填写成本机IP,方便以后真正hadoop集群搭建。
然后格式化一下hdfs:
$ bin/hadoop namenode -format
再配置一下/etc/profile文件,添加hadoop的环境变量:
#set hadoop environment
HADOOP_HOME=/usr/hadoop-0.20.2
PATH=$HADOOP_HOME/bin:$PATH
CLASSPATH=$CLASSPATH:$HADOOP_HOME:$HADOOP_HOME/lib
export HADOOP_HOME PATH CLASSPATH
同样我们需要source /etc/profile 一下。
再然后就能启动守护进程了:
$ bin/start-all.sh
输入命令看所有守护进程是否启动成功:
# jps
30660 SecondaryNameNode
31402 Jps
30554 DataNode
30842 TaskTracker
30733 JobTracker
这样的结果就成了。可以执行一些样例命令了:
$ hadoop jar hadoop-*-examples.jar grep input output ‘dfs[a-z.]+’
你也可以看看 hadoop-*-examples.jar 里边的其他命令,查看方法直接hadoop jar hadoop-*-examples.jar 就行了。
最后检查输出文件:
Copy the output files from the distributed filesystem to the local filesytem and examine them:
$ bin/hadoop fs -get output output
$ cat output/*
or View the output files on the distributed filesystem:
$ bin/hadoop fs -cat output/*
停止所有守护进程:
$ stop-all.sh
这是伪分布的配置,已经适合学习、开发和调试程序了。还有真正的分布式架构,需要另外配置几个文件。这里先大致介绍一下三种模式的配置对比:
组件名称 | 属性名称 | 独立模式 | 伪分布模式 | 全分布模式 |
Common | fs.default.name | file:///(默认) | hdfs://localhost | hdfs://namenode |
HDFS | dfs.replication | N/A | 1 | 3 |
MepReduce | mapred.job.tracket | local(默认) | localhost:9000 | jobtracker:9000 |
全分布式集群构建在另外一篇读书笔记第九章在进行详细介绍。
下边进行hadoop下执行一个java程序的例子(类似hello world的样例程序):
(1)先在本地磁盘建立两个输入文件file01 和file02:
$ echo “Hello World Bye World” > file01
$ echo “Hello Hadoop Goodbye Hadoop” > file02
(2)在hdfs 中建立一个input 目录:$ hadoop fs –mkdir input
(3)将file01 和file02 拷贝到hdfs 中:
$ hadoop fs –copyFromLocal ~/file0* input
(4)执行wordcount:(这里注意 hadoop-0.20.1-examples.jar的路径正确,这个文件在hadoop根目录里)
$ hadoop jar hadoop-0.20.1-examples.jar wordcount input output
(5)完成之后,查看结果:
$ hadoop fs -cat output/part-r-00000
结果为:
Bye 1
Goodbye 1
Hadoop 2
Hello 2
World 2
你可以输入hadoop fs 查看 fs下的所有命令,方便使用期间可以用alias起别名,具体见另外一篇的中间部分。至此hadoop的hello world完成,开始hadoop之旅吧。建议从《hadoop权威指南》这本书开始。
你也可以编写自己的hello,world! 你可能会用到这个classpath路径,只是可能用到,如果编译的时候提示你class找不到的时候:
$ javac -classpath /usr/hadoop-0.20.2/hadoop-0.20.2-core.jar:/usr/hadoop-0.20.2/lib/commons-cli-1.2.jar -d *outputpath* *javapath*
$ jar -cvf *output.jar* *target.class*
第一个命令-classpath参数指定了加载的包的路径。第二个命令用来打包成jar包。然后就可以像执行样例jar包那样在hadoop框架下执行自己的程序了。这里边对不熟java的童鞋给点说明:
你的helloworld程序应该类似这样:
import org.apache.hadoop.io.*; public class helloworld{ public static void main(String[] args){ System.out.println("hello world!"); } }
你执行hadoop jar ***.jar 可能需要你指出入口的类,你填写你main函数所在的类名即可。另外注意这个类前边必须加public关键字,不然会提示你入口不合法什么的之类的提示。最后你需要注意的是这个公共类的名字必须给你的**.java文件名字相同,这样才能执行javac命令进行编译。
搭建好自己的hadoop,如果你还不知道如何开始,建议先去学习一下streaming这篇吧。