设为首页 加入收藏

TOP

Hadoop 配置及hadoop HA 的配置
2019-01-19 12:41:11 】 浏览:49
Tags:Hadoop 配置 hadoop

注:本文中提到的ochadoop 不要感到奇怪,是亚信公司内部自己合成的一个包,把所有的组件都放在一个包内了,免去了组件的下载过程和解决兼容问题,其实也可以自己下载的,不要受到影响。

另,转载请注明出处,谢谢



修改静态IPhostname


/etc/sysconfig/network-scripts/ifcfg-eth0配置IPADDR地址
运行以下命令生效


service network restart


/etc/sysconfig/network中配置hostname配置完成后重启生效


设置ssh免登录(本节没有做实际操作,仅供参考)


Master节点上执行以下命令:


ssh-keygen –t rsa –P ''


生成的密钥对:id_rsaid_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。


cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。


修改文件"authorized_keys"


chmod 600 ~/.ssh/authorized_keys


root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。


RSAAuthentication yes #启用 RSA认证

PubkeyAuthentication yes #启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)



设置完之后记得重启SSH服务,才能使刚才设置有效。


service sshd restart



接下来的事儿是把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:


scp ~/.ssh/id_rsa.pub远程用户名@远程服务器IP:~/



"/home/hadoop/"下创建".ssh"文件夹


chmod 700 ~/.ssh



到目前为止Master的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master的公钥追加到Slave1的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:


cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys



root用户修改"/etc/ssh/sshd_config"


具体步骤参考前面的"设置SSH配置",具体分为两步:第1是修改配置文件;第2是重启SSH服务。


测试Master使用SSH无密码登录Slave1


ssh远程服务器IP


配置slaves


etc/hadoop/slaves加入datanode机器的hostname


w-cs-datanode01

w-cs-datanode02

w-cs-datanode02


创建hadoop用户


以下操作方式使用该新建的用户进行操作。注:下以出现的csbd为当前新建的账号


下载OCHadoop


http://210.14.153.178:9081/download/OCHadoop/V4.0.1/ochadoop-och4.0.1.tar.gz
下载前请确认安装的版本号,该包包含有hadoopzookeeperhiveHbasespark等组件。


下载Java并配置环境变量


解压:tar zxvf jdk-7u75-linux-x64.tar.gz-C /home/csbd/java-1.7.0
配置环境变量:vim /etc/profile


export JAVA_HOME=/home/csbd/jdk1.7.0_75

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH


生效:


source /etc/profile


还有一些环境变量像HADOOP_HOMEHIVE_HOMEZOOKEEPER_HOME等都可以先配置了


hadoop中配置Java环境变量


etc/hadoop目录下hadoop-env.sh yarn-env.shJava_home给配置上


core-site.xml配置


<property>

<name>fs.defaultFS</name>

<value>hdfs://w-cs-namenode01</value><!-- 一定得是namenodehostname或者 ip,并且不用加端口号(这里的名称与HA配置hdfs-site.xml中的dfs.nameservices必须保持一致) -->

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/csbd/tmp</value> <!-- 该路径可以不用创建,会自动创建-->

</property>

<!--配置HA时才用配置该项 -->

<property>

<name>ha.zookeeper.quorum</name>

<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>

<!--各个ZK节点的IP/host,及客户端连接ZK的端口,该端口需与zoo.cfg中的 clientPort一致! -->

</property>


hdfs-site.xml


<property>

<name>dfs.namenode.name.dir</name>

<value>/home/csbd/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/csbd/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

<!-- HA配置需要加如下配置-->

<property>

<name>dfs.nameservices</name>

<value>w-cs-namenode01</value>

</property>

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>w-cs-namenode01:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>w-cs-namenode02.com:8020</value>

</property>

<property>

<name>dfs.namenode.servicepc-address.mycluster.nn1</name>

<value>w-cs-namenode01:53310</value>

</property>

<property>

<name>dfs.namenode.servicepc-address.mycluster.nn2</name>

<value>w-cs-namenode02:53310</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn1</name>

<value>w-cs-namenode01:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn2</name>

<value>w-cs-namenode02:50070</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://w-cs-namenode01:8485;w-cs-namenode02:8485;w-cs-datanode01:8485/w-cs-namenode01</value>

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/csbd/dfs/jndata</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.mycluster</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/csbd/.ssh/id_rsa</value>

