`

Hadoop安装部署

 
阅读更多

1.说明
共有两台机器(一台式一笔记本),主机名为gislq-1,gislq-2
IP地址:192.9.116.20,192.9.116.67
操作系统:均为Ubuntu 10.10
hadoop:hadoop-0.16.3.tar.gz[1]
gislq-1作为namenode(master),gislq-2作为datanode(slave)
【1】遇到问题 我最初下载的是最新的hadoop版本0.21.0,但是到最后所有配置完成后,输入命令$ start-all.sh 提示DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it。但是当我使用hdfs命令时又出现Hadoop common not found。后来发现好象是新版本里的一个bug(或者是新版本还需要新的设置),安装0.16.3版问题消失

2.ping机器
网上说一个很简单的测试办法就是ping一下主机名,比如在gislq-1上ping gislq-2,如果能ping通就OK!我不知道什么叫能ping通。。。同事说只要在终端输入ping gislq-2命令,如果能能传输数据包即可。我照做,用这个命令可以ping通,但是到了后面使用scp命令复制文件时【2】,如果目标地址使用主机名表示,则不能复制,过很长时间后提示:
ssh: connect to host gislq-2 port 22: Connection timed out
lost connection
如果目标地址使用IP地址表示,则没有问题。同样ssh也不能用主机名连接
解决办法就是修改/etc/hosts文件,如果该台机器作Namenode用,则需要在hosts文件中加上集群中所有机器的IP地址及其对应的主机名;如果该台机器作Datanode用,则只需要在hosts文件中加上本机IP地址和Namenode机器的IP地址。
以本机为例,gislq-1中的/etc/hosts文件看起来是这样的
127.0.0.0 localhost localhost
192.9.116.20 gislq-1 gislq-1
192.9.116.20 gislq-2 gislq-2
gislq-2中的/etc/hosts文件看起来是这样的
127.0.0.0 localhost localhost
192.9.116.20 gislq-1 gislq-1
192.9.116.20 gislq-2 gislq-2
【2】使用scp命令时,会询问目标机器的root管理员的密码,普通用户(就是不管是安装时自己设的用户,还是后来添加的管理员用户)的密码无效。ubuntu默认root用户密码为空 输入命令passwd root就可以更改密码了

3.新建系统hadoop用户
Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以需要每台机器建一个同名的用户。
在这4台机器上建hadoop用户,密码:hadoop(用户名和密码可自己指定),我建的是管理员账户

4.安装并开启SSH服务
在SSH设置之前先要安装ssh服务,并开启。Ubuntu缺省安装了openssh-client,所以在这里就不安装了,如果你的系统没有安装的话,再用apt-get安装上即可。
网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务。最终成功的方法如下:
$ sudo apt-get install openssh-server
然后确认sshserver是否启动了:
$ ps -e |grep ssh
如果只有ssh-agent那ssh-server还没有启动,需要执行命令$ /etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。

5.配置SSH
Hadoop需要namenode到datanode的无密码SSH,所以需要设置namenode到其他3台datanode的无密码公钥认证方式的SSH。简单的说,在gislq-1上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到gislq-2上,这样,比如当gislq-1向 gislq-2发起ssh连接的时候,gislq-2上就会生成一个随机数并用gislq-1的公钥对这个随机数进行加密,并发送给gislq-1;gislq-1 收到这个加密的数以后用私钥进行解密,并将解密后的数发送回gislq-2,gislq-2确认解密的数无误后就允许gislq-1进行连接了。这就完成了一次公钥认证过程。
首先用hadoop用户登录每台机器(包括namenode),在/home/hadoop/目录下建立.ssh目录,并将目录权限设为:drwxr-xr-x,设置命令: chmod 755 .ssh
在namenode(gislq-1)上执行命令:$ ssh-keygen -t rsa (这个命令将为namenode生成一个密钥对)
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
这三个项目直接回车即可(第一个回车表示将密钥对默认存储在/home/hadoop/.ssh目录下,第二三个回车表示设置空密码)。
这个命令将在/home/hadoop/.ssh目录下生成一对密钥id_rsa,id_rsa.pub。然后将id_rsa的内容复制到每个机器(包括本机)的home/hadoop/.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上 id_rsa.pub中的内容,如果没authorized_keys这个文件,直接cp或者scp就好了,下面的操作假设各个机器上都没有 authorized_keys文件。
具体命令:
在namenode执行(用新建的hadoop用户登录):
$ cp /home/hadoop/.ssh/id_rsa.pub /home/hadoop/.ssh/authorized_keys 
$ scp /home/hadoop/.ssh/authorized_keys gislq-2:/home/hadoop/.ssh/
此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,按照提示输入即可
当然,也可以用其他方法将authorized_keys文件拷贝到其他机器上,比方说用U盘(不过还是建议用scp命令,因为可以检查以下ssh服务是否已经开启)。
用hadoop用户登录每台机器,修改/home/hadoop/.ssh/authorized_keys文件的权限为:-rw-r–r–,设置命令:
$ cd /home/hadoop/.ssh
$ chmod 644 authorized_keys
设置完成后,测试一下namenode到各个datanode节点的ssh链接,包括到本机,如果不需要输入密码就可以ssh登录,说明设置成功了。
测试方法:
比如gislq-1向gislq-2发起ssh连接
[hadoop@gislq-1:~]$ssh gislq-2
如果ssh配置好了,就会出现以下提示信息
The authenticity of host [gislq-2] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。
然后你会发现不需要输入密码就可以建立ssh连接了,恭喜你,配置成功了!

6.安装JDK
到sun网站下载JDK安装包jdk-6u11-linux-i586.bin,copy到机器的usr目录中,并在每台机器的root用户下面安装.
在root用户下:
$ cd /usr
$ chmod +x jdk-6u11-linux-i586.bin 给安装文件增加执行权限.
$ ./jdk-6u11-linux-i586.bin,按提示按几个空格健后,输入yes后开始安装jdk6.
安装好后,将目录名修改为jdk6.
设置JDK的环境变量,考虑到JDK可能会有其他系统用户也会用到,建议将环境变量直接设置在/etc/profile中具体内容(如果没有则直接在profile文件中添加):
export JAVA_HOME=/usr/jdk6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
用$ source /etc/profile使用java环境生效.

7.设置目录并安装Hadoop
用hadoop用户登录namenode,并新建一个目录,用于存放所有hadoop相关内容。
本例中在/home/hadoop目录下新建HadoopInstall
下载hadoop安装包并copy至namenode的hadoop用户的/home/hadoop/HadoopInstall并解压缩:
tar zxvf hadoop-0.16.3.tar.gz
考虑到今后升级以及其他操作的方便性,建议建一个名称为hadoop的链接,指向hadoop-0.16.3目录:
ln -s hadoop-0.16.3 hadoop
新建目录:/home/hadoop/HadoopInstall/hadoop-conf
将/home/hadoop/HadoopInstall/hadoop/conf目录下的hadoop_site.xml,slaves,hadoop_env.sh,masters文件拷贝到/home/hadoop/HadoopInstall/hadoop-conf目录
在/home/hadoop/.bashrc文件中设置环境变量 $HADOOP_CONF_DIR:
export HADOOP_CONF_DIR=$HOME/HadoopInstall/hadoop-conf/

8.Hadoop环境变量设置和配置文件修改
在/home/hadoop/HadoopInstall/hadoop-conf/hadoop_env.sh文件中设置环境变量:
export JAVA_HOME=/usr/jdk6
export HADOOP_HOME=/home/hadoop/HadoopInstall/hadoop
在/home/hadoop/HadoopInstall/hadoop-conf/masters文件中设置namenode:
文件内容:
gislq-1
在/home/hadoop/HadoopInstall/hadoop-conf/slaves文件中设置datanode:
文件内容:
gislq-2
在conf/目录中的hadoop-default.xml中包含了Hadoop的所有配置项,但是不允许直接修改!可以在hadoop-conf/目录下的hadoop-site.xml里面定义我们需要的项,其值会覆盖hadoop-default.xml中的默认值。可以根据自己的实际需要来进行定制。
在/home/hadoop/HadoopInstall/hadoop-conf/hadoop-site.xml文件中设置hadoop配置:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>gislq-1:9000</value>
<description>The name of the default file system. Either the literal string "local" or a host:port for DFS.</description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>gislq-1:9001</value>
<description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/HadoopInstall/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/HadoopInstall/filesystem/name</value>
<description>Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/HadoopInstall/filesystem/data</value>
<description>Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description>
</property>
</configuration>

9.部署datanode节点
将namenode上安装配置完成的hadoop文件拷贝到所有datanode:
$ scp -r /home/hadoop/HadoopInstall gislq-2:/home/hadoop/scp -r /home/hadoop/HadoopInstall

10.启动Hadoop
启动之前,我们先要格式化namenode,先进入~/HadoopInstall/hadoop目录,执行下面的命令
[hadoop@gislq-1:hadoop]$bin/hadoop namenode -format
不出意外,应该会提示格式化成功。如果不成功,就去hadoop/logs/目录下去查看日志文件
下面就该正式启动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@gislq-1:hadoop]$bin/start-all.sh【3】
同样,如果要停止hadoop,则
[hadoop@gislq-1:hadoop]$bin/stop-all.sh
【3】我按上述方法部署的hadoop,启动时会抛错localhost: Exception in thread "main" java.lang.IllegalArgumentException: port out of range:-1
localhost: at java.net.InetSocketAddress.<init>(InetSocketAddress.java:118)
localhost: at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:125)
localhost: at org.apache.hadoop.dfs.SecondaryNameNode.<init>(SecondaryNameNode.java:117)
localhost: at org.apache.hadoop.dfs.SecondaryNameNode.main(SecondaryNameNode.java:494)
但是却不影响hadoop守护的启动,也不影响后面的HDFS测试,因为刚刚接触hadoop和JAVA,所以不知道为什么,如果哪位高人知道,还望能不吝赐教

11.HDFS测试
运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。
在HDFS建立目录(在HDFS中建立一个名为testdir的目录):
$ bin/hadoop dfs -mkdir testdir
复制文件到HDFS(把本地文件large.zip拷贝到HDFS的根目录/user/hadoop/下,文件名为testfile.zip):
$ bin/hadoop dfs -put /home/hadoop/large.zip testfile.zip
查看HDFS的现有文件
$ bin/hadoop dfs -ls

12.C++测试(网上大牛写的,我暂时还未测试)
分别用c++编写mapper和reducer程序,完成对文件中的单词数量的统计:

mapper.cpp:
// c++ map reduce Mapper
// word count example
// 2008.4.18
// by iveney
#include 
#include 
using namespace std;

int main()
{
string buf;
while( cin>>buf )
cout< return 0;
}

reducer.cpp:
#include 
#include 
#include
using namespace std; int main()
{
map dict;
map::iterator iter;
string word;
int count;
while( cin>>word>>count )
dict[word]+=count;
iter = dict.begin();
while( iter != dict.end() )
{
cout<first<<”\t”<second< iter++;
}
return 0;
}

编译两个源文件:
g++ mapper.cpp -o mapperg++ reducer.cpp -o reducer
简单测试一下这两个程序:echo "ge abc ab df " | ./mapper | ./reducer
输出:ab 1abc 1df 1hadoop
运行测试bin/hadoop dfs -mkdir inputbin/hadoop dfs -put /home/hadoop/ap_base_session_fatmt0.txt
inputbin/hadoop jar contrib/streaming/hadoop-0.16.3-streaming.jar -mapper
/home/hadoop/hdfile/mapper -reducer /home/hadoop/hdfile/reducer -input input/ap_base_session_fatmt0.txt -output output
注意:
1、 用streaming方式运行测试程序,执行的是本地文件,所以要讲mapper和reducer
两个程序拷贝到namenode和每个datanode的相同目录下。本例是将mapper和reducer拷贝到每台机器的
/home/hadoop/hdfile目录下。
2、 处理的文本文件要先传到HDFS中,本例是将ap_base_session_fatmt0.txt传到HDFS的input目录下。
3、 如果要重新运行测试,需要将HDFS上的output目录删除,否则会报output目录已经存在的错误。
删除命令:bin/hadoop dfs -rmr output

分享到:
评论

相关推荐

    HADOOP安装部署文档

    《Hadoop安装部署详解》 Hadoop,作为Google文件系统(GFS)的开源实现,是分布式计算领域的重要工具,其强大的数据处理能力和高容错性吸引了众多开发者和企业的关注。本文将详细介绍如何在Linux环境下安装和部署...

    hadoop 安装部署手册

    Hadoop安装部署手册是针对初学者的全面指南,旨在帮助用户了解和实践Hadoop的安装与运行。Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储大规模数据集。以下是详细的步骤和关键知识点:...

    Hadoop安装部署及教学

    本教程涵盖了Hadoop的安装部署及教学,旨在帮助初学者和进阶者全面理解并掌握这一分布式计算框架。以下将详细阐述Hadoop的相关知识点,包括其概念、架构、安装步骤、配置优化以及实际应用。 一、Hadoop概述 Hadoop...

    hadoop安装部署说明文档

    《Hadoop安装部署详解》 Hadoop是一款开源的分布式计算框架,由Apache基金会开发,用于处理和存储海量数据。本文将详细介绍如何在Linux集群和Windows环境下进行Hadoop的安装与配置,以及对Hadoop核心配置文件的属性...

    hadoop安装部署 完全分布式

    【Hadoop 安装部署完全分布式】 在搭建Hadoop完全分布式集群时,我们需要遵循一系列步骤,确保所有组件正确配置并协同工作。以下是基于三台机器的集群安装部署过程的详细说明: 1. **所需软件及版本** - Hadoop: ...

    hadoop安装部署手册

    《Hadoop安装部署手册》是指导用户在Linux环境中配置和管理Hadoop分布式文件系统的详尽指南。Hadoop作为开源的大数据处理框架,以其高容错性、可扩展性和高效的并行处理能力,广泛应用于大数据处理领域。本手册将...

    Hadoop安装部署.pptx

    【Hadoop安装部署】是大数据应用基础的重要环节。Hadoop是一个基于Java的开源框架,用于在大规模计算机集群中处理海量数据的分布式计算。它能够支持上千个节点和PB级别的数据存储与处理,使得处理大数据变得更加高效...

    Hadoop安装部署实验材料

    【Hadoop 安装部署详解】 Hadoop 是一个开源的分布式计算框架,广泛应用于大数据处理。本实验将指导你如何在Linux环境下安装部署Hadoop,包括单机模式、伪分布式模式和分布式模式的概述,以及如何使用Vim编辑器、...

    07-Hadoop安装部署.pdf

    在Hadoop安装部署的过程中,涉及到很多关键的步骤和技术点。Hadoop是一种开源的框架,它允许使用简单的编程模型在集群上分布式存储和处理大量数据。Hadoop安装和部署是大数据处理的第一步,下面将详细解释标题和描述...

    Hadoop安装部署问题文档.rar

    建议仔细阅读这份文档,结合Ambari的使用,能够更好地理解和应对Hadoop部署过程中的挑战。 总的来说,Hadoop的安装部署虽然复杂,但借助Ambari这样的管理工具,可以显著降低难度。在实践中不断学习和积累经验,是...

    支持自动化Hadoop安装部署的研究.pdf

    参考文献中提到了其他与Hadoop相关的研究,如基于Hadoop架构的分布式计算和存储技术及其应用,基于HDFS的云数据备份系统,Hadoop框架的扩展和性能调优,以及数据中心Hadoop部署与追踪系统的研究。这些研究都为Hadoop...

    实验1:Hadoop安装部署

    Hadoop 安装部署实验 Hadoop 是一个大数据处理的开源框架,它是基于 Java 语言开发的,因此需要安装 Java 环境。在这个实验中,我们将安装和配置 Hadoop 环境,并学习基本的 Hadoop 操作。 一、实验准备 在开始...

    Hadoop安装部署手册范本.doc

    Hadoop安装部署手册范本.doc

    Hadoop安装部署简明步骤详解

    Hadoop安装部署简明步骤详解,详细说明如何安装、编译Hadoop,实现云计算环境

    hadoop安装部署

    大数据hadoop安装部署,主要是介绍hadoop的部署及应用

    支持自动化Hadoop安装部署的研究.rar

    支持自动化Hadoop安装部署的研究.rar

    hadoop安装部署最新版

    在本文中,我们将深入探讨如何安装和部署Hadoop的最新版本,主要依据"自己操作实践,归纳总结出来的hadoop按照部署文档"。Hadoop是一种分布式计算框架,广泛应用于大数据处理和存储,尤其在处理海量非结构化数据时...

    大数据Hadoop安装部署文档

    ### Hadoop在Windows上的伪分布式安装过程 #### 第一部分:Hadoop在Windows上伪分布式的安装过程 **一、安装JDK** 1. **下载JDK** - 访问Oracle官网下载页面:...

Global site tag (gtag.js) - Google Analytics