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
mapreduce.framework.name
yarn
yarn.nodemanager.aux-services
mapreduce_shuffle
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
第一种方法:
第二种方法:
./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的文件。