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也给配置好