`
cloudtech
  • 浏览: 4578072 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

hadoop学习笔记-centos安装单节点及多节点集成(完整版)

 
阅读更多

hadoop学习笔记-centos安装单节点及多节点集成(初稿,无图,无连接)

完整版请移步到:点击打开链接

后续将会将软件下载地址,以及截图更新上来,由于此文档是在公司写的,所以只能用文字描述出操作的过程,请谅解。

前言:这一系列的文章好久没有写了,由于工作最近比较繁忙,于是就拖延了一段时间。于是上周日本人计划搭建一个比较真实的环境,由于之前一直是在windows下面模拟的,感觉不是很好,所以就用我那个只有4G的笔记本来跑跑几个虚拟机吧。

在安装之前需要以下几个软件

1) centos安装包,这个是必须的。我用的是centos6.3,是当前最新的版本。下载地址是:

2) virtualbox安装包,由于这个相对vm应该比较小巧,功能也比较简单,所以用于练习是比较好的选择。下载地址是:

3) xshell以及xftp安装包,这个是linux在windows端的工具软件,可以通过ssh来远程连接或者其他协议来连接linux服务器,并可以进行管理,类似于在linux的终端,而xftp是可以通过文件拖拉方式来进行windows端和linux端的文件传输,非常方便,下载地址为:

4) hadoop1.0.4的rpm的安装包,由于centos是类似red hat,所以可以下载hadoop1.0.4的rpm包。下载地址:

以上软件均是在搭建之前必须下载好的。接下来便进入安装步骤。

Centos的安装:

Centos的安装还是比较简单的,具体的步骤可以参考:

本人也是参考这个来进行安装的。

注意:centos在安装的时候,就已经替我们安装好了openjdk和ssh。本人建议不采用它自带的openjdk,下对它进行卸载,然后重新安装,操作步骤为:

操作之前需要将用户切换到root用户,su root ,然后输入你在安装系统的时候设置的密码

rpm -qa | grep java

于是可能会出现下面内容(不同机器会出现不同内容)

java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

执行下面操作:

rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

注意上面红色标记是相同的。

最后在重新安装openjdk

注意此时还是在root用户下

yuminstall java-1.6.0-openjdk java-1.6.0-openjdk-devel

执行这个命令,

那么jdk将会安装在/usr/jvm/java下面了。

设置环境变量:

echo "exportJAVA_HOME=/usr/lib/jvm/java" >> /etc/profile

然后再reboot一下。这是jdk就安装好了。最好是将$JAVA_HOME/bin加到$PATH下面,当然,这是可选的。

搭建单节点的hadoop:

启动virtualbox里面刚刚安装好的刚刚安装好的centos,记住在网络连接那里设置连桥方式,不然虚拟机可能连不上网。

到此你看看你是否已经安装好了xshell和xftp(windows)。通过xshell连接你虚拟机的centos,然后就可以不用在虚拟机里面操作了,从而避免总是在虚拟机和windows切换。

打开xshell,点击new一个新的连接,这里输入虚拟机里面的centos的ip。点击connect,那么就会提示你是以哪个用户登录,输入你设置的centos用户名,勾选记住名字,后面会提示输入对应用户的密码,输入即可,同时也勾选上记住密码。点击确定。于是就连接上了虚拟机里面的centos了。就会看到虚拟机的终端。

注意:以下操作均是在xshell操作。

第一步:在当前用户目录下新建一个opt目录

(这是本人的习惯,不同人可以自己考虑)。这个目录将会放hadoop的安装目录。然后cd ~/opt,于是就进入了opt目录,此时点击xshell导航栏的window选项,里面会看到new file transport,点击这个,如果你已经安装了xftp那么就会通过xftp打开对应centos的opt目录,如果没有安装,将会提醒你安装xftp。这时你就可以将你下载在windows的hadoop 1.0.4的rpm安装文件拖拉到centos的opt目录下。上传完毕后,当你再次回到xshell的终端,在opt下面ls一下就会看到刚刚拖拉的hadoop安装文件了。

第二步:解压hadoop安装包。

由于hadoop的安装包是rpm格式,所以tar不能解压。采用一下方式可以进行解压:

rpm2cpioxxx.rpm | cpio –div

xxx就是hadoop的安装包名。

于是就会再opt目录下会出现三个文件夹,etc,usr,var

Etc可以说是hadoop的配置模板,usr里面才是hadoop的主目录,里面主要的几个目录是:

bin:里面有hadoop工具以及taskcontroller

sbin:里面有hadoop的启动以及关闭等其他工具

logs:则是存放当前节点hadoop运行日志。

进入/opt/etc/hadoop目录

里面有哦hadoop的所有配置文档

主要是修改core-site.xml,mapred-site.xml,hadoop-env.sh,hdfs-site.xml

修改内容可以参考官方的关于1.0.4的文档,我这里把相关内容粘贴出来:

hadoop-env.sh

加入export JAVA_HOME=/usr/lib/jvm/java

core-site.xml:

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://localhost:9000</value>

</property>

</configuration>

hdfs-site.xml:

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

mapred-site.xml:

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

此时hadoop的基本配置已经完成。

注意刚刚说了,etc目录只是一个配置模板,而并非hadoop的真正配置的地方

我们需要将etc复制到usr里面去:

cp -retc ./usr(执行这条命令的目录是在opt下面)

这才算是真正的配置完了hadoop。

第三步:生成无密码登录ssh

由于hadoop需要无密码登录作为datanode的节点,而由于部署单节点的时候,当前节点既是namenode又是datanode,所以此时需要生成无密码登录的ssh。方法如下:

执行ssh-keygen –t rsa一路回车

然后cd ~/.ssh

ls一下会看到有两个文件,一个是id_rsa,另一个是id_rsa.pub

id_rsa是密钥,id_rsa.pub是公钥。我们在执行

cat id_rsa.pub >> authorized_keys

chmod 600 authorized_keys

测试是否设置成功:

ssh localhost

如果不需要输入密码即表示设置成功,否则失败。

第四步:附加操作

为了方便操作,最好是将hadoop的bin以及sbin放到PATH下面去,这样不要每次倒要进入对应目录下才能执行。

所以需要执行:

echo “PATH=/home/username/opt/usr/bin:/home/username/opt/usr/sbin:$PATH”>> /etc/profile

注意:上面命令需要切换到root用户,并且username是你当前用户的名字。到此就剩下启动hadoop了。

启动hadoop:

由于将hadoop的bin以及sbin路径放到了path中,所以可以再任何目录位置执行hadoop命令。

注意:只执行之前到sbin目录下ls一下,会发现有一部分文件没有执行的权限,那么就执行一个chmod 777 *便可以了。

第一步:格式化namenode

hadoop namenode format

此时会初始化好hadoop的文件系统。

执行完成之后会发现根目录下会有一个tmp目录

可以cd /tmp

然后ls

里面又会三个目录

Data:这边是datanode的信息存放目录了

Name:这是namenode的信息存放目录

Secondraynamenod:这个可以理解为namenode的一个备份。

这里就是hadoop的文件系统根目录了。你进去根本看不到你所谓的目录和文件,因为里面是hadoop的文件系统。不是我们操作系统的文件系统。所以只有通过hadoop才看看到目录和文件。

第二步:正式启动hadoop

忙活半天,这下终于可以启动hadoop,看看它的真面目了。

让我们执行start-all.sh

就会提示依次启动了namenode后面跟着它的日志存放目录

Datanode ,secondraynamenode,jobtracker以及tasktracker。

一般namenode会配备一个jobtracker用于处理用户的各种请求的。

而datanode会配备一个tasktracker用户处理由jobtracker分发过来的任务。

而secondraynamenode则是namenode的一个备份,会定时的将namenode的信息复制过来,当然,这个备份肯定不能解决namenode完全崩溃的时候。

一般一个hadoop里面最重要的是namenode,它相当于一个hadoop的管家,没有他,那么就不会知道文件怎么存放以及存放在哪等等信息。所以一般在一个hadoop的集群中只有一个namenode。集群可以理解为是多个datanode的集群,统一由namenode来管理。这里扯了一点hadoop的相关知识。

第三步:检查是否启动成功

对于一个单节点,那么当前节点应该有增加五个java进程,分别是namenode,datanode,secondraynamenode,jobtracker,tasktracker。通过jps就可以查看。如果看到这几个进程,表示你安装hadoop成功了。那么你就可以开始你的hadoop之旅了。

搭建集群的hadoop

前期配置:由于之前在virtualbox上面只是安装了一个centos,那么要集群,当然需要至少再安装一个centos。当然,这个centos的用户名最好喝另一个样,从而避免没必要的配置。

到此,假设你已经安装并完成了jdk的安装及配置。并且假设,开始安装的centos是作为master,刚刚安装的作为slaver。

注意:以下操作均是在xshell下操作的。

第一步:修改主机名及hosts文件

1) master:这个作为namenode节点(同时可以作为datanode)。

vi /etc/sysconfig/network

将里面的HOSTNAME修改成master

vi /etc/hosts

加上master对应的ip(既当前的节点ip)

例如:127.0.0.1 master

同时加上slaver的ip

2) slaver:这个是作为datanode节点,同上

vi /etc/sysconfig/network

将里面的HOSTNAME修改成master

vi /etc/hosts

加上master对应的ip(既当前的节点ip)

例如:127.0.0.1 master

同时加上slaver的ip

完成以上操作之后将master和slaver节点均reboot一下。

注意:以上操作均要在root下操作,不然会提示没有权限。

第二步:修改hadoop的配置文档

由于已经在master节点已经搭建好了单节点的hadoop,那么我们就先修改master的hadoop配置信息。同单节点一样,修改core-set.xml.mapred-site.xml

由于之前设置的都是master的ip或者是localhost,那么现在需要修改成在上一步配置好的hosts文件ip和hostname对应内容,我们将在这两个文件的ip都修改成master的hostname或者是ip。因为hostname在hosts文件中已经和ip有对应关系,所以用哪个都一样,不过本人建议用hostname,这样比较明了。

然后修改在etc/hadoop的master和slavers文件。

用vi打开可以看到里面只有localhost,这个hadoop的默认配置,表示当前节点既是master又是slaver,及既是namenode也是datanode。那么此处可以修改master文件将localhost修改成master的hostname(为什么可以,上面已经解释过)。修改slavers文件,将localhost修改成slaver的hostname也可以将master的hostname加进去(注意:一行只能有一个机器的hostname)。这样基本把master节点已经配置完毕。那么就要配置slaver节点了。

Slaver节点的配置很简单,那就是copy。通过tar将opt目录打包:

tar –cvfopt.zip ./opt

将opt打好包之后,通过scp将这个文件复制到slaver机器上。(注意当前位置问当前用户的主目录)

scp opt.zip slaver_hostname:./

(注意:红色标记表示slaver节点的主机名,ip也可以)

此时到slaver节点上,到用户主目录下,ls一下可以看到刚刚拷贝过来的opt.zip文件。

同样,用tar进行解压

tar –xvf opt.zip ./

解压完毕之后,在当前目录下会看到一个opt文件夹。

此时便安装好了hadoop了。

第三步:配置ssh无密码登录

由于master节点需要通过ssh登录到slaver节点去启动datanode。那么需要在slaver节点实现ssh无密码登录。为了防治意外发生,我们最好还是使得slaver和master都能够相互的ssh无密码登录。

我们在slaver节点执行ssh-keygen –t rsa,一路回车。

在master节点先删除~/.ssh目录,rm –fr ~/.ssh。然后重新生成私钥和公钥。ssh-keygen–t rsa(至于为什么要重新生成,是由于我们的主机名已经改变了,所以要重新生成)。

cd~/.ssh,里面就会有id_rsa,id_rsa.pub,这两个文件的意义上面已经介绍过了。下面就是要实现互通了。

我们在master的~/.ssh下有一个id_rsa.pub文件。我们将这个文件copy到slaver的.ssh目录。通过scp来复制。scp id_rsa.pubslaver_hostname:./.ssh/tmp.pub,然后回到slaver节点的终端。在.ssh目录下ls一下,会看到多出一个tmp.pub文件。

再次执行cat tmp.pub >>authorized_keys

我们对这个文件赋予权限:chmod 600authorized_keys。这样从master到slaver就实现了无密码ssh登录了。

我们在master端ssh slaver_hostname,如果成功了,那么就不会要求输入密码。

至于slaver到master生成无密码登录,和上面一样,只是是从slaver复制id_rsa.pub到master。,注意,是用cat命令将公钥添加到authorized_keys文件,而不是新建一个authorized_keys。

通过这些操作基本上已经完成了ssh无密码登录了。

第四步:启动hadoop

在启动hadoop之前,由于之前在master上搭建过了一个单节点的hadoop,那么此时需要将原来的/tmp下的所有文件都删除掉。然后执行hadoop namenode –format。

再启动之前,最好还是先要开放一下几个端口:

注意:此操作需要切换到root用户

配置防火墙

Master端:

/sbin/iptables -I INPUT -p tcp –dport 9000-j ACCEPT (这个是core-site.xml:

里面配置的端口名)

/sbin/iptables -I INPUT -p tcp –dport 9001-j ACCEPT (这个是mapred-site.xml:

里面配置的端口名)

/sbin/iptables -I INPUT -p tcp –dport 50030-j ACCEPT(JobTrackeradministrative web GUI JOBTRACKER的HTTP服务器和端口)

/sbin/iptables -I INPUT -p tcp –dport 50070-j ACCEPT(NameNode administrativeweb GUI NAMENODE的HTTP服务器和端口)
/sbin/iptables -I INPUT -p tcp –dport 50010 -j ACCEPT(DATANODE控制端口,主要用于DATANODE初始化时向NAMENODE提出注册和应答请求)

/sbin/iptables -I INPUT -p tcp –dport 50020-j ACCEPT(DATANODE的RPC服务器地址和端口)

/sbin/iptables -I INPUT -p tcp –dport 50060-j ACCEPT(TASKTRACKER的HTTP服务器和端口)

/sbin/iptables -I INPUT -p tcp –dport 50075-j ACCEPT(DATANODE的HTTP服务器和端口)

/sbin/iptables -I INPUT -p tcp –dport 50090-j ACCEPT(辅助DATANODE的HTTP服务器和端口)

保存这些配置信息:

/etc/rc.d/init.d/iptables save

重启防火墙:

/etc/init.d/iptables restart

查看防护墙信息:

/etc/init.d/iptables status

Slaver端:

/sbin/iptables -I INPUT -p tcp –dport 50030-j ACCEPT(JobTrackeradministrative web GUI JOBTRACKER的HTTP服务器和端口)

/sbin/iptables -I INPUT -p tcp –dport 50070-j ACCEPT(NameNode administrativeweb GUI NAMENODE的HTTP服务器和端口)
/sbin/iptables -I INPUT -p tcp –dport 50010 -j ACCEPT(DATANODE控制端口,主要用于DATANODE初始化时向NAMENODE提出注册和应答请求)

/sbin/iptables -I INPUT -p tcp –dport 50020-j ACCEPT(DATANODE的RPC服务器地址和端口)

/sbin/iptables -I INPUT -p tcp –dport 50060-j ACCEPT(TASKTRACKER的HTTP服务器和端口)

/sbin/iptables -I INPUT -p tcp –dport 50075-j ACCEPT(DATANODE的HTTP服务器和端口)

/sbin/iptables -I INPUT -p tcp –dport 50090-j ACCEPT(辅助DATANODE的HTTP服务器和端口)

保存这些配置信息:

/etc/rc.d/init.d/iptables save

重启防火墙:

/etc/init.d/iptables restart

查看防护墙信息:

/etc/init.d/iptables status

启动

通过漫长的配置终于到了启动阶段了

在master端,start-all.sh

1) 如果你的master既是namenode也是datanode,那么通过jps查看会看到六条数据:

分别是:

Psid JPS

Psid Namenode

Psid Datanode

Psid jobtracker

Psidsecondraynamenode

Psid tasktracker

顺序可能不是这样,但是会有这几个数据,如果少了某个,说明没有启动成功,那么就到logs目录去查看日子吧,看看是出现了什么异常。

2)如果master只是namenode,那么jps只有一四条数据,比上面少了tasktracker和datanode

到slaver查看一下datanode是否启动成功:

同样执行jps命令:正常情况会出现三条数据,JPS,datandoe,tasktracker。

到此,hadoop的集群安装已经结束。

扩展hadoop的节点

Hadoop是一个扩展性很高的分布式系统,那么当我们在我们hadoop的集群中添加一个新的datanode的时候,会不会需要重新安装一下hadoop呢?当然不要了。只需要将你新加的slaver的hostname加到master的slavers文件中,并且在master节点的hosts文件中加入新添加的slaver节点的pi和hostname对应信息。

当然,新增加的slaver节点一定要配置好jdk环境。然后将master的hadoop复制一份过去就可以了。

然后再master节点,关闭hadoop,stop-all.sh,然后再启动一下就可以了,start-all.sh.

那么新加的slaver节点就会成功启动datanode和tasktracker了。

安装过程中会出现的某些异常

当某个节点启动不成功的时候,要及时查看相应的logs下的日志。查看出现了什么异常。

例如,master的namenode无法启动,可能是你没有重新格式化hadoop的文件系统,或者是namenode的端口被其他程序占用了。

当slaver节点无法启动了,或者启动了一会,就停止了,可能是你的slaver无法访问master的namenode的节点,那么就可能是master没有关闭某个端口防火墙。例如问的配置,可能是9000端口被防火墙拦截了。那么就需要关闭这个端口的防火墙。

在一中情况就是slaver节点的额datanode的id和namenode的id不一致,会导致datanode无法启动。所以到slaver节点的/tmp/data/current/,有个一VERSION文件,吧里面的id修改成namenode的id一样,然后重启就可以了。(namenode的id信息在/tmp/name/current/VERSION里面)


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics