Hadoop 配置及hadoop HA 的配置
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Hadoop 配置及hadoop HA 的配置,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含15272字,纯文字阅读大概需要22分钟。
内容图文
注:本文中提到的ochadoop 不要感到奇怪,是亚信公司内部自己合成的一个包,把所有的组件都放在一个包内了,免去了组件的下载过程和解决兼容问题,其实也可以自己下载的,不要受到影响。
另,转载请注明出处,谢谢
修改静态IP 和 hostname
在
/etc/sysconfig/network-scripts/ifcfg-eth0
配置
IPADDR
地址
运行以下命令生效
service network restart |
在 /etc/sysconfig/network 中配置 hostname 配置完成后重启生效
设置ssh 免登录(本节没有做实际操作,仅供参考)
在 Master 节点上执行以下命令:
ssh-keygen –t rsa –P ‘‘ |
生成的密钥对:
id_rsa
和
id_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
下载前请确认安装的版本号,该包包含有
hadoop
,
zookeeper
,
hive
,
Hbase
,
spark
等组件。
下载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_HOME , HIVE_HOME , ZOOKEEPER_HOME 等都可以先配置了
hadoop 中配置 Java 环境变量
在 etc/hadoop 目录下 hadoop-env.sh 和 yarn-env.sh 把 Java_home 给配置上
core-site.xml 配置
<property> <name>fs.defaultFS</name> <value>hdfs:// w-cs-namenode01 </value> <!-- 一定得是 namenode 的 hostname 或者 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 的安装配置
下载 zookeeper 的 tar 包,解压
首先建立 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 的文件,内容分别是 1 , 2 , 3 ,如:
# 在 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
|
启动hadoop
在主 nameNode 上进行格式化:(注:只用主 Namenode 格式化,备 Namenode 不用格式化,备 NN 需要做一下同步就行,不然会造成两个 namenode 的 VERSION 不一致,解决的办法是查看日志,按照提示的两个不一致的 id 进行替换就行了(一般会有 namespaceId 和 clusterId 不一致,报哪个替换哪个就行))
在所有的 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
:
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/getimage?getimage=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 |
原文:http://blog.csdn.net/czw698/article/details/44274317
内容总结
以上是互联网集市为您收集整理的Hadoop 配置及hadoop HA 的配置全部内容,希望文章能够帮你解决Hadoop 配置及hadoop HA 的配置所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。