######################################################################################################
一、服务器分布及相关说明
######################################################################################################
1、服务器角色
服务角色/服务器
| 172.18.35.29(namenode1)
| 172.18.35.30(namenode2)
| 172.18.34.232(datanode1)
| 172.18.24.136(datanode2)
| NameNode
| YES
| YES
| NO
| NO
| DataNode
| NO
| NO
| YES
| YES
| JournalNode
| YES
| YES
| YES
| NO
| ZooKeeper
| YES
| YES
| YES
| NO
| ZKFC
| YES
| YES
| NO
| NO
|
2、Hadoop(HDFS HA)总体架构
######################################################################################################
二、基础环境部署
######################################################################################################
1、JDK安装
http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-x64.tar.gz
# tar xvzf jdk-7u45-linux-x64.tar.gz -C/usr/local
# cd /usr/local
# ln -s jdk1.7.0_45 jdk
# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile
=========================================================================================
2、Scala安装
http://www.scala-lang.org/files/archive/scala-2.10.3.tgz
# tar xvzf scala-2.10.3.tgz -C/usr/local
# cd /usr/local
# ln -s scala-2.10.3 scala
# vim /etc/profile
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin
# source /etc/profile
=========================================================================================
3、SSH免密码登录
可参考文章:
http://blog.csdn.net/codepeak/article/details/14447627
......
=========================================================================================
4、主机名设置
# vim /etc/hosts
172.18.35.29 namenode1
172.18.35.30 namenode2
172.18.34.232 datanode1
172.18.24.136 datanode2
######################################################################################################
三、ZooKeeper集群部署
######################################################################################################
1、ZooKeeper安装
http://apache.dataguru.cn/zookeeper/stable/zookeeper-3.4.5.tar.gz
# tar xvzf zookeeper-3.4.5.tar.gz -C/usr/local
# cd /usr/local
# ln -s zookeeper-3.4.5 zookeeper
# vim /etc/profile
export ZOO_HOME=/usr/local/zookeeper
export ZOO_LOG_DIR=/data/hadoop/zookeeper/logs
export PATH=$PATH:$ZOO_HOME/bin
# source /etc/profile
=========================================================================================
2、ZooKeeper配置与启动
# mkdir -p/data/hadoop/zookeeper/{data,logs}
# vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/hadoop/zookeeper/data
clientPort=2181
server.1=172.18.35.29:2888:3888
server.2=172.18.35.30:2888:3888
server.3=172.18.34.232:2888:3888
在172.18.35.29上执行:
echo 1 > /data/hadoop/zookeeper/data/myid
在172.18.35.30 上执行:
echo 2 > /data/hadoop/zookeeper/data/myid
在172.18.34.232 上执行:
echo 3 > /data/hadoop/zookeeper/data/myid
## 启动ZooKeeper集群
# cd /usr/local/zookeeper && bin/zkServer.sh start
# ./bin/zkCli.sh -server localhost:2181
测试zookeeper集群是否建立成功,如无报错表示集群创建成功
# bin/zkServer.sh status
######################################################################################################
四、Hadoop(HDFS HA)集群部署
######################################################################################################
1、hadoop环境安装
Hadoop的源码编译部分可以参考:
http://sofar.blog.运维网.com/353572/1352713
# tar xvzf hadoop-2.2.0.tgz -C/usr/local
# cd /usr/local
# ln -s hadoop-2.2.0 hadoop
# vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_PID_DIR=/data/hadoop/pids
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="$HADOOP_OPTS-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
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 JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# mkdir -p /data/hadoop/{pids,storage}
# mkdir -p/data/hadoop/storage/{hdfs,tmp,journal}
# mkdir -p/data/hadoop/storage/tmp/nodemanager/{local,remote,logs}
# mkdir -p/data/hadoop/storage/hdfs/{name,data}
=========================================================================================
2、core.site.xml配置
# vim/usr/local/hadoop/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://appcluster
io.file.buffer.size
131072
hadoop.tmp.dir
file:/data/hadoop/storage/tmp
ha.zookeeper.quorum
172.18.35.29:2181,172.18.35.30:2181,172.18.34.232:2181
ha.zookeeper.session-timeout.ms
2000
fs.trash.interval
4320
hadoop.http.staticuser.use
root
hadoop.proxyuser.hadoop.hosts
*
hadoop.proxyuser.hadoop.groups
*
hadoop.native.lib
true
=========================================================================================
3、hdfs-site.xml配置
# vim/usr/local/hadoop/etc/hadoop/hdfs-site.xml
dfs.namenode.name.dir
file:/data/hadoop/storage/hdfs/name
dfs.datanode.data.dir
file:/data/hadoop/storage/hdfs/data
dfs.replication
2
dfs.blocksize
67108864
dfs.datanode.du.reserved
53687091200
dfs.webhdfs.enabled
true
dfs.permissions
false
dfs.permissions.enabled
false
dfs.nameservices
appcluster
dfs.ha.namenodes.appcluster
nn1,nn2
dfs.namenode.rpc-address.appcluster.nn1
namenode1:8020
dfs.namenode.rpc-address.appcluster.nn2
namenode2:8020
dfs.namenode.servicerpc-address.appcluster.nn1
namenode1:53310
dfs.namenode.servicerpc-address.appcluster.nn2
namenode2:53310
dfs.namenode.http-address.appcluster.nn1
namenode1:8080
dfs.namenode.http-address.appcluster.nn2
namenode2:8080
dfs.datanode.http.address
0.0.0.0:8080
dfs.namenode.shared.edits.dir
qjournal://namenode1:8485;namenode2:8485;datanode1:8485/appcluster
dfs.client.failover.proxy.provider.appcluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence(root:36000)
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_dsa_nn1
dfs.ha.fencing.ssh.connect-timeout
30000
dfs.journalnode.edits.dir
/data/hadoop/storage/hdfs/journal
dfs.ha.automatic-failover.enabled
true
ha.failover-controller.cli-check.rpc-timeout.ms
60000
ipc.client.connect.timeout
60000
dfs.image.transfer.bandwidthPerSec
41943040
dfs.namenode.accesstime.precision
3600000
dfs.datanode.max.transfer.threads
4096
=========================================================================================
4、mapred-site.xml配置
# vim/usr/local/hadoop/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
namenode1:10020
mapreduce.jobhistory.webapp.address
namenode1:19888
=========================================================================================
5、yarn-site.xml配置
# vim/usr/local/hadoop/etc/hadoop/yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.resourcemanager.scheduler.address
namenode1:8030
yarn.resourcemanager.resource-tracker.address
namenode1:8031
yarn.resourcemanager.address
namenode1:8032
yarn.resourcemanager.admin.address
namenode1:8033
yarn.nodemanager.address
namenode1:8034
yarn.nodemanager.webapp.address
namenode1:80
yarn.resourcemanager.webapp.address
namenode1:80
yarn.nodemanager.local-dirs
${hadoop.tmp.dir}/nodemanager/local
yarn.nodemanager.remote-app-log-dir
${hadoop.tmp.dir}/nodemanager/remote
yarn.nodemanager.log-dirs
${hadoop.tmp.dir}/nodemanager/logs
yarn.nodemanager.log.retain-seconds
604800
yarn.nodemanager.resource.cpu-vcores
16
yarn.nodemanager.resource.memory-mb
50320
yarn.scheduler.minimum-allocation-mb
256
yarn.scheduler.maximum-allocation-mb
40960
yarn.scheduler.minimum-allocation-vcores
1
yarn.scheduler.maximum-allocation-vcores
8
【注意:上面的第68`96行部分,需要根据服务器的硬件配置进行修改】
=========================================================================================
6、配置hadoop-env.sh、mapred-env.sh、yarn-env.sh【在开头添加】
文件路径:
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
/usr/local/hadoop/etc/hadoop/mapred-env.sh
/usr/local/hadoop/etc/hadoop/yarn-env.sh
添加内容:
export JAVA_HOME=/usr/local/jdk
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_PID_DIR=/data/hadoop/pids
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="$HADOOP_OPTS-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
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 JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
=========================================================================================
7、数据节点配置
# vim /usr/local/hadoop/etc/hadoop/slaves
datanode1
datanode2
=========================================================================================
8、集群启动
(1)、在namenode1上执行,创建命名空间
# hdfs zkfc -formatZK
----------------------------------------------------------------------------------------------------------------------------------------------
(2)、在对应的节点上启动日志程序journalnode
# cd /usr/local/hadoop && ./sbin/hadoop-daemon.sh start journalnode
----------------------------------------------------------------------------------------------------------------------------------------------
(3)、格式化主NameNode节点(namenode1)
# hdfs namenode -format
----------------------------------------------------------------------------------------------------------------------------------------------
(4)、启动主NameNode节点
# cd /usr/local/hadoop && sbin/hadoop-daemon.sh start namenode
----------------------------------------------------------------------------------------------------------------------------------------------
(5)、格式备NameNode节点(namenode2)
# hdfs namenode -bootstrapStandby
----------------------------------------------------------------------------------------------------------------------------------------------
(6)、启动备NameNode节点(namenode2)
# cd /usr/local/hadoop && sbin/hadoop-daemon.sh start namenode
----------------------------------------------------------------------------------------------------------------------------------------------
(7)、在两个NameNode节点(namenode1、namenode2)上执行
# cd /usr/local/hadoop && sbin/hadoop-daemon.shstart zkfc
----------------------------------------------------------------------------------------------------------------------------------------------
(8)、启动所有的DataNode节点(datanode1、datanode2)
# cd /usr/local/hadoop && sbin/hadoop-daemon.sh start datanode
----------------------------------------------------------------------------------------------------------------------------------------------
(9)、启动Yarn(namenode1)
# cd /usr/local/hadoop && sbin/start-yarn.sh
主NameNode节点上的信息:
DataNode节点上的信息:
----------------------------------------------------------------------------------------------------------------------------------------------
(10)、测试Yarn是否可用
# hdfs dfs -put/usr/local/hadoop/etc/hadoop/yarn-site.xml /tmp
# hadoop jar/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jarwordcount /tmp/yarn-site.xml /mytest
-----------------------------------------------------------------------------------------------------------------------------------------------
(11)、HDFS的HA功能测试
切换前的状态:
# kill -9 11466
# cd /usr/local/hadoop && sbin/hadoop-daemon.sh start namenode
切换后的状态:
-----------------------------------------------------------------------------------------------------------------------------------------------
(12)、后续维护
HDFS的关闭与启动:
# cd /usr/local/hadoop && sbin/stop-dfs.sh
# cd /usr/local/hadoop && sbin/start-dfs.sh
YARN的关闭与启动:
# cd /usr/local/hadoop && sbin/stop-yarn.sh
# cd /usr/local/hadoop && sbin/start-yarn.sh
【注意】
需要在NameNode节点上执行。
######################################################################################################
五、Spark集群部署
######################################################################################################
1、Spark安装与配置
Spark的源码编译请参考:
http://sofar.blog.运维网.com/353572/1358457
# tar xvzf spark-0.9.0-incubating.tgz -C/usr/local
# cd /usr/local
# ln -s spark-0.9.0-incubating spark
# vim /etc/profile
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
# source /etc/profile
# cd /usr/local/spark/conf
# mkdir -p /data/spark/tmp
----------------------------------------------------------------------------------------------------------------------------------------------
# vim spark-env.sh
export JAVA_HOME=/usr/local/jdk
export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop
SPARK_LOCAL_DIR="/data/spark/tmp"
SPARK_JAVA_OPTS="-Dspark.storage.blockManagerHeartBeatMs=60000-Dspark.local.dir=$SPARK_LOCAL_DIR -XX:+PrintGCDetails -XX:+PrintGCTi
meStamps -Xloggc:$SPARK_HOME/logs/gc.log -XX:+UseConcMarkSweepGC-XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFracti
on=60"
----------------------------------------------------------------------------------------------------------------------------------------------
# vim slaves
datanode1
datanode2
# cd /usr/local/spark && sbin/start-all.sh
=========================================================================================
2、相关测试
(1)、本地模式
# bin/run-exampleorg.apache.spark.examples.SparkPi local
----------------------------------------------------------------------------------------------------------------------------------------------
(2)、普通集群模式
# bin/run-exampleorg.apache.spark.examples.SparkPi spark://namenode1:7077
# bin/run-exampleorg.apache.spark.examples.SparkLR spark://namenode1:7077
# bin/run-exampleorg.apache.spark.examples.SparkKMeans spark://namenode1:7077file:/usr/local/spark/data/kmeans_data.txt 2 1
----------------------------------------------------------------------------------------------------------------------------------------------
(3)、结合HDFS的集群模式
# hadoop fs -put README.md .
# MASTER=spark://namenode1:7077bin/spark-shell
scala> val file =sc.textFile("hdfs://namenode1:9000/user/root/README.md")
scala> val count = file.flatMap(line=> line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)
scala> count.collect()
scala> :quit
----------------------------------------------------------------------------------------------------------------------------------------------
(4)、基于YARN模式
#SPARK_JAR=assembly/target/scala-2.10/spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar\
bin/spark-classorg.apache.spark.deploy.yarn.Client \
--jarexamples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar \
--classorg.apache.spark.examples.SparkPi \
--args yarn-standalone \
--num-workers 3 \
--master-memory 4g \
--worker-memory 2g \
--worker-cores 1
----------------------------------------------------------------------------------------------------------------------------------------------
(5)、最终的目录结构及相关配置
目录结构:
配置文件“/etc/profile”中的环境变量设置:
|