记一次hadoop部署之旅

PS:首先本文某些步骤非详细说明,得读者们有一定的对hadoop的了解。另外继承前文《编译安装之旅》,可以优先阅读下。


一、环境说明

ubuntu14.04LTS  64位

hadoop2.6.0

protocbuf2.5.0


二、环境变量配置

2.1修改profile文件

sudo vi /etc/profile

添加如下内容

#HADOOP VARIABLES START
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
#这行需要注意,在笔者最开始这样配置的时候报过错,最后部分需要改为$HADOOP_INSTALL/lib/native,但后来测试的时候又不需要了。所以如果读者本遇到类似缺库的问题,可以尝试修改这个地方。
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_INSTALL/lib/native
#HADOOP VARIABLES END

2.2修改hadoop-evn.sh

hadoop安装目录下的这个文件,请各读者根据自己实际情况找到修改

sudo vi $HADOOP_HOME/etc/hadoop/hadoop-evn.sh

修改内容如下:

export JAVA_HOME=/opt/jdk1.7.0_45  #这里改为各自的具体JDK安装路径

2.3配置SSH免密码登录

其实就是生成公钥私钥,然后把公钥内容添加到authorized_keys文件中。

在集群中到底要怎么个添加法,后续的本文的为分布式和真正的分布式集群会详述解释。


三、单机部署测试

当以上步骤都做完后,其实单机部署基本完成大半。

单机部署不需要配置4个site文件(core-site, mapred-site, hdfs-site, yarn-site)都可以运行wordcount例子程序。

但要注意先在hadoop的安装目录下添加文件夹input,把要计算单词数量的文件放里面去即可。(默认会读取hadoop安装目录)

可以使用命令:

单机模式安装完成,下面通过执行hadoop自带实例WordCount验证是否安装成功

    /usr/local/hadoop路径下创建input文件夹    

   mkdir input

    拷贝README.txt到input    

cp README.txt input

    执行WordCount

    在这里各位读者要根据自己的hadoop版本调整jar名称。

./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.0-sources.jar org.apache.hadoop.examples.WordCount input output
最后通过以下命令查看结果:

