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

[经验分享] hadoop集群搭建

[复制链接]
发表于 2015-7-12 07:36:20 | 显示全部楼层 |阅读模式
hadoop 版本选定
  Apache hadoop官网上的版本目前列举如下:
  
       
  • 1.1.X - current stable version, 1.1 release   
  • 1.2.X - current beta version, 1.2 release   
  • 2.X.X - current alpha version   
  • 0.23.X - simmilar to 2.X.X but missing NN HA.   
  • 0.22.X - does not include security   
  • 0.20.203.X - old legacy stable version   
  • 0.20.X - old legacy version
  所以选定的版本是1.2.x的具体是 hadoop-1.2.1/  

下载地址:http://apache.etoak.com/hadoop/common/

环境说明
  
  一共使用了三台机器,说明如下:

IP用途
192.168.1.99Master,NameNode,JobTracker
192.168.1.98  Slave1,DataNode,TaskTracker

192.168.1.97  Slave2, DataNode,TaskTracker

192.168.1.96  Slave3, DataNode,TaskTracker

  

安装JDK
  
  安装略
  在/etc/profile文件最后加上如下:
  export JAVA_HOME=/usr/share/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  
  使修改升效:source /etc/profile
  

创建用户及组
  创建用户hadoop 及组 hadoop
  mkdir /home/hadoop
  groupadd hadoop
  useradd  hadoop –d /home/hadoop –g hadoop
  chmod –R 744 /home/hadoop
  chgrp –R hadoop /home/hadoop
  

SSH配置
  三台机器已经安装好了SSH,需要配置ssh无密码公钥认证登录.
  在master主机上生成密钥与公钥。命令为 ssh-keygen –t rsa 一路回车,注意,在提示输入加密短语的时候,一定不能输入字符。会在~.ssh下生成id_rsa和id_rsa.pub文件,将id_rsa.pub文件传到slave机器上,追加到 ~.ssh/authorized_keys 文件里,如果authorized_keys文件没有,可以手动创建。
  authorized_keys权限为744就行了。
  

安装hadoop
  
  hadoop有两种安装方式,一种是rpm包的安装,使用rpm –ivh hadoop.rpm就行了。
  另外一种是使用gz.tar包解压安装。本文使用这种安装方式。
  
  解压:tar –zxvf hadoop-1.2.1.tar.gz
  为了方便,使用hadoop命令或者start-all.sh等命令,修改Master上/etc/profile 新增以下内容:
  export HADOOP_HOME=/usr/hadoop
  export PATH=$PATH :$HADOOP_HOME/bin
  
  hadoop-1.2.1.tar.gz 解压后目录是hadoop-1.2.1,将这个目录移到/usr目录下,然后建立一个软链接
  ln –s /usr/hadoop-1.2.1 /usr/hadoop
  这样方便以后升级
  

集群配置

配置文件:conf/core-site.xml
  
   
        hadoop.tmp.dir
        /usr/hadoop_dir/tmp
   
  
   
        fs.default.name
        hdfs://192.168.2.99:49000
   
   
        fs.checkpoint.dir
        /usr/hadoop_dir/dfs/namesecondary
   

  
  1)fs.default.name是NameNode的URI。hdfs://主机名:端口/
2)hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
  

配置文件:conf/mapred-site.xml
  
        
                mapred.job.tracker
                192.168.2.99:49001
        
        
                mapred.local.dir
                /usr/hadoop_dir/var
        
         
                mapreduce.jobhistory.intermediate-done-dir
                /usr/hadoop_dir/mr-history/tmp
         
         
                mapreduce.jobhistory.done-dir
                /usr/hadoop_dir/mr-history/done
         

  
  

配置文件:conf/hdfs-site.xml
  
   
        dfs.name.dir         
        /usr/hadoop_dir/namenode1,/usr/hadoop_dir/namenode2
        name node dir
   
   
        dfs.data.dir         
        /usr/hadoop_dir/datanode1,/usr/hadoop_dir/datanode2
        
   
     
        dfs.permissions
        false
   

  
  1)   dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
2)   dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
3)dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
  注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。
  

配置masters和slaves主从结点
  配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。
  vi masters:
输入:
  node1
  vi slaves:
  输入:
node2
node3
  配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh
  

hadoop启动
  先格式化一个新的分布式文件系统,运行命令/bin/hadoop namenode -format
  
  13/06/04 11:44:03 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = node1/127.0.0.2
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.1.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013
************************************************************/
Re-format filesystem in /home/hadoop/hadoop_home/name1 ? (Y or N) y
Format aborted in /home/hadoop/hadoop_home/name1
13/06/04 11:44:07 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at node1/127.0.0.2
************************************************************/
  查看输出保证分布式文件系统格式化成功
执行完后可以到master机器上看到/home/hadoop//name1和/home/hadoop//name2两个目录。在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。
  

启动所有节点
  启动方式1
  $ bin/start-all.sh (同时启动HDFS和Map/Reduce)
  启动方式2
  启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。
  在分配的NameNode上,运行下面的命令启动HDFS:
$ bin/start-dfs.sh(单独启动HDFS集群)
  bin/start-dfs.sh脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
  在分配的JobTracker上,运行下面的命令启动Map/Reduce:
$bin/start-mapred.sh (单独启动Map/Reduce)
  bin/start-mapred.sh脚本会参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
  

