你好,游客 登录 注册 搜索
背景:
阅读新闻

[投稿]spark1.6+hadoop2.6集群HA搭建与参数解析

[日期:2016-04-05] 来源:数盟   作者: [字体: ]

  废话就不多说了,直接开始啦~

  安装环境变量:

  使用linx下的解压软件,解压找到里面的install 或者 ls 运行这个进行安装

  yum install gcc

  yum install gcc-c++

  安装make,这个是自动编译源码的工具

  yum install make

  yum install autoconfautomake libtool cmake

  封装了底层的终端功能

  yum install ncurses-devel

  OpenSSL 是一个软件包,用于支持SSL传输协议的软件包

  yum install openssl-devel

  git就不用多说了

  yum install git git-svn git-email git-gui gitk

  安装protoc(需用root用户), 作用是把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议格式等

  1 tar -xvf protobuf-2.5.0.tar.bz2

  2 cd protobuf-2.5.0

  3 ./configure –prefix=/opt/protoc/

  4 make && make install

  安装wget (以后备用~)

  sudo yum -y install wget

  二、增加用户组

  groupadd hadoop 添加一个组

  useradd hadoop -g hadoop 添加用户

  三、编译hadoop

  mvn clean package -Pdist,native -DskipTests -Dtar

  编译完的hadoop在 /home/hadoop/ocdc/hadoop-2.6.0-src/hadoop-dist/target 路径下

  四、各节点配置hosts文件 vi/etc/hosts

  10.1.245.244 master

  10.1.245.243 slave1

  10.1.245.242 slave2

  命令行输入 hostname master

  ssh到其他主机 相应输入 hostName xxxx

  五、各节点免密码登录:

  各节点 免密码登录

  ssh-keygen -t rsa

  cd /root/.ssh/

  ssh-copy-id master

  将生成的公钥id_rsa.pub 内容追加到authorized_keys(执行命令:cat id_rsa.pub >> authorized_keys)

  时间等效性同步

  ssh master date; ssh slave1 date;ssh slave2 date;

  六、hadoop路径下创建相应目录(namenode,datenode 等信息存放处)

  Mkdir data

  (在data路径下创建目录)

  mkdir yarn

  mkdir jn

  mkdir current

  (hadoop路径下)

  mkdir name

  (jn目录下)

  mkdir streamcluster

  七、Zookeeper集群配置:

  解压zookeeper

  Tar zxvf zookeeper-3.4.6.tar.gz

  修改temp文件为可用

  Cp zoo_sample.cfg zoo.cfg

  修改zoo.cfg文件:

  # The number of milliseconds of each tick

  tickTime=2000

  # The number of ticks that the initial

  # synchronization phase can take

  initLimit=10

  # The number of ticks that can pass between

  # sending a request and getting an acknowledgement

  syncLimit=5

  # the directory where the snapshot is stored.

  # do not use /tmp for storage, /tmp here is just

  # example sakes.

  dataDir=/home/hadoop/ocdc/zookeeper-3.4.6/data

  dataLogDir=/home/hadoop/ocdc/zookeeper-3.4.6/logs

  # the port at which the clients will connect

  clientPort=2183

  # the maximum number of client connections.

  # increase this if you need to handle more clients

  #maxClientCnxns=60

  #

  # Be sure to read the maintenance section of the

  # administrator guide before turning on autopurge.

  #

  # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

  #

  # The number of snapshots to retain in dataDir

  #autopurge.snapRetainCount=3

  # Purge task interval in hours

  # Set to “0” to disable auto purge feature

  #autopurge.purgeInterval=1

  #写入节点ip与端口

  server.1=master:2898:3898

  server.2=slave1:2898:3898

  server.3=slave2:2898:3898

  在zookeeper目录下:

  mkdir data

  vi myid (写入id为1,)

  拷贝zookeeper到各个目录下(将slave1中的myid改为2,slave2中的myid改为3….)

  随后在 bin目录下 逐个启动zookeeper

  ./zkServer.sh start

  ./zkServer.sh status (查看状态)

  八、hadoop相关配置文件及参数说明

  core-site.xml

  默认文件系统的名称,如果是HA模式,不加端口

  

  

  fs.defaultFS

  hdfs:// streamcluster

  

  io.file.buffer.size都被用来设置缓存的大小,较大的缓存可以提供高效的数据传输,但太大也会造成更大的内存消耗和延迟

  

  io.file.buffer.size

  131072

  

  hadoop文件系统依赖的基本配置,很多配置路径都依赖它,它的默认位置在/tmp/{$user}下面

  

  hadoop.tmp.dir

  /home/hadoop/ocdc/hadoop-2.6.0/tmp

  Abasefor other temporary directories.

  

  

  hadoop.proxyuser.spark.hosts

  *

  

  

  hadoop.proxyuser.spark.groups

  *

  

  

  hdfs-site.xml

  

  集群的逻辑名,要注意的是,如果为HA模式,需要与core-site.xml中的fs.defaultFS名一致

  

  dfs.nameservices

  streamcluster

  

  datanode的端口,运行tcp/ip服务器以支持块传输,默认为0.0.0.0:50010

  

  dfs.datanode.address

  0.0.0.0:50012

  

  datanode的http服务器地址和端口

  

  dfs.datanode.http.address

  0.0.0.0:50077

  

  datanode的rpc服务器的地址和端口, 提供进程间交互通信

  

  dfs.datanode.ipc.address

  0.0.0.0:50022

  

  dfs.ha.namenodes.[nameservice ID]在名称服务中每一个nameNode的唯一标识符,streamcluster为之前配置的nameservice的名称,这里配置高可用,所以配置两个NN

  

  dfs.ha.namenodes.streamcluster

  nn1,nn2

  

  由namenode存储元数据的目录地址

  

  dfs.namenode.name.dir

  /home/hadoop/ocdc/hadoop-2.6.0/name

  true

  

  由datanode存放数据块的目录列表

  

  dfs.datanode.data.dir

  /home/hadoop/ocdc/hadoop-2.6.0/data

  true

  

  由写操作所需要创建的最小副本数目

  

  dfs.replication

  3

  

  如果是 true,则打开权限系统

  

  dfs.permission

  true

  

  设置成true, 通过知道每个block所在磁盘,可以在调度cpu资源时让不同的cpu读不同的磁盘,避免查询内和查询间的IO竞争

  

  dfs.datanode.hdfs-blocks-metadata.enabled

  true

  

  是否在HDFS中开启权限检查。

  

  dfs.permissions.enabled

  false

  

  HA模式下该参数为streamcluster中namenode1节点对外服务的RPC地址

  

  dfs.namenode.rpc-address.streamcluster.nn1

  master:8033

  

  HA模式下该参数为streamcluster中namenode1节点对外服务的RPC地址

  

  dfs.namenode.rpc-address.streamcluster.nn2

  slave1:8033

  

  HA模式下该参数为streamcluster中namenode1节点对外服务的HTTP地址

  

  dfs.namenode.http-address.streamcluster.nn1

  master:50083

  

  HA模式下该参数为streamcluster中namenode1节点对外服务的HTTP地址

  

  dfs.namenode.http-address.streamcluster.nn2

  slave1:50083

  

  设置的为journalNode的地址,Activity状态中的Namenode会将edits的Log写入JournalNode,而standby状态中的Namenode会读取这些edits log.

  

  dfs.namenode.shared.edits.dir

  qjournal://master:8489;slave1:8489;slave2:8489/streamcluster

  

  JournalNode 所在节点上的一个目录,用于存放 editlog 和其他状态信息。

  

  dfs.journalnode.edits.dir

  /home/hadoop/ocdc/hadoop-2.6.0/data/jn

  

  journalNode RPC服务地址和端口

  

  dfs.journalnode.rpc-address

  0.0.0.0:8489

  

  journalNode HTTP服务地址和端口

  

  dfs.journalnode.http-address

  0.0.0.0:8484

  

  此参数为客户端与activity状态下的Namenode进行交互的java实现类,DFS客户端通过该类寻找当前activity的Namenode

  

  dfs.client.failover.proxy.provider.streamcluster

  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

  

  使HA模式下不会同时出现两个master,不允许出现两个activity状态下的Namenode

  

  dfs.ha.fencing.methods

  shell(/bin/true)

  

  SSH的超时时间设置,倘若超过此时间,则认为执行失败.

  

  dfs.ha.fencing.ssh.connect-timeout

  10000

  

  指定streamcluster的两个NameNode共享edits文件目录时,使用的JournalNode集群信息

  

  dfs.ha.automatic-failover.enabled

  true

  

  每个datanode任一时刻可以打开的文件数量上限。

  

  dfs.datanode.max.xcievers

  4096

  

  DataNode传送数据出入的最大线程数,等同于dfs.datanode.max.xcievers。

  

  dfs.datanode.max.transfer.threads

  4096

  

  块的字节大小

  

  dfs.blocksize

  67108864

  

  一般原则是将其设置为集群大小的自然对数乘以20,即20logN, NameNode有一个工作线程池用来处理客户端的远程过程调用及集群守护进程的调用。处理程序数量越多意味着要更大的池来处理来自不同DataNode的并发心跳以及客户端并发的元数据操作。

  

  dfs.namenode.handler.count

  20

  

  

  

  ha.zookeeper.quorum

  master:2183,slave1:2183,slave2:2183

  

  

  yarn-site.xml

  

  

  

  NodeManager的心跳间隔

  

  yarn.resourcemanager.connect.retry-interval.ms

  2000

  

  是否启用RM HA,默认为false(不启用)。这里设置为启用。

  

  yarn.resourcemanager.ha.enabled

  true

  

  是否启用自动故障转移。默认情况下,在启用HA时,启用自动故障转移。

  

  yarn.resourcemanager.ha.automatic-failover.enabled

  true

  

  启用内置的自动故障转移。默认情况下,在启用HA时,启用内置的自动故障转移。

  

  yarn.resourcemanager.ha.automatic-failover.embedded

  true

  

  集群的ID,确保ResourceManager不会为成为其他集群的Activity活跃状态。

  

  yarn.resourcemanager.cluster-id

  yarn-rm-cluster

  

  HA下两个ResourceManager的逻辑名称

  

  yarn.resourcemanager.ha.rm-ids

  rm1,rm2

  

  用于标识ResourceManager,这里要注意一点,HA备用的RM的服务器需要修改为rm2

  

  yarn.resourcemanager.ha.id

  rm1

  

  启用重启ResourceManager的功能,默认为false

  

  yarn.resourcemanager.recovery.enabled

  true

  

  用于状态存储的类,可以设置为

  org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore,基于Hadoop文件系统的实现,这里的设置是基于ZooKeeper的实现

  

  yarn.resourcemanager.store.class

  org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

  

  存储RM状态的ZooKeeper Znode全路径。

  

  yarn.resourcemanager.zk.state-store.address

  master:2183,slave1:2183,slave2:2183

  

  被RM用于状态存储的ZooKeeper服务器的主机:端口号

  

  yarn.resourcemanager.zk-address

  master:2183,slave1:2183,slave2:2183

  

  Scheduler失联等待的时间

  

  yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms

  5000

  

  ResourceManager1的地址和端口

  

  yarn.resourcemanager.address.rm1

  master:23140

  

  ResourceManager1调度器地址:端口

  

  yarn.resourcemanager.scheduler.address.rm1

  master:23130

  

  ResourceManager 1对外web ui地址。可通过该地址在浏览器中查看集群各类信息。

  

  yarn.resourcemanager.webapp.address.rm1

  master:23188

  

  NodeManager通过该地址向ResourceManager1汇报心跳,领取任务等的地址。

  

  yarn.resourcemanager.resource-tracker.address.rm1

  master:23125

  

  ResourceManager 1对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。

  

  yarn.resourcemanager.admin.address.rm1

  master:23141

  

  

  yarn.resourcemanager.ha.admin.address.rm1

  master:23142

  

  HA ResourceManager2相关参数同上 rm1

  

  yarn.resourcemanager.address.rm2

  slave1:23140

  

  HA ResourceManager2相关参数同上 rm1

  

  yarn.resourcemanager.scheduler.address.rm2

   slave1:23130

  

  HA ResourceManager2相关参数同上 rm1

  

  yarn.resourcemanager.webapp.address.rm2

   slave1:23188

  

  HA ResourceManager2相关参数同上 rm1

  

  yarn.resourcemanager.resource-tracker.address.rm2

   slave1:23125

  

  HA ResourceManager2相关参数同上 rm1

  

  yarn.resourcemanager.admin.address.rm2

   slave1:23141

  

  HA ResourceManager2相关参数同上 rm1

  

  yarn.resourcemanager.ha.admin.address.rm2

   slave1:23142

  

  

  localizer IPC

  

  yarn.nodemanager.localizer.address

  0.0.0.0:23344

  

  http服务端口

  

  yarn.nodemanager.webapp.address

  0.0.0.0:23999

  

  通过该配置,用户可以自定义一些服务,例如Map-Reduce的shuffle功能就是采用这种方式实现的,可运行mapReduce程序

  

  yarn.nodemanager.aux-services

  mapreduce_shuffle

  

  之前定义了为mapreduce_shuffle,那么相对应属性的类就定义为org.apache.hadoop.mapred.ShuffleHandle

  

  yarn.nodemanager.aux-services.mapreduce_shuffle.class

  org.apache.hadoop.mapred.ShuffleHandler

  

  NodeManager会通过参数yarn.nodemanager.local-dirs配置一系列目录(磁盘),用于存储Application中间结果(比如MapReduce中Map Task的中间输出结果)

  

  yarn.nodemanager.local-dirs

   /home/hadoop/ocdc/hadoop-2.6.0/data/yarn/local

  

  同上NodeManager配置的日志文件

  

  yarn.nodemanager.log-dirs

   /home/hadoop/ocdc/hadoop-2.6.0/data/yarn/log

  

  MapReduce JobHistory Server Web UI地址。

  

  mapreduce.jobhistory.webapp.address

  0.0.0.0:12345

  

  每个节点可用的最大内存,RM中的两个值不应该超过此值。此数值可以用于计算container最大数目,即:用此值除以RM中的最小容器内存。虚拟内存率,是占task所用内存的百分比,默认值为2.1倍;注意:第一个参数是不可修改的,一旦设置,整个运行过程中不可动态修改,且该值的默认大小是8G,即使计算机内存不足8G也会按着8G内存来使用。

  

  yarn.nodemanager.vmem-pmem-ratio

  2.4

  

  每个节点可用的内存,单位为MB

  

  yarn.nodemanager.resource.memory-mb

  16384

  

  单个任务可申请的最大内存,默认为8192MB

  

  yarn.scheduler.maximum-allocation-mb

  16384

  

  启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。

  

  yarn.resourcemanager.scheduler.class

  org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

  

  为applications配置相应的ClassPath

  

  yarn.application.classpath

  

  $HADOOP_CONF_DIR,

  $HADOOP_COMMON_HOME/share/hadoop/common/*,

  $HADOOP_COMMON_HOME/share/hadoop/common/lib/*,

  $HADOOP_HDFS_HOME/share/hadoop/hdfs/*,

  $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,

  $HADOOP_YARN_HOME/share/hadoop/yarn/*,

  $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*

  

  

  

  mapred-site.xml

  

  配置引擎为yarn,如果要配置Tez则改为yarn-tez. 其中的奥妙在于使用了JDK6+的一个特性ServiceLoader类。其为JDK实现了一个依赖注入的机制。

  

  mapreduce.framework.name

  yarn

  

  mapreduce.jobhistory.webapp.address和mapreduce.jobhistory.address参数配置的主机上对Hadoop历史作业情况经行查看。

  

  mapreduce.jobhistory.address

  master:10020

  

  mapreduce.jobhistory.webapp.address和mapreduce.jobhistory.address参数配置的主机上对Hadoop历史作业情况经行查看。

  

  mapreduce.jobhistory.webapp.address

  master:19888

  

  指定压缩类型,默认是RECORD类型,它会按单个的record压缩,如果指定为BLOCK类型,它将一组record压缩,压缩效果自然是BLOCK好。

  

  mapred.output.compression.type

  BLOCK

  

  

  slaves

  vi slaves

  master1

  slave1

  slave2

  随后将拷贝配置好的hadoop到各个服务器中

  九、启动Hadoop各组件

  启动jounalnode

  ./hadoop-daemon.sh start journalnode

  进行namenode格式化

  ./hadoop namenode -format

  格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,之后通过下面命令,启动namenode进程在namenode2上执行

  sbin/hadoop-daemon.sh start namenode

  完成主备节点同步信息

  ./hdfs namenode –bootstrapStandby

  格式化ZK(在namenode1上执行即可, 这句命令必须手工打上,否则会报错)

  ./hdfs zkfc –formatZK

  启动HDFS(在namenode1上执行)

  ./start-dfs.sh

  启动YARN(在namenode1和namenode2上执行)

  ./start-yarn.sh

  在namenode1上执行${HADOOP_HOME}/bin/yarn rmadmin -getServiceState rm1查看rm1和rm2分别为active和standby状态

  我们在启动hadoop各个节点时,启动namenode和datanode,这个时候如果datanode的storageID不一样,那么会导致如下datanode注册不成功的信息:

  这个时候,我们需要修改指定的datanode的current文件中的相应storageID的值,直接把它删除,这个时候,系统会动态新生成一个storageID,这样再次启动时就不会发生错误了。

  查看端口是否占用

  Netstat-tunlp |grep 22

  查看所有端口

  Netstat -anplut

  十、spark搭建与参数解析

  修改spark-env..sh 增加如下参数(路径根据服务器上的路径修改)

  HADOOP_CONF_DIR=/home/hadoop/ocdc/hadoop-2.6.0/etc/hadoop/

  HADOOP_HOME=/home/hadoop/ocdc/hadoop-2.6.0/

  SPARK_HOME=/home/hadoop/ocdc/spark-1.6.1-bin-hadoop2.6/

  该参数决定了yarn集群中,最多能够同时启动的EXECUTOR的实例个数。

  SPARK_EXECUTOR_INSTANCES=3

  设置每个EXECUTOR能够使用的CPU core的数量。

  SPARK_EXECUTOR_CORES=7

  该参数设置的是每个EXECUTOR分配的内存的数量

  SPARK_EXECUTOR_MEMORY=11G

  该参数设置的是DRIVER分配的内存的大小

  SPARK_DRIVER_MEMORY=11G

  Spark Application在Yarn中的名字

  SPARK_YARN_APP_NAME=”asiainfo.Spark-1.6.0″

  指定在yarn中执行,提交方式为client

  MASTER=yarn-cluster

  修改spark-default.conf文件 (路径根据服务器上的路径修改)

  如果没有适合当前本地性要求的任务可供运行,将跑得慢的任务在空闲计算资源上再度调度的行为,这个参数会引发一些tmp文件被删除的问题,一般设置为false

  spark.speculation false

  如果设置为true,前台用jdbc方式连接,显示的会是乱码

  spark.sql.hive.convertMetastoreParquet false

  应用程序上载到HDFS的复制份数

  spark.yarn.submit.file.replication 3

  Spark application master给YARN ResourceManager 发送心跳的时间间隔(ms)

  spark.yarn.scheduler.heartbeat.interal-ms 5000

  仅适用于HashShuffleMananger的实现,同样是为了解决生成过多文件的问题,采用的方式是在不同批次运行的Map任务之间重用Shuffle输出文件,也就是说合并的是不同批次的Map任务的输出数据,但是每个Map任务所需要的文件还是取决于Reduce分区的数量,因此,它并不减少同时打开的输出文件的数量,因此对内存使用量的减少并没有帮助。只是HashShuffleManager里的一个折中的解决方案。

  spark.shuffle.consolidateFiles true

  用来调整cache所占用的内存大小。默认为0.6。如果频繁发生Full GC,可以考虑降低这个比值,这样RDD Cache可用的内存空间减少(剩下的部分Cache数据就需要通过Disk Store写到磁盘上了),会带来一定的性能损失,但是腾出更多的内存空间用于执行任务,减少Full GC发生的次数,反而可能改善程序运行的整体性能。这要看你的具体业务逻辑,是cache的多还是计算的多。

  spark.storage.memoryFraction 0.3

  一个partition对应着一个task,如果数据量过大,可以调整次参数来减少每个task所需消耗的内存.

  spark.sql.shuffle.partitions 800

  Spark SQL在每次执行次,先把SQL查询编译JAVA字节码。针对执行时间长的SQL查询或频繁执行的SQL查询,此配置能加快查询速度,因为它产生特殊的字节码去执行。但是针对很短的查询,可能会增加开销,因为它必须先编译每一个查询

  spark.sql.codegen true

  我们都知道shuffle默认情况下的文件数据为map tasks * reduce tasks,通过设置其为true,可以使spark合并shuffle的中间文件为reduce的tasks数目。

  spark.shuffle.consolidateFiles true

  相关jar包的加载地址

  spark.driver.extraClassPath /home/hadoop/ocdc/spark-1.6.1-bin-hadoop2.6/lib/mysql-connector-java-5.1.30-bin.jar:/home/hadoop/ocdc/spark-1.6.1-bin-hadoop2.6/lib/datanucleus-api-jdo-3.2.6.jar:/home/hadoop/ocdc/spark-1.6.1-bin-hadoop2.6/lib

  /datanucleus-core-3.2.10.jar:/home/hadoop/ocdc/spark-1.6.1-bin-hadoop2.6/lib/datanucleus-rdbms-3.2.9.jar:/home/hadoop/ocdc/spark-1.6.1-bin-hadoop2.6/lib/ojdbc14-10.2.0.3.jar

  最终:

  Hadoop监控页面(根据yarn-site.xml的参数yarn.resourcemanager.webapp.address.rm1中配置的端口决定的):

  http://10.1.245.244: 23188

  Hadoop namenode监控页面( 根据hdfs-site.xml中配置的参数

  dfs.namenode.http-address.streamcluster.nn1中的端口决定):

  http://10.1.245.244: 50083

  spark thriftserver注册启动:

 





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款