执行 cat output/*,查看字符统计结果


四、伪分布式部署

注意:在部署前说下,一下配置中多次会看到/hadoop/xxxxx,这里的路径是相对路径,是相对于hadoop安装目录的相对路径,而非在根目录下的。

对于此,其实是可以修改的。后续补上。

4.0建立需要用到的文件夹

注意:这里建立的文件夹需要注意ownner和权限,最好是属于hadoop的运行着,并且权限设置为755,不然启动namenode或者datanode的时候会报错

mkdir /usr/local/hadoop/tmp

mkdir /usr/local/hadoop/dfs/name

mkdir /usr/local/hadoop/dfs/data

注意:其中/usr/local/hadoop是笔者的hadoop安装路径。如果根据本篇文章中的配置hadoop环境变量的话,默认的tmp, dfs等目录会读取$HADOOP_INSTALL中的相对路径。因此各位读者要留意。

4.1修改core-site.xml


    
        hadoop.tmp.dir
        /usr/local/hadoop/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://localhost:9000
    

4.2修改mapred-site.xml


    
      mapred.job.tracker
      localhost:9001
    

4.3修改yarn-site.xml


    
        mapreduce.framework.name
        yarn
    

    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

4.4修改hdfs-site.xml


    
        dfs.replication
        1
    
    
        dfs.namenode.name.dir
        /usr/local/hadoop/dfs/name
    
    
        dfs.datanode.data.dir
        /usr/local/hadoop/dfs/data
    
    
            dfs.permissions
            false
    

4.5启动伪分布式hadoop

PS:所谓的伪分布式,其实就是“单机分布式”。即hadoop的所有节点都运行在同一个单机上。模拟全功能。

通过以上的所有配置后(修改比较多,请各位读者细心检查),就可以启动hadoop了。

启动方法很多,这里只讲2个。

启动前,必须格式化hdfs命令如下:

./bin/hdfs namenode -format 

然后就可以启动了:

第一种方法:

  1. sbin/start-dfs.sh  
  2. sbin/start-yarn.sh
分两步启动,先启动HDFS,然后启动YARN


第二种方法:

./sbin/start-all.sh

这种方法就是一次性全部驱动.其实还是一层层的调用更下层的脚本来启动的.

启动之后,可以留意最后的部分,可能是倒数第三行左右.

如果成功则显示  Exitting with status 0

否则                        Exitting with status 1: 则是出错


4.6查看启动结果

4.6.1执行命令jps,执行后一般可以看到你刚启动的节点名称(namenode, sercondrynamenode, resourcemanager, nodemanager),很奇怪的笔者虽然都启动成功,但就是不现实datanode。


4.6.2查看web

查看hadoo提供的web可以输入以下几个地址,但笔者还未弄明白端口是早就设定还是可更改的。

Namenode information:http://localhost:50070来查看Hadoop的信息,这里可以查看到利用hdfs建立的文件夹,后续介绍。

All Applications http://IP:8088


五、启动伪分布式的hadoop可能遇到的问题

5.1datanode启动不了

首先查看logs里面关于datanode的log。此时如果发现有关权限问题的话。

那就得依照4.0中的方法进行设置。


5.2还是datanode启动不了

查看datanode的日志,发现是关于clusterID的问题。这是由于,启动hadoop后format 了namenode,之后关闭hadoop后有format了namenode一次,导致namenode和datanode的clusterID不一致所造成的。

解决方法是查看

找到hdfs-site.xml中namenode和datanode对应的目录。再分别打开current文件夹里的VERSION,复制namenode的clusterid到datanode的VERSION中,使他们一致,重启即可。


5.3namenode无法启动

当大家无论使用start-dfs.sh还是start-all.sh,启动完后会发现namenode怎么都启动不了。但datanode、seconderynamenode都已经启动了。其中一个原因可以通过以下链接获取原因:http://blog.csdn.net/bychjzh/article/details/7830508

简单点说就是可能因为tmp目录下的文件、或者由于没有format namenode导致的namenode启动失败。最好做法删除tmp中文件,并重新format namenode。

最好查询log找到具体的异常。



六、运行伪分布式的wordcount例子

经过以上步骤后,现在hadoop是算启动成功了。并且环境无障碍了。


6.1在hdfs上建立文件夹

还记得我们在单机模式中,是分别在各自$HADOOP_INSTALL里建立的文件夹:input。现在我们需要在hdfs中建立,使用命令

./bin/hdfs dfs -mkdir -p /input

各位可能会奇怪这个文件夹会建立在哪里,这个笔者暂时还未弄清楚其具体位置。但可通过 http://hadoop的ip地址:50070,可以查看到你建立了一个input文件夹。

然后通过命令copy文件到上面,作为wordcount程序的输入资料。

./bin/hdfs dfs -put /usr/local/hadoop/input/* /input

这样就会把单机模式中的input内容放到了伪分布式的hdfs的Input文件夹中,同样可通过web查看。

笔者发现每个文件的blocksize都是128M,觉得很奇怪,因为hadoop的blocksize都是64M的,心在是2倍,容后研究。还有比较心惊的是,笔者上传的文件最大就几百K,现在却每个暂用128M,幸好笔者预留的硬盘还是充足的。由此可以看出以后的大数据开发,对于小文件确实意义不大并且浪费,得不偿失。


6.2运行伪分布式下的wordcount

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input /output
如果没有出错,则会想单机模式下一样,程序会在hdfs中建立output作为输出目录。

我们再通过命令:

./bin/hdfs dfs -cat /output/*

即可查看运算结果了。在程序运行期间,会不断的反馈map和reduce的进度,笔者感觉,很慢。可能配置或者其他问题。毕竟20多个128M的文件。


你可能感兴趣的:(大数据)