</property>

<property>

<name>dfs.namenode.edits.dir</name>

<value>/home/csbd/dfs/edits</value>

</property>

<property>

<name>dfs.permission</name>

<value>false</value>

</property>

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>


yarn-site.xml


注:yarn-site.xml在两个运行resourceManager的节点上一定要修改yarn.resourcemanager.ha.id中的值为当前机器的映射!


<configuration>

<!-- Resource Manager Configs -->

<property>

<name>yarn.resourcemanager.connect.retry-interval.ms</name>

<value>2000</value>

</property>

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>pseudo-yarn-rm-cluster</value>

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<property>

<name>yarn.resourcemanager.ha.id</name>

<value>rm1</value> <!-- 在第一台运行resourceManager HA的机器上为 rm1,在另一台运行resourceManager的机器上要改成 rm2 -->

</property>

<property>

<name>yarn.resourcemanager.scheduler.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>

</property>

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<property>

<name>yarn.resourcemanager.zk.state-store.address</name>

<value>localhost:2181</value>

</property>

<property>

<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>

<value>5000</value>

</property>

<!-- RM1 configs -->

<property>

<name>yarn.resourcemanager.address.rm1</name>

<value>w-cs-namenode01:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm1</name>

<value>w-cs-namenode01:8030</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.https.address.rm1</name>

<value>w-cs-namenode01:23189</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address.rm1</name>

<value>w-cs-namenode01:8088</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm1</name>

<value>w-cs-namenode01:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address.rm1</name>

<value>w-cs-namenode01:8033</value>

</property>

<!-- RM2 configs -->

<property>

<name>yarn.resourcemanager.address.rm2</name>

<value>w-cs-namenode02:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm2</name>

<value>w-cs-namenode02:8030</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.https.address.rm2</name>

<value>w-cs-namenode02:23189</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address.rm2</name>

<value>w-cs-namenode02:8088</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm2</name>

<value>w-cs-namenode02:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address.rm2</name>

<value>w-cs-namenode02:8033</value>

</property>

<!-- Node Manager Configs -->

<property>

<description>Address where the localizer IPC is.</description>

<name>yarn.nodemanager.localizer.address</name>

<value>0.0.0.0:23344</value>

</property>

<property>

<description>NM Webapp address.</description>

<name>yarn.nodemanager.webapp.address</name>

<value>0.0.0.0:23999</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>

<!-- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> -->

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

<name>yarn.nodemanager.local-dirs</name>

<value>/tmp/pseudo-dist/yarn/local</value>

</property>

<property>

<name>yarn.nodemanager.log-dirs</name>

<value>/tmp/pseudo-dist/yarn/log</value>

</property>

<property>

<name>mapreduce.shuffle.port</name>

<value>23080</value>

</property>

<!--在主备resourceManager上配置的zookeeper的地址和端口(所以resourceManager要和zookeeper装在一台机器上)-->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>zk1.example.com:2181,zk2.example.com:2181</value>

</property>

</configuration>


mapred-site.xml


<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>namenode1:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>namenode1:19888</value>

</property>


Zookeeper的安装配置


下载zookeepertar包,解压


首先建立zookeeper的数据目录,比如:


mkdir -p /opt/hadoop/data/zookeeper


同时建立日志存放目录:


mkdir –p /opt/hadoop/logs/zookeeper


$ZOO_HOME/conf下创建配置文件:


touch zoo.cfg


zoo.cfg文件是加入以下配置:


tickTime=2000

dataDir=/opt/hadoop/data/zookeeper

clientPort=2181

initLimit=5

syncLimit=2

server.1=192.168.17.14:31316:31317

server.2=192.168.17.15:31316:31317

server.3=192.168.17.16:31316:31317



在三台服务器的目录/opt/hadoop/data/zookeeper下分别创建一个叫myid的文件,内容分别是123,如:


#192.168.17.14上执行如下命令


echo 1 >/opt/hadoop/data/zookeeper/myid


#192.168.17.15上执行如下命令


echo 2 >/opt/hadoop/data/zookeeper/myid


#192.168.17.16上执行如下命令


echo 3 >/opt/hadoop/data/zookeeper/myid


最后就是分别启动zookeeper服务了:


./bin/zkServer.sh start


通过jps命令可以检查是否启动成功:


