Ubuntu 11.10 下使用hadoop-0.20.203.0

主要参考: http://hadoop.apache.org/docs/r0.20.0/quickstart.html

其中,JAVA_HOME设置的为/usr/lib/jvm/java-6-sun ,这个为本机java的路径,可以将java-6-openjdk改为这个,命令:update-java-alternatives -s java-6-sun

单台操作

这个模式是在一个java进程中运行hadoop,便于调试,具体操作为在根目录下:

$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-examples-0.20.203.0.jar grep input output 'dfs[a-z.]+'
$ cat output/*


bin/hadoop jar(使用hadoop运行jar包) hadoop-examples-0.20.203.0.jar(jar包的名字) grep (要使用的类,后边的是参数)input output 'dfs[a-z.]+',整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。
这里的grep是 A map/reduce program that counts the matches of a regex in the input.并不是我们通常使用的grep。

最后cat的结果为:1    dfsadmin

伪分布式操作

在单结点上模拟分布式操作,每一个hadoop daemon都于不同的Java进程。具体操作如下:

切换到hadoop用户(也可以使用root,但是后面要修改一下hadoop脚本,去掉-jvm选项)

设置免ssh登陆
$ ssh localhost

如果弹出了需要输入密码的提示,使用下面:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

我使用root用户运行了这个命令之后,再ssh localhost ,还是需要输入密码,但是登陆一次之后就可以免密钥登陆了。使用hadoop用户的话,配置好之后就直接可以免密钥登陆了。

配置相关文件:

conf/core-site.xml:

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>

 <!--  fs.default.name - 这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。-->

conf/hdfs-site.xml:

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

 <!-- dfs.replication -它决定着 系统里面的文件块的数据备份个数。对于一个实际的应用,它 应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失)-->

 <!--  dfs.data.dir - 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆盖。
dfs.name.dir - 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。-->


conf/mapred-site.xml:

 

<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
  </property>
</configuration>

 

<!-- mapred.job.tracker -JobTracker的主机(或者IP)和端口。-->

格式化分布式文件系统

$ bin/hadoop namenode -format

启动hadoop daemons

$ bin/start-all.sh

hadoop daemon的日志被写到${HADOOP_LOG_DIR}目录,这个目录默认是${HADOOP_HOME}/logs

可以输入jps看daemon是否启动起来,也可以通过web接口查看namenode和JobTracker

 

我报这个错误导致data node没有启动起来:

localhost: Unrecognized option: -jvm
localhost: Could not create the Java virtual machine.

解决办法:

1)修改hadoop启动脚本,

2)换成hadoop用户

详见hadoop Unrecognized option: -jvm


$ bin/hadoop fs -put conf input

上面的命令将本机上的conf目录拷贝到分布式文件系统的input目录

运行提供的例子:
$ bin/hadoop jar hadoop-examples-0.20.203.0.jar grep input output 'dfs[a-z.]+'

检查输出文件:
$ bin/hadoop fs -get output output
$ cat output/*

将分布式文件系统的output目录拷贝到当前的output目录

或者直接在分布式文件系统中查看:
$ bin/hadoop fs -cat output/*

最后关闭整个集群:
$ bin/stop-all.sh

PS: 进入hadoop目录,在bin/下面有很多启动脚本,可以根据自己的需要来启动。

* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop

* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护Namenode和Datanode

* stop-dfs.sh 停止DFS守护  

 

分部件的启动方式:

启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。

在分配的NameNode上,运行下面的命令启动HDFS:
$ bin/start-dfs.sh(单独启动HDFS集群)

bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。

在分配的JobTracker上,运行下面的命令启动Map/Reduce:
$bin/start-mapred.sh (单独启动Map/Reduce)

bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

 

bin/hadoop这个好像就是程序了,启动jobtracker的命令是:

$HADOOP_HOME/bin/hadoop --config $HADOOP_HOME/conf jobtracker

用这个启动,程序不会退出。

使用脚本启动jobtracker的命令是:

"$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start jobtracker

posted @ 2013-01-09 16:39  zaleilynn  阅读(270)  评论(0编辑  收藏  举报