开启hadoop之旅的大门--安装配置篇

Comments: No Comments
Published on: 2012 年 03 月 14 日

主要写了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是否安装成功。
source /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程序应该类似这样:

1
2
3
4
5
6
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这篇吧。

个人原创,转载请注明:三江小渡

我猜你可能也喜欢:

No Comments - Leave a comment

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


Welcome , today is 星期六, 2017 年 10 月 21 日