hd@hd0:/opt/hadoop/apps/zookeeper-3.4.5$jps


1239 QuorumPeerMain


看到QuorumPeerMain进程就表示zookeeper启动成功了。


测试zookeeper集群是否建立成功,在$ZOO_HOME目录下执行以下命令即可,如无报错表示集群创建成功:


./bin/zkCli.sh -server localhost:31315


查看状态:


$ zkServer.sh status

JMX enabled by default

Using config: /home/yarn/Zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode:follower 表示当前这个机器上是从状态



在任意一个节点格式化ZK


hdfs zkfc -formatZK


仅在主备NN节点上启动就行:


hadoop-daemon.sh start zkfc


启动后我们可以看到ZKFC进程:


$ jps
3084 QuorumPeerMain
3292 Jps
3247 DFSZKFailoverController


启动hadoop


在主nameNode上进行格式化:(注:只用主Namenode格式化,备Namenode不用格式化,备NN需要做一下同步就行,不然会造成两个namenodeVERSION不一致,解决的办法是查看日志,按照提示的两个不一致的id进行替换就行了(一般会有namespaceIdclusterId不一致,报哪个替换哪个就行))





在所有的ZK节点执行命令:


zkServer.shstart



查看从属关系


zkServer.shstatus


JMX enabledby default


Usingconfig: /home/yarn/Zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg


Mode: follower



注意:


哪个ZK节点会成为leader是随机的,第一次实验时slave2成为了leader,第二次实验时slave1成为了leader


此时,在各个节点都可以查看到ZK进程:


jps


3084 QuorumPeerMain



任意ZK节点上格式化ZK


hdfs zkfc-formatZK



仅在主备NN节点上启动就行:


hadoop-daemon.shstart zkfc



启动后我们可以看到ZKFC进程:


jps


3084QuorumPeerMain


3292 Jps


3247 DFSZKFailoverController



在各JN上启动:


hadoop-daemon.shstart journalnode



先用子命令启动各进程,便于查看问题,正常以后可以使用 start-dfs.sh start-yarn.sh start-all.sh


./bin/hdfsnamenode –format # 格式化namenode


在主nameNode上启动各DN节点:


./sbin/hadoop-daemons.shstart datanode



./sbin/hadoop-daemon.sh--script hdfs start datanode


./sbin/yarn-daemon.shstart resourcemanager


./sbin/yarn-daemon.shstart nodemanager


./sbin/mr-jobhistory-daemon.shstart historyserver



启动主节点上的NN
hadoop-daemon.sh start namenode
在备NN上同步主NN上元数据:


hdfs namenode -bootstrapStandby


正常的启动日志如下:


Re-formatfilesystem in Storage Directory /home/yarn/Hadoop/hdfs2.0/name (Y or N) Y


14/06/1510:09:08 INFO common.Storage: Storage directory /home/yarn/Hadoop/hdfs2.0/namehas been successfully formatted.


14/06/1510:09:09 INFO namenode.TransferFsImage: Opening connection to http://master:50070/getimagegetimage=1&txid=935&storageInfo=-47:564636372:0:CID-d899b10e-10c9-4851-b60d-3e158e322a62


14/06/1510:09:09 INFO namenode.TransferFsImage: Transfer took 0.11s at 63.64 KB/s


14/06/1510:09:09 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000935size 7545 bytes.


14/06/1510:09:09 INFO util.ExitUtil: Exiting with status 0


14/06/1510:09:09 INFO namenode.NameNode: SHUTDOWN_MSG:


/************************************************************


SHUTDOWN_MSG:Shutting down NameNode at slave1/192.168.66.92


************************************************************/



在备NN上启动namenode

hadoop-daemon.shstart namenode




校验效果


首先可以连到两台NameNode查看主备状态
http://192.168.17.14:50070/dfshealth.jsp


http://192.168.17.15:50070/dfshealth.jsp
通过 jps查到主nameNode上的PID,然后使用kill PID 杀死该进行,再查看原来的standBy是否改为active
可以在主NN节点上执行命令激活主NN


hdfs haadmin -transitionToActive nn1


该命令可以将active状态从nn2切换到nn1,让nn2变成active


hdfs haadmin -DfSHAadmin -failover nn2 nn1



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hadoop的安全模式——hadoop2.2.0.. 下一篇hadoop中主要进程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目