http://image.baidu.com/search/detail?z=0&ipn=d&word=%E4%BA%91%E8%AE%A1%E7%AE%97%20logo&step_word=&pn=14&spn=0&di=0&pi=&tn=baiduimagedetail&istype=&ie=utf-8&oe=utf-8&cs=1883962502%2C3516267280&os=4221692887%2C51351351&adpicid=0&fr=ala&sme=&cg=&bdtype=14&simics=3393428534%2C3089607575&objurl=http%3A%2F%2Fpic34.nipic.com%2F20131029%2F2531170_140120087000_2.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bgtrtv_z%26e3Bv54AzdH3Ffi5oAzdH3Flal9aaa_z%26e3Bip4s&gsm=0&cardserver=1
数据中心7-12台服务器实施方案
序号 |
ip |
主机名 |
软件安装 |
进程 |
备注 |
1 |
192.168.3.130 |
root01 |
Jdk Hadoop hbase |
NameNode DFSZKFailoverController(zkfc) Hmaster |
必选 |
2 |
192.168.3.132 |
root02 |
Jdk Hadoop hbase |
NameNode DFSZKFailoverController(zkfc) Hmaster |
必选 |
3 |
192.168.3.134 |
root03 |
Jdk Hadoop |
ResourceManager |
必选 |
4 |
192.168.3.136 |
root04 |
Jdk Hadoop |
ResourceManager
|
必选 |
5 |
192.168.3.138 |
root05 |
Jdk Hadoop Zookeeper Hbase |
DataNode NodeManager JournalNode QuorumPeerMain HRegionServer |
必选 |
6 |
192.168.3.139 |
root06 |
Jdk Hadoop Zookeeper Hbase |
DataNode NodeManager JournalNode QuorumPeerMain HRegionServer |
必选 |
7 |
192.168.3.140 |
root07 |
Jdk Hadoop Zookeeper hbase |
DataNode NodeManager JournalNode QuorumPeerMain HRegionServer |
必选 |
8 |
192.168.3.142 |
root08 |
Jdk Hadoop Zookeeper hbase |
DataNode NodeManager JournalNode QuorumPeerMain HRegionServer |
必选 |
9 |
192.168.3.144 |
root09 |
Jdk Jboss tomcat serviceMix |
应用集群 |
有应用,必选,反之可选 |
10 |
192.168.3.146 |
root10 |
Jdk Jboss tomcat serviceMix |
应用集群 |
有应用,必选,反之可选 |
11 |
192.168.3.148 |
root11 |
MySQL |
|
可选 |
12 |
192.168.3.150 |
root12 |
MySQL |
|
可选 |
准备工作(centos6.5 64Bits)
1. 修改Linux主机名
Vim /etc/sysconfig/network
添加HOSTNAME=root01
2.修改IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改IPADDR=192.168.3.130
3. 修改主机名和IP的映射关系
Vim /etc/hosts
添加
192.168.3.130 root01
192.168.3.132 root02
192.168.3.134 root03
192.168.3.136 root04
192.168.3.138 root05
192.168.3.140 root06
。。。
4.关闭防火墙
service iptables stop
chkconfig iptables off
5.停闭selinux
vim /etc/sysconfig/selinux
SELINUX=disebles
6.ssh免登陆
ssh-keygen –t rsa //每台产生公钥和私钥
在192.168.3.130上:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
scp ~/.ssh/authorized_keys [email protected]:/root/.ssh/
在192.168.3.132上:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
scp ~/.ssh/authorized_keys [email protected]:/root/.ssh/
7. 创建目录和准备软件
./runall.sh "mkdir -p /myhome/usr/"
./runall.sh "mkdir -p /myhome/root/"
./runall.sh "mkdir -p /myhome/tmp/"
./runall.sh "mkdir -p /myhome/src/"
./runall.sh "mkdir -p /myhome/logs/"
./runall.sh "mkdir -p /myhome/dev/"
./runall.sh "mkdir -p /myhome/bin/"
./runall.sh "mkdir -p /myhome/usr/hadoop/yarn/local/"
./runall.sh "mkdir -p /myhome/usr/hadoop/yarn/logs/"
./runall.sh "mkdir -p /myhome/usr/hadoop/logs/"
./runall.sh "mkdir -p /myhome/usr/hadoop/journal/zjenterprise/"
./runall.sh "mkdir -p /myhome/usr/hadoop/hdfs/name/"
./runall.sh "mkdir -p /myhome/usr/hadoop/hdfs/data/"
./runall.sh "mkdir -p /myhome/usr/hadoop/tmp/"
./runall.sh "mkdir -p /myhome/usr/hadoop/journal/"
./runall.sh "mkdir -p /myhome/usr/hadoop/hdfs/pid /"
./runall.sh "mkdir -p /myhome/usr/hadoop/hdfs/user /"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/yarn/local/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/logs/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/yarn/logs/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/journal/zjenterprise/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/hdfs/name/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/hdfs/data/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/tmp/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/journal/"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/hdfs/pid /"
./runall.sh "chmod -R 700 /myhome/usr/hadoop/hdfs/user /"
./runall.sh "rm -rf /myhome/hbase/logs/*"
./runall.sh "rm -rf /myhome/usr/hadoop/logs/*"
mkdir -p /myhome/usr/zookeeper/data/
touch /myhome/usr/zookeeper/data/myid
echo 1 > /myhome/usr/zookeeper/data/myid
export HADOOP_PID_DIR=/myhome/usr/hadoop/hdfs/pid
export HADOOP_LOG_DIR=/myhome/usr/hadoop/logs
export HADOOP_SECURE_DN_USER=/myhome/usr/hadoop/tmp/
export HADOOP_HDFS_USER=user
8. 安装JDK,配置环境变量等
vim /etc/profile
BASE_HOME=/myhome/usr
JAVA_HOME=/usr/java/jdk1.8.0_20
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
M3_HOME=$BASE_HOME/maven
PATH=$PATH:$M3_HOME/bin
ANT_HOME=$BASE_HOME/ant
PATH=$PATH:$ANT_HOME/bin
FINDBUGS_HOME=$BASE_HOME/findbugs
PATH=$PATH:$FINDBUGS_HOME/bin
PROTOBUF_HOME=$BASE_HOME/protobuf
PATH=$PATH:$PROTOBUF_HOME/bin
ZOOKEEPER_HOME=$BASE_HOME/zookeeper
PATH=$PATH:$ZOOKEEPER_HOME/bin
HADOOP_HOME=$BASE_HOME/hadoop
HADOOP_CLASSPAT=$HADOOP_HOME/lib
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
HBASE_HOME=$BASE_HOME/hbase
PATH=$PATH:$HBASE_HOME/bin
#SQOOP_HOME=$BASE_HOME/sqoop
#PATH=$PATH:$SQOOP_HOME/bin
#PIG_HOME=$BASE_HOME/pig
#PATH=$PATH:$PIG_HOME/bin
#HIVE_HOME=$BASE_HOME/hive
#PATH=$PATH:$HIVE_HOME/bin
#VIRO_HOME=$BASE_HOME/viro
#PATH=$PATH:$VIRO_HOME/bin
#JBOSS_HOME=$BASE_HOME/jboss
#PATH=$PATH:$JBOSS_HOME/bin
#CATALINA_HOME=$BASE_HOME/tomcat
#PATH=$PATH:$CATALINA_HOME/bin
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOMD=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HBASE_CONF_DIR=$HBASE_HOME/hbase/conf
#export PIG_HADOOP_VERSION=20
#export PIG_CLASSPATH=$HADOOP_HOME/hadoop/ conf
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export HBASE_HOME
export JAVA_HOME
export CLASSPATH
export M3_HOME
export ANT_HOME
export FINDBUGS_HOME
export PROTOBUF_HOME
export HADOOP_HOME
export ZOOKEEPER_HOME
#export SQOOP_HOME
#export PIG_HOME
#export HIVE_HOME
#export VIRO_HOME
export PATH
9. 软件准备,下载,解压,编译,建目录等------(注意指定版本)
1. jdk
2. hadoop(有原码修改)
3. hbase
4. zookeeper
5. redis
5. storm
5. kafka
5. scala
core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为masters -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value>
</property>
<!-- 指定hadoop临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/myhome/usr/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>ture</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
<!-- 指定zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>root04:2181,root05:2181,root06:2181,root07:2181,root08:2181</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为masters,需要和core-site.xml中的保持一致-->
<property>
<name>dfs.nameservices</name>
<value>masters,ns1,ns2,ns3</value>
</property>
<!-- Master下面有两个NameNode,分别是Master,Slave1 -->
<property>
<name>dfs.ha.namenodes.masters</name>
<value>root01,root02</value>
</property>
<!-- Master的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.masters.root01</name>
<value>root01:9000</value>
</property>
<!-- Master的http通信地址-->
<property>
<name>dfs.namenode.http-address.masters.root01</name>
<value>root01:50070</value>
</property>
<!-- Slave1的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.masters.root02</name>
<value>root02:9000</value>
</property>
<!-- Slave1的http通信地址-->
<property>
<name>dfs.namenode.http-address.masters.root02</name>
<value>root02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置-->
<property>
<name>dfs.namenode.shared.edits.dir</name> <value>qjournal://root04:2181,root05:2181,root06:2181,root07:2181,root08:2181/masters</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/myhome/usr/hadoop/journal/</value>
</property>
<!-- 开启NameNode失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>root01:10020</value>
<description>MapReduce JobHistoryServer IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>root01:19888</value>
<description>MapReduce JobHistoryServer Web UI host:port</description>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- 开启RM高可靠-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_HA_ID</value>
</property>
<!-- 指定RM的名字-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>root02</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>root03</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>
<!-- 指定zk集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>root04:2181,root05:2181,root06:2181,root07:2181,root08:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
slaves
root04
root05
root06
..
ssh root03
cd /myhome/usr
./runzk.sh “/myhome/usr/zookeeper/zkServer.sh start”
./runzk.sh “/myhome/usr/zookeeper/zkServer.sh status”
./runzk.sh “/myhome/usr/hadoop/sbin/hadoop-daemon.sh start journalnode”
////////////////
hdfs namenode -format
////////////////
hdfs zkfc -formatZK
./runzk.sh “${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager”
hadoop-daemon.sh start namenode
hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://root01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>root01</value>
</property>
<property>
<name>dfs.replication</name>
<value>5</value>
</property>
./runzoohadoophbasestart.sh ./runzoohadoophbasestop.sh 启动Hadoop集群:
./runall.sh "rm -rf /myhome/usr/hbase/logs/*"
./runall.sh "rm -rf /myhome/usr/hadoop/logs/*"
./runall.sh "rm -rf /myhome/usr/hadoop/hdfs/*"
Step1 :
在各个JournalNode节点上,输入以下命令启动journalnode服务:
sbin/hadoop-daemon.sh start journalnode
hadoop-daemon.sh start journalnode
cd /myhome
./runzk.sh "/myhome/usr/zookeeper/bin/zkServer.sh start"
./runzk.sh "/myhome/usr/hadoop/sbin/hadoop-daemon.sh start journalnode"
Step2:
在[nn1]上,对其进行格式化,并启动:
hdfs namenode -format
hdfs zkfc -formatZK
hadoop-daemon.sh start namenode
Step3:
ssh zjenterprise02
在[nn2]上,同步nn1的元数据信息:
hdfs namenode -bootstrapStandby
Step4:
启动[nn2]:
sbin/hadoop-daemon.sh start namenode
exit
经过以上四步操作,nn1和nn2均处理standby状态
Step5: ssh zjenterprise01
将[nn1]切换为Active
hdfs haadmin -transitionToActive --forcemanual zjenterprise01
hdfs haadmin -getServiceState zjenterprise01
hdfs haadmin -transitionToActive nn1
ssh zjenterprise02 '/myhome/usr/hadoop/bin/hdfs haadmin -transitionToActive --forcemanual zjenterprise01'
ssh zjenterprise02 '/myhome/usr/hadoop/bin/hdfs haadmin -getServiceState zjenterprise01'
Step6:
在[nn1]上,启动所有datanode
sbin/hadoop-daemons.sh start datanode
关闭Hadoop集群:
在[nn1]上,输入以下命令
sbin/stop-dfs.sh
解决办法
修改core-site.xml中的ipc参数
<property>
<name>ipc.client.connect.max.retries</name>
<value>20</value>
<description>
Indicates the number of retries a clientwill make to establisha server connection.
</description>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>5000</value>
<description>
Indicates the number of milliseconds aclient will wait for before retrying to establish a server connection.
</description>
</property>