1、本文是搭建一个单节点以及伪分布式的运行案例
2、运行环境需要jdk1.6以上,并且必须确保已经安装ssh(建议openssh)以及sshd服务已经开启,最好在linux环境下
3、下载hadoop的相关包 路径为http://apache.etoak.com//hadoop/core/,下载包为tar.gz格式,通过tar -xzvf命令解压缩
4、编辑conf/hadoop-env.sh,设置好JAVA_HOME,然后切换到根目录,运行bin/hadoop看看是否执行成功,如果成功,会显示这个命令的帮助信息
5、先跑一个单节点模式,即只是在一个JAVA进程中运行,用于调试
接下来这个例子是把conf目录下的文件先拷贝到input文件夹中,然后再通过调用程序,查找input目录下符合匹配规则的文件,并写到output目录下
$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-mapred-examples-0.21.0.jar grep input output 'dfs[a-z.]+'
$ cat output/*
6、伪分布式模式,即在一台机上虚拟两个节点,分别处于不同的JVM下,一个作为namenode,一个作为datanode
7、先修改配置
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>
8、执行下面两句,生成公私密匙,并将公匙分发本地,使得SSH登录本机不再需要录入密码
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
9、重新格式化分布式文件系统。(分布式文件系统,可以暂时理解为所有节点共享的一个文件空间)
$ bin/hadoop namenode -format
10、启动hadoop虚拟机
$ bin/start-all.sh
这时可以在以下路径,看到hadoop环境的相关运行时信息
NameNode - http://localhost:50070/(含义……暂未理解)
JobTracker - http://localhost:50030/(含义……暂未理解)
11、以下命令是拷贝conf文件夹
$ bin/hadoop fs -put conf input
(跟代码,可以看到,-put参数是意味着将本地文件拷贝到分布式文件系统中,即conf文件夹下,放到名为input的分布式文件系统中)
12、执行下句
bin/hadoop jar hadoop-mapred-examples-0.21.0.jar grep input output 'dfs[a-z.]+'
是把input文件系统里面的文件做正则匹配,然后把结果输出到output文件系统中
13、执行下句,从名为output分布式文件系统中获取文件,并存放到output的本地目录下
$ bin/hadoop fs -get output output
$ cat output/*
或者执行
$ bin/hadoop fs -cat output/* 可以直接查看名为output分布式文件系统下面所有文件
14、执行以下命令,关闭hadoop虚拟机
$ bin/stop-all.sh
运行时遇到如下问题:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/server/namenode/NameNode
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hdfs.server.namenode.NameNode
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.apache.hadoop.hdfs.server.namenode.NameNode. Program will exit.
可修改 conf/hadoop-env.sh,增加
export HADOOP_COMMON_HOME=/usr/hadoop/ (hadoop的安装目录)
并且把JAVA_HOME也给配置好