Hadoop220集群安装.docx
- 文档编号:12476364
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:17
- 大小:825.75KB
Hadoop220集群安装.docx
《Hadoop220集群安装.docx》由会员分享,可在线阅读,更多相关《Hadoop220集群安装.docx(17页珍藏版)》请在冰豆网上搜索。
Hadoop220集群安装
Hadoop最新安装手册
一、Hadoop2.2.0完全分布式集群平台安装设置:
HDFSHA架构:
在一个典型的HDFSHA场景中,通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。
ActiveNameNode对外提供服务,比如处理来自客户端的RPC请求,而StandbyNameNode则不对外提供服务,仅同步activenamenode的状态,以便能够在它失败时快速进行切换。
为了能够实时同步Active和Standby两个NameNode的元数据信息(实际上editlog),需提供一个共享存储系统,可以是NFS、QJM(QuorumJournalManager)或者Bookeeper,ActiveNamenode将数据写入共享存储系统,而Standby监听该系统,一旦发现有新数据写入,则读取这些数据,并加载到自己内存中,以保证自己内存状态与ActiveNameNode保持基本一致,如此这般,在紧急情况下standby便可快速切为activenamenode。
注意,在Hadoop2.0中,不再需要secondarynamenode或者backupnamenode,它们的工作由Standbynamenode承担。
本文将重点介绍基于QJM的HA解决方案。
在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。
通常配置奇数个(2N+1)个JournalNode,这样,只要N+1个写入成功就认为数据写入成功,此时最多容忍N-1个JournalNode挂掉,比如3个JournalNode时,最多允许1个JournalNode挂掉,5个JournalNode时,最多允许2个JournalNode挂掉。
基于QJM的HDFS架构如下
前提条件:
1、首先在每台Linux电脑上面安装好JDK6或其以上版本,并设置好JAVA_HOME等,测试一下java、javac、jps等命令是否可以在终端使用,如何配置JDK这里就不说了;
2、在每台Linux上安装好SSH,如何安装请参加《Linux平台下安装SSH》。
后面会说如何配置SSH无密码登录。
有了上面的前提条件之后,我们接下来就可以进行安装Hadoop分布式平台了。
步骤如下:
1、先设定电脑的IP为静态地址:
CentOS下设置IP的方式:
在里面添加下面语句:
里面的IPADDR地址设置你想要的,我这里是10.10.141.14。
设置好后,需要让IP地址生效,运行下面命令:
然后运行ifconfig检验一下设置是否生效:
可见IP地址已经设置为10.10.141.14了。
2、设置各个主机的hostname
CentOS设置hostname步骤如下:
将里面的HOSTNAME修改为你想要的hostname,我这里是取hadoop-active
HOSTNAME=hadoop-active
查看设置是否生效,运行下面命令
3、在所有电脑的/etc/hosts添加以下配置:
其实就是所有电脑的静态IP地址和其hostname的对应关系。
检验所有机器配置是否修改生效,可以用ping来查看
如果上面的命令可以ping通,说明配置成功。
4、设置SSH无密码登陆
终端中执行:
[hadoop@hadoop~]$ssh-keygen-trsa
Generatingpublic/privatersakeypair.
Enterfileinwhichtosavethekey(/home/hadoop/.ssh/id_rsa):
//使用默认位置
Enterpassphrase(emptyfornopassphrase):
//直接回车
Entersamepassphraseagain:
Youridentificationhasbeensavedin/home/hadoop/.ssh/id_rsa.
Yourpublickeyhasbeensavedin/home/hadoop/.ssh/id_rsa.pub.
Thekeyfingerprintis:
5b:
47:
52:
a7:
1e:
1c:
4d:
98:
d7:
04:
eb:
d9:
0e:
5f:
dd:
3dhadoop@hadoop
Thekey'srandomartimageis:
+--[RSA2048]----+
|o=++.|
|o+o..|
|.=..|
|+oo+|
|S.o+E*|
|o.+o|
|o|
||
||
+-----------------+
[hadoop@hadoop~]$
cp/home/hadoop/.ssh/id_rsa.pub/home/hadoop/.ssh/authorized_keys
[hadoop@hadoop~]$chmod644/home/hadoop/.ssh/authorized_keys
[hadoop@hadoop~]$sshlocalhost//测试是否成功
Lastlogin:
ThuDec814:
23:
462011fromlocalhost.localdomain
[hadoop@hadoop~]$exit
logout
Connectiontolocalhostclosed.
catid_rsa.pub>>.ssh/authorized_keys
5、下载解压hadoop-2.2.0.tar.gz:
下载方式不再赘述,可以直接
运行完上面的命令之后,hadoop-2.2.0.tar.gz文件将会保存在/home/$user/Downloads/hadoop里面,然后解压:
之后将会在hadoop文件夹下面生成hadoop-2.2.0文件夹
6、配置Hadoop的环境变量
在/etc/profile文件的末尾加上以下配置
在终端输入hadoop命令查看Hadoop的环境变量是否生效:
7、编译HadoopNative包
WARNorg.apache.hadoop.util.NativeCodeLoader:
Unabletoloadnative-hadooplibraryforyourplatform…usingbuiltin-javaclasseswhereapplicable
在网上查了一下发现Apache官网提供的是32位编译的,在64位服务器上会有问题。
而且官方竟然没有提供64位版本,要使用得自己编译。
7.1、编译环境准备
经过一次次编译失败,翻遍了谷歌、XX之后终于凑齐了下面这些包。
下面的服务器环境都基于Centos的,其它发行版Linux可能会有不同。
1、GCC、CMake、openssl、JDK。
2、hadoop-2.2.0-src.tar.gz(http:
//hadoop.apache.org/releases.html#Download)
3、apache-ant-1.9.2-bin.tar.gz(http:
//ant.apache.org/bindownload.cgi)
4、apache-maven-3.0.5-bin.tar.gz(http:
//maven.apache.org/download.cgi)
注意:
此处最新的3.1.1版有Bug,缺少依赖包。
详细说明如下所示:
https:
//cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound
5、findbugs-2.0.2.tar.gz(http:
//sourceforge.jp/projects/sfnet_findbugs/releases/)
注意:
被墙,只能进sourceforge.jp
6、protobuf-2.5.0.tar.gz(
7、zlib-devel-1.2.3-3.x86_64.rpm
7.2、依赖环境配置
安装没啥好说的了,大部分都是tar包,解开就能用。
只有protobuf需要make一下。
配置好环境后不要忘了source/etc/profile一下,否则不会生效。
下面的图是环境变量配置明细:
7.3、编译
安装好了上面的依赖后就可以编译了。
mvnpackage-Pdist,native,docs-DskipTests-Dtar
然后就是漫长的等待,真的很漫长(用小时来做单位的)。
当你看到一串SUCCESS的时候,那么恭喜你成功了。
7.4、生成打包文件
到这一步就简单了,在/data/java/tools/hadoop-2.2.0-src/hadoop-dist/target/目录下,可以看到编译好的hadoop-2.2.0.tar.gz包静静的趴在那里,现在你可以进行安装了。
8、修改Hadoop的配置文件
7.1、修改Hadoop的hadoop-env.sh配置文件,设置jdk所在的路径:
找到JAVA_HOME,并设置为服务器JDK所在的绝对路径。
同时配置HADOOP_HOME,设置为服务器hadoop所在的绝对路径。
7.2、依次修改core-site.xml、yarn-site.xml、mapred-site.xml和hdfs-site.xml配置文件,主要分析core-site.xml与hdfs-site.xml配置信息。
Core-site.xml配置如下:
Hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多配置都依赖它。
它默认的位置是在/tmp/{$user}下面,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。
所以建议配置该路径到持久化目录。
fs.defaultFS整个Federation集群对外提供服务的NS逻辑名称,这里的协议不再是hdfs,而是新引入的viewfs,这个逻辑名称会在下面的挂载表中用到。
缺省文件服务的协议和NS逻辑名称,和hdfs-site里的对应,此配置替代了1.0里的fs.default.name。
Ha.zookeeper.quorum:
”AlistofZooKeeperserveraddresses,separatedbycommas,thataretobeusedbytheZKFailoverControllerinautomaticfailover.”。
配置三个Zookper节点,用于ZKFC故障转移。
hdfs-site.xml配置如下:
dfs.nameservicesHDFS命名服务的逻辑名称,可用户自己定义,比如mycluster,注意,该名称将被基于HDFS的系统使用,比如Hbase等,此外,需要你想启用HDFSFederation,可以通过该参数指定多个逻辑名称,并用“,”分割。
dfs.ha.namenodes.[$nameserviceID]命名服务下包含的NameNode列表,可为每个NN指定一个自定义的ID名称,比如命名服务mycluster下有两个NameNode,分别命名为nn1和nn2。
注意,目前每个命名服务最多配置两个NameNode
dfs.namenode.rpc-address.[$nameserviceID].[$namenodeID]为每个NN设置RPC地址。
这里面提到了两个RPC端口,分别是dfs.namenode.rpc-address和dfs.namenode.servicerpc-address。
如果只配置dfs.namenode.rpc-address,那么NameNode-Client和NameNode-DataNode之间的RPC都走的是这个端口。
如果配置了后者与前者不同,那么dfs.namenode.rpc-address表示的是NameNode-Client之间的RPC,而dfs.namenode.servicerpc-address表示的是NameNode-DataNode之间的RPC。
之所以要区别开来,我想主要是因为datanode和namenode通讯时不会影响client和namenode的通讯,因为同一个端口同时打开的句柄毕竟是预先设定的,缺省为10个。
dfs.namenode.http-address.[$nameserviceID].[$namenodeID]为每个NN设置对外的HTTP地址
dfs.namenode.shared.edits.dir设置一组journalNode的URI地址,activeNameNode将editlog写入这些JournalNode,而standbyNameNode读取这些editlog,并作用在内存中的目录树中,其中,journalId是该命名空间的唯一ID。
假设你有三台journalNode,即,和,则可如上配置。
dfs.journalnode.edits.dir设置journaldata的存储路径
dfs.client.failover.proxy.provider.[$nameserviceID]设置客户端与activeNameNode进行交互的Java实现类,DFS客户端通过该类寻找当前的activeNameNode。
该类可由用户自己实现,默认实现为ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods主备架构解决单点故障问题时,必须要认真解决的是脑裂问题,即出现两个master同时对外提供服务,导致系统处于不一致状态,可能导致数据丢失等潜在问题。
在HDFSHA中,JournalNode只允许一个NameNode写数据,不会出现两个activeNameNode的问题,但是,当主备切换时,之前的activeNameNode可能仍在处理客户端的RPC请求,为此,需要增加隔离机制(fencing)将之前的activeNameNode杀死。
HDFS允许用户配置多个隔离机制,当发生主备切换时,将顺次执行这些隔离机制,直到一个返回成功。
Hadoop2.0内部打包了两种类型的隔离机制,分别是shell和sshfence。
这里配置sshfence
sshfence通过ssh登录到前一个activeNameNode并将其杀死。
为了让该机制成功执行,需配置免密码ssh登陆,这可通过参数dfs.ha.fencing.ssh.private-key-files设置一个私钥文件。
需要一些目录放置fsimage和edits,对应配置dfs.namenode.name.dir、dfs.namenode.edits.dir
需要指定一个目录来保存blocks,对应配置
dfs.replication确定datablock的副本数目,hadoop基于rackawareness(机架感知)默认复制3份分block,(同一个rack下两个,另一个rack下一份,按照最短距离确定具体所需block,一般很少采用跨机架数据块,除非某个机架down了)。
这个是块大小的设置,也就是说文件按照多大的size来切分块。
一般来说,块的大小也决定了你map的数量。
举个例子:
我现在有一个1T的文件,如果我的块size设置是默认的64M,那么在HDFS上产生的块将有1024000/64=16000块。
允许文件以rest形式被访问
dfs.permission是否开启文件权限验证,true开启,false不进行读写权限验证。
(注:
dfs.permission开启与否dfspermission信息都不会改变后丢失,chown、chgrp、chmod操作也始终会验证权限,dfspermission信息只在namenode里,并不在danode里与blocks关联)
yarn-site.xml配置如下:
mapred-site.xml配置如下:
Slaves配置如下:
配置好Hadoop的相关东西之后,请将hadoop-2.2.0整个文件夹分别拷贝到其他master和datanode主机上面去,设置都不需要改!
9、关闭防火墙
关闭防火墙
防火墙会影响外部对linux机器的访问,简单起见就直接关闭防火墙服务。
[hadoop@hadoop~]$sudoserviceiptablesstop//停止防火墙服务
[hadoop@hadoop~]sudochkconfig--level35iptablesoff//永久关闭防火墙
关闭Selinux
Selinux会进行操作和访问限制,避免配置就直接关闭该功能。
[hadoop@hadoop~]$sudovi/etc/sysconfig/selinux//编辑selinux配置文件
SELINUX=disabled#设置selinux禁用
10、查看Hadoop是否运行成功
启动JN:
11、[hadoop@hadoop~]$cd/usr/local/hadoop2.0/hadoop/sbin/;./hadoop-daemon.shstartjournalnode
格式化NameNode:
[hadoop@hadoop~]$hadoopnamenode–format
格式化JN
[hadoop@hadoop~]$hadoopnamenode-initializeSharedEdits
启动Zookeeper:
[hadoop@hadoop~]$zkServer.shstart
启动Hadoop:
[hadoop@hadoop~]$cdsbin./star-dfs.sh
启动Yarn:
[hadoop@hadoop~]$cdsbin./start-yarn.sh
启动Hbase:
[hadoop@hadoop~]$start-hbase.sh
集群方式启动Hive:
[hadoop@hadoop~]$hive:
hive-hiveconfhbase.zookeeper.quorum=slave
执行jps看是否启动成功,只有7个进程都启动了才对。
在Web界面上查看是否启动成功,如果界面显示如下(standbynamenode的界面),则启动成功:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hadoop220 集群 安装