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

[经验分享] hadoop 分布式示例

[复制链接]

尚未签到

发表于 2018-10-29 09:30:04 | 显示全部楼层 |阅读模式
  安装完全分布式Hadoop
  hadoop 2.7 + jdk1.8 + centOS6
  cat /etc/hosts
  10.20.100.101  namenode
  10.20.100.102  datanode1
  10.20.100.103  datanode2
  10.20.100.104  datanode3
  一、JDK环境
  设置JAVA_HOME  HADOOP_HOME 环境变量;
  打通namenode datanode 之间ssh互信;
  # JDK
  export JAVA_HOME=/usr/local/java
  export JRE_HOME=${JAVA_HOME}/jre

  export>  export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
  # hadoop
  export HADOOP_HOME=/opt/hadoop/bigdata/hadoop
  export HADOOP_USER_NAME=hadoop
  export PATH=$JAVE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  二、官方下载目录
  https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/
  https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.0/hadoop-2.7.0.tar.gz
  # tar -xf hadoop-2.7.0.tar.gz  -C /hadoop
  三、集群配置
  # cd /hadoop/etc/hadoop
  -- 切换到hadoop 目录:
  # cat masters
  master
  # cat etc/hadoop/slaves
  datanode1
  datanode2
  datanode3
  四、主要配置文件修改参考
  1、配置 hadoop-env.sh
  # cat hadoop-env.sh
  export JAVA_HOME=/usr/local/java
  2、配置 core-site
  # cat core-site.xml
  
  
  fs.defaultFS
  
  hdfs://master:9000
  
  
  hadoop.tmp.dir
  
  /hadoop/data/hadoop/tmp
  
  
  3、配置 hdfs-site
  # cat hdfs-site.xml
  
  
  dfs.namenode.name.dir
  /hadoop/data/hadoop/hdfs/namedode
  
  
  dfs.namenode.http-address
  master:50070
  
  
  dfs.datanode.data.dir
  /hadoop/data/hadoop/hdfs/namenode
  
  
  dfs.replication
  3
  
  
  dfs.namenode.secondary.http-address
  master:9001
  
  
  dfs.webhdfs.enabled
  true
  
  
  4、配置 maped-site
  # cat mapred-site.xml
  
  
  mapreduce.framework.name
  yarn
  
  
  mapreduce.jobhistory.address
  master:10020
  
  
  mapreduce.jobhistory.webapp.address
  master:19888
  
  
  初始化数据节点,在master上执行如下命令
  # hadoop namenode -format
  5、启动Hadoop
  在master节点上执行Hadoop的start-all.sh脚本即可实现启动整个集群。
  # start-all.sh
  访问 http://master:50070  查看集群状态;
  如果要停止Hadoop的各进程,则使用stop-all.sh脚本即可。
  在一个较大规模的集群环境中,NameNode节点需要在内在中维护整个名称空间中的文件和块的元数据信息,因此,其有着较大的内在需求;而在运行着众多MapReduce任务的环境中,JobTracker节点会用到大量的内存和CPU资源,因此,此场景中通常需要将NameNode和JobTracker运行在不同的物理主机上,这也意味着HDFS集群的主从节点与MapReduce的主从节点将分属于不同的拓扑。启动HDFS的主从进程则需要在NameNode节点上使用start-dfs.sh脚本,而启动MapReduce的各进程则需要在JobTracker节点上通过start-mapred.sh脚本进行。这两个脚本事实上都是通过hadoop-daemons.sh脚本来完成进程启动的。
  五、hadoop 环境设定参考;
  1、 内存设定
  默认情况下,Hadoop为每个进程分配1000MB(1GB)的内存空间,但这可以在hadoop-env.sh文件中通过HADOOP_HEAPSIZE环境变量进行调整。此外,TaskTracker会为worker主机上的每个map或reduce任务的分别启动一个JVM,这些JVM都需要在进程的HEAP中申请用到内存空间。每个TaskTracker可同时运行的map任务总数和reduce任务总数分别由mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum这两个属性进行指定,而它们的默认值都为2。用于运行map或reduce任务的JVM可用内存大小可由mapred.child.java.opts属性指定,其默认设定为-Xmx200m,意指每个任务可以使用最多200MB的内存空间。由此算来,每个worker主机默认将使用2800MB的内存空间。
  除了使用mapred.child.java.opts为每个JVM为map任务和reduce任务设定相同可用内存属性之外,还可以使用mapreduce.map.java.opts和mapreduce.reduce.java.opts分别设定map任务和reduce任务的JVM可用内存的属性。
  在TaskTracker上可同时运行的任务数取决于其主机的CPU数量。由于MapReduce作业大多为I/O密集型应用,因此,让同行运行任务数多于CPU的个数可以提高资源利用效率,其可以多出的数量取决于实际的作业本身。这里有一个通用法则,即让同行运行的作业数量为CPU数量的1至2之间的数字倍数,比如作业数1.5倍于CPU数。与此同时,一定要注意系统上可用内存的数量是否符合任务数的设定,比如在一个4颗CPU的DataNode上,可以设定mapred.tasktracker.map.tasks.maximum和mapred.tasktrackers.reduce.tasks.maximum属性的值都为3(不是4个,因为datanode和tasktracker都是运行的任务,它们要占去两个名额),假设每个任务的可用内存为400MB,那么这些作业总共需要的内存数为6*400MB,即2.4GB,考虑到操作系统及其它进程所需用的内存等,这个数值可能需要更大。
  在hadoop-env.sh文件中,可以使用HADOOP_NAMENODE_OPTS、HADOOP_SECONDARYNAMENODE_OPTS、HADOOP_DATANODE_OPTS、HADOOP_BALANCER_OPTS、HADOOP_JOBTRACKER_OPTS变量分别为对应的5类进程设定运行参数,比如可以使用HADOOP_NAMENODE_OPTS单独设定namenode进程使用不的HEAPSIZE大小。
  2、 Hadoop日志
  Hadoop的系统日志默认存放于其安装目录中的logs子目录,如果需要自定义其存储位置,可以在hadoop-env.sh中设定HADOOP_LOG_DIR环境变量来指定新位置。Hadoop的每个进程均会生成两个日志文件,一个是由log4j生成的并以.log为后缀的日志文件,另一个是以.out为后缀的日志文件,它负责记录发往标准输出和错误输出的信息。
  大多数应用的日志住处均发送至.log类的文件中,因此在故障排查时其也是最需要关注的日志文件。然后,Hadoop为log4j提供的默认配置中,其每天会自动做一次日志滚动,并且永远不会删除日志文件,因此,管理员需要手动归档并删除老旧的日志文件。.out类的日志文件中很少出现信息,而且,Hadoop的每次重启都会导致日志自动滚动,并只会保存最至5次的滚动日志文件版本。
  除了后缀不同之外,这两种日志文件的名称格式是一样的,默认均为hadoop---,比如hadoop-hadoop-namenode-master.magedu.com.log。可以在hadoop-env.sh文件中使用HADOOP_IDENT_STRING变量将日志文件名称格式中的限制为所需要的字符串。
  3、 SSH相关的设定
  Hadoop运行时,它利用控制脚本(如start-dfs.sh)在master节点上基于SSH远程管理各worker节点上的进程,因此,为SSH设定合适的参数将用助于Hadoop的健壮性,如合适的连接超时时间(ConnectTimeout)将有助于Hadoop避免被失效的节点阻塞,将StrictHostKeyChecking设定为no将能够使得master自动添加各节点的主机密钥等。
  Hadoop的控制脚本可以使用rsync将配置文件同步至集群中的其它节点,默认为禁用。如果需要,可以通过HADOOP_MASTER变量将其启用。不过,由于各点上HADOOP_MASTER默认均为禁用,因此,其第一次配置还是需要其它的方式进行。
  其它各SSH相关参数说明及其用法在hadoop-env.sh中均有详细注释,因此,这里不再给出进一步信息。
  Hadoop的其它常用属性

  4、 缓冲大小(Buffer>  Hadoop为其I/O操作使用了4KB的缓冲区容量,这个值是相当保守的。在当今的硬件和操作系统上,可以安全地增大此值以提高系统性能;一般说来,128KB(131072 bytes)是比较理想的设定。如果需要,可以在core-site.xml中通过io.file.buffer.size属性进行定义。
  5、 HDFS块大小
  HDFS默认块大小为64MB,然而128MB(134,217,728 bytes)是更常用的设定,甚至有些集群中使用了256MB。较大的块可以有效降低NameNode上的内存压力,并能支持使用更多的数据量。如果需要,可以在hdfs-site.xml文件中使用dfs.block.size属性进行定义。
  6、 慢启动Reduce任务
  在一个作业中,默认情况下调度器会在map任务完成5%时开始调度启动当前作业的reduce任务。对于较大的作业来说,过早地启动reduce会导致集群性能的下降。在mapred-site.xml文件中为mapred.reduce.slowstart.completed.maps属性来设定一个更大的值(比如0.8,即80%)可以在更晚的时间点启动reduce作业。


运维网声明 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-627802-1-1.html 上篇帖子: hadoop 配置示例 下篇帖子: Hadoop Secondarynamenode原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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