xinxuaw231 发表于 2019-1-30 11:51:43

Spark On Yarn(HDFS HA)详细配置

######################################################################################################

  一、服务器分布及相关说明
  ######################################################################################################
  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)总体架构
http://s3.运维网.com/wyfs02/M00/12/7A/wKiom1MIvlDSBD-qAAG9vKKqAvE067.jpg
  

  ######################################################################################################
  二、基础环境部署
  ######################################################################################################
  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
http://s3.运维网.com/wyfs02/M00/12/7A/wKioL1MIvv6i5q7kAACZ4VV5Ezk922.jpg
  

  # ./bin/zkCli.sh -server localhost:2181
http://s3.运维网.com/wyfs02/M01/12/7A/wKioL1MIvzyRnPW4AAShDeH9pxU408.jpg
  测试zookeeper集群是否建立成功,如无报错表示集群创建成功
  

  # bin/zkServer.sh status
http://s3.运维网.com/wyfs02/M00/12/7A/wKiom1MIv5zzb9NqAACTecwASew063.jpg
  

  ######################################################################################################
  四、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
http://s3.运维网.com/wyfs02/M00/12/7A/wKioL1MIwEei5dweAAB3R1vMEIc859.jpg
  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (3)、格式化主NameNode节点(namenode1)
  # hdfs namenode -format
  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (4)、启动主NameNode节点
  # cd /usr/local/hadoop && sbin/hadoop-daemon.sh start namenode
http://s3.运维网.com/wyfs02/M02/12/7A/wKiom1MIwK6TLVgJAACBbcEggKA655.jpg
  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (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
http://s3.运维网.com/wyfs02/M00/12/7A/wKiom1MIwODwBevDAACjb7im8qQ180.jpg
  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (8)、启动所有的DataNode节点(datanode1、datanode2)
  # cd /usr/local/hadoop && sbin/hadoop-daemon.sh start datanode
http://s3.运维网.com/wyfs02/M00/12/7A/wKioL1MIwP6SG-KiAACIBsIvTIk271.jpg
  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (9)、启动Yarn(namenode1)
  # cd /usr/local/hadoop && sbin/start-yarn.sh
http://s3.运维网.com/wyfs02/M02/12/7A/wKiom1MIwWDjmObIAACgTp2DRFg603.jpg
  

  主NameNode节点上的信息:
http://s3.运维网.com/wyfs02/M00/12/7A/wKiom1MIwYqhl34YAACiqH9LRl4983.jpg
  

  DataNode节点上的信息:
http://s3.运维网.com/wyfs02/M02/12/7A/wKioL1MIwZSRTJUAAAB8zD6pmrw648.jpg
  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (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功能测试
  切换前的状态:
http://s3.运维网.com/wyfs02/M00/12/7A/wKioL1MIwdDiElH9AAFrF2rdxYA952.jpg
http://s3.运维网.com/wyfs02/M02/12/7A/wKiom1MIwi2RGtMIAAGc5mTKnYM768.jpg
http://s3.运维网.com/wyfs02/M01/12/7A/wKioL1MIwi7hpwWaAACb0lz9mWU004.jpg
  

  # kill -9 11466
http://s3.运维网.com/wyfs02/M00/12/7A/wKiom1MIwnqT92qZAACF8sBpT3g016.jpg
  

  # cd /usr/local/hadoop && sbin/hadoop-daemon.sh start namenode
  

  切换后的状态:
http://s3.运维网.com/wyfs02/M01/12/7A/wKiom1MIwp2y8lv6AAGGDB93OLk752.jpg
http://s3.运维网.com/wyfs02/M00/12/7A/wKioL1MIwpmwp7H3AAGYbtXwEmQ578.jpg
  -----------------------------------------------------------------------------------------------------------------------------------------------
  (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)、最终的目录结构及相关配置
  目录结构:
http://s3.运维网.com/wyfs02/M01/12/7A/wKioL1MIw0Dzp_dHAAMdxJzQ7Lg319.jpg
  

  配置文件“/etc/profile”中的环境变量设置:
http://s3.运维网.com/wyfs02/M00/12/7A/wKiom1MIw5Si87QkAAKdKXz4xxE592.jpg
  

  

  




页: [1]
查看完整版本: Spark On Yarn(HDFS HA)详细配置