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

[经验分享] hadoop 配置示例

[复制链接]

尚未签到

发表于 2018-10-29 09:29:09 | 显示全部楼层 |阅读模式
  安装配置hadoop:
  1 安装前的准备工作
  本示例所演示的过程基于RHEL 5.8(32bit)平台,用到的应用程序如下所示。
  JDK: jdk-7u5-linux-i586.rpm
  Hadoop:hadoop-0.20.2-cdh3u5.tar.gz
  安全起见,运行Hadoop需要以普通用户的身份进行,因此,接下来先建立运行hadoop进程的用户hadoop并给其设定密码。
  # useradd hadoop
  # echo "password" | passwd --stdin hadoop
  而后配置hadoop用户能够以基于密钥的验正方式登录本地主机,以便Hadoop可远程启动各节点上的Hadoop进程并执行监控等额外的管理工作。
  [root@master ~]# su - hadoop
  [hadoop@master ~]$ ssh-keygen -t rsa -P ''
  [hadoop@master ~]$ ssh-copy-id -i .ssh/id_rsa.pub hadoop@localhost
  2 安装JDK
  Hadoop依赖于1.6 update 8或更新版本的Java环境。本文采用的jdk是rpm格式的安装包,在oracle官方的下载页面中即可找到合适的版本。其安装过程非常简单,使用类似如下命令即可。
  # rpm -ivh jdk-7u5-linux-i586.rpm
  Hadoop运行时需要能访问到如前安装的Java环境,这可以通过将其二进制程序(/usr/java/latest)所在的目录添加至PATH环境变量的路径中实现,也可以通过设定hadoop-env.sh脚本来进行。这里采用前一种方式,编辑/etc/profile.d/java.sh,在文件中添加如下内容:
  JAVA_HOME=/usr/java/latest/
  PATH=$JAVA_HOME/bin:$PATH
  export JAVA_HOME PATH
  切换至hadoop用户,并执行如下命令测试jdk环境配置是否就绪。
  # su - hadoop
  $ java -version
  java version "1.7.0_05"
  Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
  Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)
  3.1 hadoop安装配置
  # tar xf hadoop-0.20.2-cdh3u5.tar.gz -C /usr/local
  # chown -R hadoop:hadoop /usr/local/hadoop-0.20.2-cdh3u5
  # ln -sv /usr/local/hadoop-0.20.2-cdh3u5 /usr/local/hadoop
  然后编辑/etc/profile.d/hadoop.sh,设定HADOOP_HOME环境变量的值为hadoop的解压目录,并让其永久有效。编辑/etc/profile,添加如下内容:
  HADOOP_BASE=/usr/local/hadoop
  PATH=$HADOOP_BASE/bin:$PATH
  export HADOOP_BASE PATH
  切换至hadoop用户,并执行如下命令测试hadoop是否就绪。
  # hadoop version
  Hadoop 0.20.2-cdh3u5
  Subversion git://ubuntu-slave02/var/lib/jenkins/workspace/CDH3u5-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u5/source -r 30233064aaf5f2492bc687d61d72956876102109
  Compiled by jenkins on Fri Oct  5 17:21:34 PDT 2012
  From source with checksum de1770d69aa93107a133657faa8ef467
  3.2 Hadoop的配置文件:
  hadoop-env.sh: 用于定义hadoop运行环境相关的配置信息,比如配置JAVA_HOME环境变量、为hadoop的JVM指定特定的选项、指定日志文件所在的目录路径以及master和slave文件的位置等;
  core-site.xml: 用于定义系统级别的参数,如HDFS URL、Hadoop的临时目录以及用于rack-aware集群中的配置文件的配置等,此中的参数定义会覆盖core-default.xml文件中的默认配置;
  hdfs-site.xml: HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置;
  mapred-site.xml:HDFS的相关设定,如reduce任务的默认个数、任务所能够使用内存的默认上下限等,此中的参数定义会覆盖mapred-default.xml文件中的默认配置;
  masters: hadoop的secondary-masters主机列表,当启动Hadoop时,其会在当前主机上启动NameNode和JobTracker,然后通过SSH连接此文件中的主机以作为备用NameNode;
  slaves:Hadoop集群的slave主机列表,master启动时会通过SSH连接至此列表中的所有主机并为其启动DataNode和taskTracker进程;
  3.3 Hadoop的分布式模型
  Hadoop通常有三种运行模式:本地(独立)模式、伪分布式(Pseudo-distributed)模式和完全分布式(Fully distributed)模式。
  安装完成后,Hadoop的默认配置即为本地模式,此时Hadoop使用本地文件系统而非分布式文件系统,而且其也不会启动任何Hadoop守护进程,Map和Reduce任务都作为同一进程的不同部分来执行。因此,本地模式下的Hadoop仅运行于本机。此种模式仅用于开发或调试MapReduce应用程序但却避免了复杂的后续操作。
  伪分布式模式下,Hadoop将所有进程运行于同一台主机上,但此时Hadoop将使用分布式文件系统,而且各jobs也是由JobTracker服务管理的独立进程。同时,由于伪分布式的Hadoop集群只有一个节点,因此HDFS的块复制将限制为单个副本,其secondary-master和slave也都将运行于本地主机。此种模式除了并非真正意义的分布式之外,其程序执行逻辑完全类似于完全分布式,因此,常用于开发人员测试程序执行。
  要真正发挥Hadoop的威力,就得使用完全分布式模式。由于ZooKeeper实现高可用等依赖于奇数法定数目(an odd-numbered quorum),因此,完全分布式环境需要至少三个节点。
  配置Hadoop的伪分布式模式
  传统上使用的hadoop-site.xml文件已经过时,现在分别使用core-site.xml、mapred-site.xml和hdfs-site.xml来取代core-default.xml、mapred-default.xml和 hdfs-default.xml中的默认配置。hadoop为这些文件提供了模板,其关于xml文档文件格式定义的部分及已经存在,此时所需要做的仅是在其中添加相应的配置即可。
  3.4.1 编辑conf/core-site.xml,配置Hadoop的核心属性
  
  
  
  
  hadoop.tmp.dir
  /hadoop/temp
  
  
  fs.default.name
  hdfs://localhost:8020
  
  
  上面示例中hadoop.tmp.dir属性用于定义Hadoop的临时目录,其默认为/tmp/hadoop-${username}。HDFS进程的许多目录默认都在此目录中,本示例将其定义到了/hadoop/temp目录,需要注意的是,要保证运行Hadoop进程的用户对其具有全部访问权限。fs.default.name属性用于定义HDFS的名称节点和其默认的文件系统,其值是一个URI,即NameNode的RPC服务器监听的地址(可以是主机名)和端口(默认为8020)。其默认值为file:///,即本地文件系统。
  3.4.2 编辑conf/mapred-site.xml,定义MapReduce
  运行MapReduce需要为其指定一个主机作为JobTracker节点,在一个小规模的Hadoop集群中,它通常跟NameNode运行于同一物理主机。可以通过mapred.job.trakcer属性定义JobTracker监听的地址(或主机名)和端口(默认为8021),与前面的fs.default.name属性的值不同的是,这不是一个URI,而仅一个“主机-端口”组合。
  在MapReduce作业运行过程中,中间数据(intermediate data)和工作文件保存于本地临时文件中。根据运行的MapReduce作业不同,这些数据文件可能会非常大,因此,应该通过mapred.local.dir属性为其指定一个有着足够空间的本地文件系统路径,其默认值为${hadoop.tmp.dir}/mapred/local。mapred.job.tracker可以接受多个以逗号分隔路径列表作为其值,并会以轮流的方式将数据分散存储在这些文件系统上,因此指定位于不同磁盘上的多个文件系统路径可以分散数据I/O。
  另外,MapReduce使用分布式文件系统为各TaskTracker保存共享数据,这可以通过mapred.system.dir属性进行定义,其默认值为${hadoop.tmp.dir}/mapred/system。下面给出了一个较简单的mapred-site.xml文件示例。
  
  
  
  
  mapred.job.tracker
  localhost:8021
  
  
  3.4.3 编辑conf/hdfs-site.xml,定义hdfs的属性
  HDFS进程有许多属性可以定义其工作路,如dfs.name.dir属性定义的HDFS元数据持久存储路径默认为${hadoop.tmp.dir}/dfs/name、dfs.data.dir属性定义的DataNode用于存储数据块的目录路径默认为${hadoop.tmp.dir}/dfs/data、fs.checkpoint.dir属性定义的SecondaryNameNode用于存储检查点文件的目录默认为${hadoop.tmp.dir}/dfs/namesecondary。
  为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据块的多个副本,其默认为3个。而只有一个节点的伪分布式环境中其仅用保存一个副本即可,这可以通过dfs.replication属性进行定义。如下所示的内容即可作为最简单的hdfs-site.xml配置文件。
  
  
  
  
  dfs.replication
  1
  
  
  3.4.4 格式化名称节点
  以hadoop用户运行如下命令
  $ hadoop namenode -format
  其执行后会显示为类似如下内容:
  17/02/06 22:16:02 INFO namenode.NameNode: STARTUP_MSG:
  /************************************************************
  STARTUP_MSG: Starting NameNode
  STARTUP_MSG:   host = localhost.localdomain/127.0.0.1
  STARTUP_MSG:   args = [-format]
  STARTUP_MSG:   version = 0.20.2-cdh3u5
  STARTUP_MSG:   build = git://ubuntu-slave02/var/lib/jenkins/workspace/CDH3u5-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u5/source -r 30233064aaf5f2492bc687d61d72956876102109; compiled by 'jenkins' on Fri Oct  5 17:21:34 PDT 2012
  ************************************************************/
  17/02/06 22:16:03 INFO util.GSet: VM type       = 32-bit
  17/02/06 22:16:03 INFO util.GSet: 2% max memory = 19.33375 MB
  17/02/06 22:16:03 INFO util.GSet: capacity      = 2^22 = 4194304 entries
  17/02/06 22:16:03 INFO util.GSet: recommended=4194304, actual=4194304
  17/02/06 22:16:03 INFO namenode.FSNamesystem: fsOwner=hadoop (auth:SIMPLE)
  17/02/06 22:16:04 INFO namenode.FSNamesystem: supergroup=supergroup
  17/02/06 22:16:04 INFO namenode.FSNamesystem: isPermissionEnabled=true
  17/02/06 22:16:04 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=1000
  17/02/06 22:16:04 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)

  17/02/06 22:16:04 INFO common.Storage: Image file of>  17/02/06 22:16:05 INFO common.Storage: Storage directory /hadoop/temp/dfs/name has been successfully formatted.
  17/02/06 22:16:05 INFO namenode.NameNode: SHUTDOWN_MSG:
  /************************************************************
  SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
  ************************************************************/
  其中的“Storage directory /hadoop/temp/dfs/name has been successfully formatted”一行信息表明对应的存储已经格式化成功。
  3.4.5 启动hadoop
  Hadoop提供了2个脚本start-dfs.sh和start-mapred.sh,分别用于启动hdfs相关的进程和mapred相关的进程。事实上,为了使用的便捷性,在NameNode和JobTracker运行于同一主机的场景中,Hadoop还专门提供了脚本start-all.sh脚本来自动执行前述两个脚本。
  $ /usr/local/hadoop/bin/start-all.sh
  其会输出类似如下内容:
  starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-localhost.localdomain.out
  localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-localhost.localdomain.out
  localhost: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-localhost.localdomain.out
  starting jobtracker, logging to /usr/local/hadoop/logs/hadoop-hadoop-jobtracker-localhost.localdomain.out
  localhost: starting tasktracker, logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-localhost.localdomain.out
  运行jps命令查看正在运行的Hadoop进程
  $ jps | grep -iv "jps"
  29326 DataNode
  29478 SecondaryNameNode
  29685 TaskTracker
  29208 NameNode
  29563 JobTracker
  3.4.6 Hadoop进程监听的地址和端口
  Hadoop启动时会运行两个服务器进程,一个为用于Hadoop各进程之间进行通信的RPC服务器,另一个是提供了便于管理员查看Hadoop集群各进程相关信息页面的HTTP服务器。
  用于定义各RPC服务器所监听的地址和端口的属性有如下几个:
  fs.default.name:定义HDFS的NameNode用于提供URI所监听的地址和端口,默认端口为8020;
  dfs.datanode.ipc.address:DataNode上IPC服务器监听的地址和端口,默认为0.0.0.0:50020;
  mapred.job.tracker:JobTracker的PRC服务器所监听的地址和端口,默认端口为8021;
  mapred.task.tracker.report.address:TaskTracker的RPC服务器监听的地址和端口;TaskTracker的子JVM使用此端口与TaskTracker进行通信,它仅需要监听在本地回环地址127.0.0.1上,因此可以使用任何端口;只有在当本地没有回环接口时才需要修改此属性的值;
  除了RPC服务器之外,DataNode还会运行一个TCP/IP服务器用于数据块传输,其监听的地址和端口可以通过dfs.datanode.address属性进行定义,默认为0.0.0.0:50010。
  可用于定义各HTTP服务器的属性有如下几个:
  mapred.job.tracker.http.addrss:JobTracker的HTTP服务器地址和端口,默认为0.0.0.0:50030;
  mapred.task.tracker.http.address:TaskTracker的HTTP服务器地址和端口,默认为0.0.0.0:50060;
  dfs.http.address:NameNode的HTTP服务器地址和端口,默认为0.0.0.0:50070;
  dfs.datanode.http.address:DataNode的HTTP服务器地址和端口,默认为0.0.0.0:50075;
  dfs.secondary.http.address:SecondaryNameNode的HTTP服务器地址和端口,默认为0.0.0.0:50090;
  上述的HTTP服务器均可以通过浏览器直接访问以获取对应进程的相关信息。
  下面的命令可以查看jvm监听的端口。
  $ netstat -tnlp | grep "java"

  (Not all processes could be>  will not be shown, you would have to be root to see it all.)
  tcp        0      0 0.0.0.0:50020               0.0.0.0:*                   LISTEN      29326/java
  tcp        0      0 0.0.0.0:52805               0.0.0.0:*                   LISTEN      29208/java
  tcp        0      0 0.0.0.0:50090               0.0.0.0:*                   LISTEN      29478/java
  tcp        0      0 0.0.0.0:50060               0.0.0.0:*                   LISTEN      29685/java
  tcp        0      0 0.0.0.0:50030               0.0.0.0:*                   LISTEN      29563/java
  tcp        0      0 0.0.0.0:51664               0.0.0.0:*                   LISTEN      29478/java
  tcp        0      0 0.0.0.0:54898               0.0.0.0:*                   LISTEN      29326/java
  tcp        0      0 0.0.0.0:55475               0.0.0.0:*                   LISTEN      29563/java
  tcp        0      0 127.0.0.1:8020              0.0.0.0:*                   LISTEN      29208/java
  tcp        0      0 127.0.0.1:44949             0.0.0.0:*                   LISTEN      29685/java
  tcp        0      0 127.0.0.1:8021              0.0.0.0:*                   LISTEN      29563/java
  tcp        0      0 0.0.0.0:50070               0.0.0.0:*                   LISTEN      29208/java
  tcp        0      0 0.0.0.0:50010               0.0.0.0:*                   LISTEN      29326/java
  tcp        0      0 0.0.0.0:50075               0.0.0.0:*                   LISTEN      29326/java
  4 Hadoop命令
  hadoop有很多子命令,用于完成不同的功能,这个可以通过如下命令查看。
  $ hadoop
  其中的fs子命令用于进行跟文件系统相关的多种操作,如创建目录、复制文件或目录等,其具体的使用帮助可以使用如下命令获得。
  $ hadoop fs -help
  hadoop的fs命令能同时跟本地文件系统和HDFS交互,甚至可以跟Amazon的S3进行交互。其使用URI格式路径引用文件路径,完全的URI格式类似schema://authority/path,其中schema类似于协议,这里可以使用hdfs或file,分别用于引用 HDFS文件或本地文件系统中的文件。而对于HDFS来说,authority是指Namenode主机,path是指具体的文件路径。例如,在伪文件系统模式中,HDFS运行于本机的8020端口,因此hdfs://localhost:8020/user/hadoop/test.txt就是一个完整意义上的URI。事实上,在使用中,也可以省略URI中的schema://authority部分,此时其使用配置文件中默认名称段的定义,如我们前面定义的类似如下段的配置信息:
  
  fs.default.name
  hdfs://localhost:9000
  
  在fs命令用于实现在本地文件系统和HDFS之间传递文件时,可以使用-get(从HDFS中复制文件至本地文件系统)或-put(将本地文件复制到HDFS中)命令实现,而fs会根据使用的命令来判断哪个是本地文件系统路径,哪个是HDFS文件系统路径,如将本地的/etc/issue复制到HDFS中存放至当前hadoop用户的目录中,则可使用如下命令:
  $ hadoop fs -put /etc/issue  hdfs://localhost:9000/user/hadoop/
  或使用命令
  $ hadoop fs -put /etc/issue  /user/hadoop/
  复制的结果可以使用如下命令查看:
  $ hadoop fs -ls
  Found 1 items
  -rw-r--r--   1 hadoop supergroup         74 2012-09-20 23:03 /user/hadoop/issue


运维网声明 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-627801-1-1.html 上篇帖子: 使用Cloudera Manager安装Hadoop 下篇帖子: hadoop 分布式示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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