设为首页 收藏本站
查看: 783|回复: 0

[经验分享] Spark On Yarn(HDFS HA)详细配置

[复制链接]

尚未签到

发表于 2019-1-30 11:51:43 | 显示全部楼层 |阅读模式
######################################################################################################

  一、服务器分布及相关说明
  ######################################################################################################
  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

  

  2HadoopHDFS HA)总体架构

  

  ######################################################################################################
  二、基础环境部署
  ######################################################################################################
  1JDK安装
  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
  

  =========================================================================================
  2Scala安装
  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
  

  =========================================================================================
  3SSH免密码登录
  
  可参考文章:
  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集群部署
  ######################################################################################################
  1ZooKeeper安装
  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
  

  =========================================================================================
  2ZooKeeper配置与启动
  # 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

  

  ######################################################################################################
  四、HadoopHDFS HA)集群部署
  ######################################################################################################
  1hadoop环境安装
  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}
  

  =========================================================================================
  2core.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

  

  =========================================================================================
  3hdfs-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

  

  =========================================================================================
  4mapred-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

  

  =========================================================================================
  5yarn-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.shmapred-env.shyarn-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节点(namenode1namenode2)上执行
  # cd /usr/local/hadoop && sbin/hadoop-daemon.shstart zkfc

  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (8)、启动所有的DataNode节点(datanode1datanode2
  # cd /usr/local/hadoop && sbin/hadoop-daemon.sh start datanode

  

  ----------------------------------------------------------------------------------------------------------------------------------------------
  (9)、启动Yarnnamenode1
  # 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)HDFSHA功能测试
  切换前的状态:



  

  # 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集群部署
  ######################################################################################################
  1Spark安装与配置
  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”中的环境变量设置:

  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669590-1-1.html 上篇帖子: Spark 读取Hbase表数据并实现类似groupByKey操作 下篇帖子: 记录一则Spark读写和Lost Excutor错误的分析和解决过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表