Hadoop 单节点的部署(来自翻译官方文档和自我实践)

英文参考文档链接如下:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

这篇文章描述了单节点的伪分布式hadoop部署。下面是我根据官方文档进行自我部署测试 。

一、写在前面的话

       hadoop包括的东西很多,而且文档上的东西也不一定全都正确 ,再加上运行环境的多样化,学习中途出现各种问题是很常见的,遇到问题的时候,先自己花点时间想想能不能自己解决,如果不能再上网找方法,既然都准备要学习它了,就要有自信,hadoop在牛逼也是一种技术,是技术就没有学不会的。

       还有我的个人建议是不要一上来就开始跑hadoop这种hello级别的例子,先自己了解下hadoop是什么,主要包括哪些方面,这些东西又是干什么的。这时候我们不知道具体操作,但是心里有点概念会让自己对后面学习过程中的一些步骤多些理解。

二、说说环境

       操作系统:看官网推荐的是ubuntu系统,所以我用的是64bit 的ubuntu12.10这个版本

       必要软件:ssh 用 apt-get install ssh

                        rsync 用 apt-get install rsync

                        java 用 orache 的 64bit 7u55版本,安装方法见链接

                        hadoop 上官网下2.6.0的stable版本

三、准备工作

    将下载的hadoop 解压到/usr/local/下

cp hadoop-2.6.0.tar /usr/local
cd /usr/local
tar xf hadoop-2.6.0.tar
    修改配置文件,我用的是vim,也可以用其他的工具,安装的话也是apt-get install vim
vim /usr/local/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
    在26行,修改java home的路径 
export JAVA_HOME="/usr/local/java/jdk1.7.0_55"
    我没有找到 HADOOP_PREFIX的内容所有 没有加下面的内容
export HADOOP_PREFIX=/usr/local/hadoop
    运行hadoop应该会有下面的一些命令提示
root@mtang-VirtualBox:/usr/local/hadoop-2.6.0/bin# ./hadoop
Usage: hadoop [--config confdir] COMMAND
       where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings
 or
  CLASSNAME            run the class named CLASSNAME
 

四、独立的hadoop

独立的就是没有配置任何分布式特性的,默认的就是这样,这比较方便调试,下面的命令可以让给你看到点输出信息。

$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
$ cat output/*
 

五、伪分布式hadoop

5.1 修改配置文件

将下面的内容拷贝到你的配置文件/usr/local/hadoop-2.6.0/etc/hadoop/core-site.xml ,刚打开的时候应该是自由<configuration>,中间是空的。

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
 如上,拷贝下面内容到配置文件/usr/local/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
 

5.2 设置免密码的ssh

       首先试下下面的命令ssh localhost看是否需要密码,如果要那么执行下面的命令,$表示一行的开头,不要拷贝进去了。

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
       上面的命令是生成一个证书,然后通过这个证书完成免密码ssh连接

5.3 开始执行吧

      1. 格式化文件系统,这次我们用到了HDFS了,HDFS是一种分布文件系统,对分布式文件系统不了解的就先把它当作本地的文件系统,FAT32,NTFS之类的,再简单点说就是你的硬盘,这次的任务是格式化你的"硬盘“

/usr/local/hadoop-2.6.0/bin/hdfs namenode -format
   

   2.接下来我们启动我们的namenode,namenode是hdfs的内容

/usr/local/hadoop-2.6.0/sbin/start-dfs.sh
   

   3. 这时候我们可以通过浏览器查看namenode的界面,在浏览器输入下面内容,当然如果不是本机localhost换成机器IP吧。

http://localhost:50070/
   

   4. 在dfs上创建目录吧,用来存放待处理的文件的

/usr/local/hadoop-2.6.0/bin/hdfs dfs -mkdir -p /user/root/input

    5. 把本地待处理的文件拷贝到dfs上的

/usr/local/hadoop-2.6.0/bin/hdfs dfs -put /usr/local/hadoop-2.6.0/etc/hadoop/* /user/root/input
 

    6. 接下来我们就可以运行期待的已久的hadoop分析任务了,注意是一行

/usr/local/hadoop-2.6.0/bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
    如果你多次运行上面的命令碰巧出现下面的错误的话
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/root/output already exists
    你需要先删除这个文件夹
/usr/local/hadoop-2.6.0/bin/hdfs dfs -rm -r /user/root/output
 

    7. 好了,运行完了,把结果拷贝到本地磁盘看看

/usr/local/hadoop-2.6.0/bin/hdfs dfs -get /user/root/output /root/output

    看看结果

cat /root/output/*
   其实也可以不用拷贝,直接在hfs上看的
/usr/local/hadoop-2.6.0/bin/hdfs dfs -cat /user/root/output/*
    我的结果是这样的
6	dfs.audit.logger
4	dfs.class
3	dfs.server.namenode.
2	dfs.period
2	dfs.audit.log.maxfilesize
2	dfs.audit.log.maxbackupindex
1	dfsmetrics.log
1	dfsadmin
1	dfs.servers
1	dfs.replication
1	dfs.file
        8. 别忘了擦屁股,dfs关了
/usr/local/hadoop-2.6.0/sbin/stop-dfs.sh
     六、YARN的伪分布式hadoop     YARN 作为第二代map/reduce框架,是必然要替代第一代的,这里我们不管,既然是map/reduce的替代,现在我们运行应该就是替换map/reduce相关的内容,其他的不用动吧。 注:下面的路径我不写全了,假设已经cd到/usr/local/hadoop-*下了     1. 我们修改配置文件,etc/hadoop/mapred-site.xml,我们可能找不到这个文件,但是我们有mapred-site.xml.template,先拷贝一份出来吧
cp mapred-site.xml.template mapred-site.xml
   然后加入下面内容
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
 然后继续修改 etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
   2. 然后启动
sbin/start-yarn.sh
    3. 打开网页可以查看ResourceManager 的页面
http://localhost:8088/
    4. 运行mapreduce的任务
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
    当你运行的时候可能会遇到Connect refused 的错误,提示服务器9000拒绝,然后我们回到前面看看哪里用了9000端口会发现DFS用了,所以继续定位重新启动dfs ,etc/hadoop/start-dfs.sh的日志会发现datanode没有启动,而且会有java.io.IOException: Incompatible clusterIDs的错误,上网查了下是因为做format 的时候没有清空dataNode下的data目录引起的,一个可行的解决方法是手动删除data目录下所有文件。
看下datanode 的日志 ,一般在%hadoop_home%/logs/下,我们会发先我们的datanode的data目录为/tmp/hadoop-root/dfs/data,手动删除即可。 P.S 如果不想这么麻烦就把tmp下的全删除吧,反正我的只有hadoop 相关的内容,当然这个路径是可以设置的,然后从hdfs format开始,again。(亲测可用,来来回回好多遍命令基本都记住了,format namenode ,启动hdfs,创建目录拷贝文件,启动yarn,运行map/reduce任务,查看结果,关闭hdfs和yarn服务,so easy).     5. 停止
sbin/stop-yarn.sh
    6. 看结果,方法和以前一样

猜你喜欢

转载自tangmingjie2009.iteye.com/blog/2195748
今日推荐