关闭所有节点
  从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。
  $ bin/stop-all.sh
  Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是 ${HADOOP_HOME}/logs).
  ${HADOOP_HOME}就是安装路径.
  

测试
  1)浏览NameNode和JobTracker的网络接口,它们的地址默认为:
  NameNode - http://node1:50070/
JobTracker - http://node2:50030/
  3)   使用netstat  –nat查看端口49000和49001是否正在使用。
  4)  使用jps查看进程
  要想检查守护进程是否正在运行,可以使用 jps 命令(这是用于 JVM 进程的ps 实用程序)。这个命令列出 5 个守护进程及其进程标识符。
  5)将输入文件拷贝到分布式文件系统:
$ bin/hadoop fs -mkdir input
$ bin/hadoop fs -put conf/core-site.xml input
  运行发行版提供的示例程序:
$ bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'

补充
  
Q: bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+' 什么意思啊?
A: bin/hadoop jar(使用hadoop运行jar包) hadoop-0.20.2_examples.jar(jar包的名字) grep (要使用的类,后边的是参数)input output 'dfs[a-z.]+'
整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。
Q: 什么是grep?
A: A map/reduce program that counts the matches of a regex in the input.
  查看输出文件:
  将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get output output
$ cat output/*
  或者
  在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat output/*
  统计结果:
root@v-jiwan-ubuntu-0:~/hadoop/hadoop-0.20.2-bak/hadoop-0.20.2#bin/hadoop fs -cat output/part-00000
3       dfs.class
2       dfs.period
1       dfs.file
1      dfs.replication
1       dfs.servers
1       dfsadmin

HDFS常用操作
  hadoop dfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式

8.添加节点
  可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf/master文件,加入 NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点主机名,再建立到新加节点无密码的SSH连接
  运行启动命令:
  start-all.sh
  然后可以通过http://(Masternode的主机名):50070查看新添加的DataNode

9负载均衡
  start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布
  结束语:遇到问题时,先查看logs,很有帮助。
  

10 SHell自动安装脚本


  • #!/bin/bash


  • #validate user or group
  • validate() {
  • if [ 'id -u' == 0 ];then
  •    echo "must not be root!"
  •    exit 0
  • else
  •    echo "---------welcome to hadoop---------"
  • fi
  • }


  • #hadoop install
  • hd-dir() {
  • if [ ! -d /home/hadoop/ ];then
  •    mkdir /home/hadoop/
  • else
  •    echo "download hadoop will begin"
  • fi
  • }


  • download-hd() {
  • wget -c http://archive.apache.org/dist/hadoop/core/stable/hadoop-1.0.4.tar.gz -O /home/hadoop/hadoop-1.0.4.tar.gz
  • tar -xzvf /home/hadoop/hadoop-1.0.4.tar.gz -C /home/hadoop
  • rm /home/hadoop/hadoop-1.0.4.tar.gz
  • Ln -s /home/hadoop/hadoop-1.0.4 /home/hadoop/hadoop1.0.4
  • }


  • #hadoop conf
  • hd-conf() {
  • echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386" >> /home/hadoop/hadoop1.0.4/conf/hadoop-env.sh
  • echo "#set path jdk" >> /home/hadoop/.profile
  • echo "export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386" >> /home/hadoop/.profile
  • echo "#hadoop path" >> /home/hadoop/.profile
  • echo "export HADOOP_HOME=/home/hadoop/hadoop1.0.4" >> /home/hadoop/.profile
  • echo "PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin" >> /home/hadoop/.profile
  • echo "HADOOP_HOME_WARN_SUPPRESS=1" >> /home/hadoop/.profile
  • #hadoop core-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "fs.default.name" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "hdfs://hadoop-master:9000" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "hadoop.tmp.dir" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "/home/hadoop/tmp" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/core-site.xml
  • #hadoop hdfs-site.xml


  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "dfs.name.dir" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "/home/hadoop/name" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "dfs.data.dir" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "/home/hadoop/data" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "dfs.replication" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "1" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/hdfs-site.xml
  • # hadoop mapred-site.xml


  • echo "" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  • echo "mapred.job.tracker" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  • echo "hadoop-master:9001" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  • echo "" >> /home/hadoop/hadoop1.0.4/conf/mapred-site.xml
  • #hadoop master
  • echo "hadoop-master" >> /home/hadoop/hadoop1.0.4/conf/masters


  • #hadoop slaves
  • echo "hadoop-master" >> /home/hadoop/hadoop1.0.4/conf/slaves
  • source /home/hadoop/.profile
  • }


  • hd-start() {
  • hadoop namenode -format
  • }




  • yes-or-no() {
  •   echo "Is your name $* ?"
  •   while true
  •   do
  •      echo -n "Enter yes or no: "
  •      read x
  •      case "$x" in
  •      y | yes ) return 0;;
  •      n | no ) return 1;;
  •      * ) echo "Answer yes or no";;
  •    esac
  •   done
  • }


  • echo "Original params are $*"


  • if yes-or-no "$1"
  • then
  •   echo "HI $1,nice name!"
  •   validate
  •   hd-dir
  •   download-hd
  •   hd-conf
  • else
  •   echo "Never mind!"
  • fi
  
  参考:
  http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html
  http://www.iyunv.com/xia520pi/archive/2012/05/16/2503949.html

运维网声明 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-85600-1-1.html 上篇帖子: Hadoop学习笔记(一) 下篇帖子: Hadoop MapReduce 上利用Lucene实现分布式检索
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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