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

[经验分享] Hadoop集群搭建实践全记录

[复制链接]

尚未签到

发表于 2016-12-5 10:06:38 | 显示全部楼层 |阅读模式
  参考:http://www.open-open.com/lib/view/1328536842327
  http://hadoop.apache.org/common/docs/r0.19.2/cn/cluster_setup.html
  http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
  转载请标明出处SpringsSpace: http://springsfeng.iyunv.com
  安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。通常,集群里的一台机器被指定为
  NameNode ,另一台不同的机器被指定为JobTracker ;这两台机器是masters 。而余下的机器即作
  为DataNode 作为TaskTracker ,这些机器是slaves 。下面安装配置过程中使用HADOOP_HOME 指
  代安装的根路径,一般情况下,集群里的所有机器的HADOOP_HOME 路径应该是的相同的。
  1. 先决条件
    确保集群中的每个节点上都安装了所有必需软件:SUN-JDK(jdk-6u33-linux-i586.bin) ,ssh,Hadoop
  (hadoop-1.0.3.tar.gz):
    其总JDK必须安装,ssh 必须安装并且保证sshd一直运行,以便用Hadoop脚本管理远端Hadoop守护进程。
2 实验环境搭建
   2.1  准备工作
     操作系统:Ubuntu10.10,虚拟机:Vmvare8.X:可在vmvare安装好一台Ubuntu虚拟机后,可以导出或
  者克隆出另外两台虚拟机。
     准备机器:一台master,2台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例
  如:

     192.168.1.102 HADOOP-MASTER(master)
     192.168.1.103 HADOOP-SLAVE1 (slave1)
     192.168.1.104 HADOOP-SLAVE2(slave2)


     主机信息:
     机器名                              IP地址                                        作用
     HADOOP-MASTER       192.168.1.102                         NameNode、JobTracker
  HADOOP-SLAVE1         192.168.1.103                         DataNode、TaskTracker
  HADOOP-SLAVE2         192.168.1.104                         DataNode、TaskTracker   
  2.2 安装JDK 
     (1) 安装方式1:
  右键选择jdk-6u33-linux-i586.bin中的权限Tab页,选中“允许以程序执行文件”;进入jdk-6u33-linux-i586.bin
  所在目录,执行:./jdk-6u33-linux-i586.bin
  (2) 安装方式2:
  $ sudo apt-get install sun-java6-jdk 
     这个安装,java执行文件自动添加到/usr/bin/目录。
     验证 shell命令 :java -version 看是否与你的版本号一致。
  配置环境变量,请参考本博客Ubuntu下的Java开发环境搭建文章。
   2.3 创建目录
     在所有的机器上都建立相同的目录:
  sudo mkdir /usr/program/
  sudo chown hadoop:hadoop program/
  以该目录作为JDK,HADOOP的安装目录。    
   2.4 安装ssh和配置
  参考:Linux上安装使用SSH(ubuntu&&redhat) :
  http://blog.csdn.net/zxs9999/article/details/6930736
     1) 安装:sudo apt-get install ssh
     2) 配置:
     在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个Datanode上的各种守护
  进程的,这就需要在节点之间执行指令的时候是不须要输入密码的形式,故我们需要配置SSH运用无密码公
  钥认证的形式。以本文中的三台机器为例,现在HADOOP-MASTER是主节点,他须要连接HADOOP-
  SLAVE1和HADOOP-SLAVE2。需要确定每台机器上都安装了ssh,并且Datanode机器上sshd服务已经启动。

    ( 说明:hadoop@Ubuntu~]$ssh-keygen  -t  rsa
    这个命令将为Ubuntu上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要
  为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,
  id_rsa.pub ,默认存储在/home/hadoop/.ssh 目录下然后将 id_rsa.pub的内容复制到每个机器(也包括本机)的
  /home/hadoop/.ssh/authorized_keys 文件中,如果机器上已经有 authorized_keys这个文件了,就在文件末
  尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行.)
  
     3) 首先设置Namenode的ssh为无需密码的、自动登录
     hadoop@HADOOP-MASTER :~$ ssh-keygen -t rsa 然后一直按回车
     完成后,在home跟目录下会产生隐藏文件夹.ssh
     hadoop@HADOOP-MASTER :~$ cd .ssh
     hadoop@HADOOP-MASTER :~/.ssh$ ll
     hadoop@HADOOP-MASTER :~/.ssh$ cat authorized_keys
     测试:
     ssh localhost 发现链接成功,并且无需密码。
     4 ) 复制到HADOOP-SLAVE1 和HADOOP-SLAVE2上
     hadoop@HADOOP-MASTER:~/.ssh$ scp authorized_keys HADOOP-SLAVE1:/home/hadoop/.ssh/
     hadoop@HADOOP-MASTER:~/.ssh$ scp authorized_keys HADOOP-SLAVE2:/home/hadoop/.ssh/

     输入 yes 来继续。这会把该服务器添加到你的已知主机的列表中
     The authenticity of host 'hadoop-slave1 (192.168.1.103)' can't be established.
     ECDSA key fingerprint is 77:9a:8a:91:bd:de:6b:0a:d3:3d:62:c2:de:13:4a:b4.
     Are you sure you want to continue connecting (yes/no)? yes
     Warning: Permanently added 'hadoop-slave1,192.168.1.103' (ECDSA) to the list of known hosts.
     hadoop@hadoop-slave1's password:
     这里会提示输入密码,输入hadoop账号密码就可以了。

     改动你的 authorized_keys 文件的许可权限:
     hadoop@HADOOP-MASTER:~/.ssh$ chmod 644 authorized_keys
  hadoop@HADOOP-SLAVE1:~/.ssh$ chmod 644 authorized_keys
  hadoop@HADOOP-SLAVE2:~/.ssh$ chmod 644 authorized_keys

     检查下能不能配置成功,从hadoop机器上ssh到AHDOOP-SLAVE1和HADOOP-SLAVE2,如果不需要输
  入密码则配置成功,如果还须要检查上面的配置能不能正确。例如:
  hadoop@HADOOP-MASTER:~$ ssh HADOOP-SLAVE1
  hadoop@HADOOP-MASTER:~$ ssh HADOOP-SLAVE2
  2.5 安装Hadoop
     下载安装包后,直接解压安装即可:
     $ tar -zxvf hadoop-1.0.3.tar.gz

     1) 安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果用HADOOP
  _HOME =/usr/program/hadoop-1.0.3, 指代安装的根路径,通常,集群里的所有机器的HADOOP_HOME路
  径相同。
  2) 如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop-1.0.3整个文
  件夹拷贝到其他机器的相同位置即可。
  3) 可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_
  HOME 的不同修改其hadoop-env.sh 。
     4) 为了方便,使用hadoop命令或者start-all.sh等命令。
  修改Master和Slave上的/etc/profile :新增以下内容:
     JAVA_HOME=/usr/program/jdk1.6.0_33
    HADOOP_HOME=/usr/program/hadoop-1.0.3
    PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME HADOOP_HOME PATH CLASSPATH

     修改完毕后,执行source /etc/profile 来使其生效。
  5) 配置conf/hadoop-env.sh文件
     配置conf/hadoop-env.sh 文件
     #添加
     export JAVA_HOME= /usr/program/jdk1.6.0_33
     #这里修改为你的jdk的安装位置。
     测试hadoop安装:
  hadoop@HADOOP-MASTER:/usr/program/hadoop-1.0.3$ bin/hadoop jar hadoop-examples-1.0.3.jar  wordcount conf/  /tmp/out
  3. 集群配置(所有节点相同)
    3.1配置文件:conf/core-site.xml
    <?xml version="1.0"?>
            <?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
            <configuration>
                          <property>
                                    <name>fs.default.name</name>
                                    <value>hdfs://HADOOP-MASTER:49000</value>
                         </property>
                         <property>
                                    <name>hadoop.tmp.dir</name>
                                    <value>/home/hadoop/hadoop-workspace/var</value>
                         </property>

            </configuration>
       1) fs.default.name是NameNode的URI。hdfs://主机名:端口/
       2) hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的
         DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就
         需要重新执行NameNode格式化的命令。
    3.2配置文件:conf/mapred-site.xml
    <?xmlversion="1.0"?>
          <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
               <configuration>
                    <property>
                          <name>mapred.job.tracker</name>
                          <value>HADOOP-MASTER:49001</value>
                    </property>
                    <property>
                          <name>mapred.local.dir</name>
                          <value>/home/hadoop/hadoop-workspace/var</value>
                    </property>

              </configuration>
         1) mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。
      3.3配置文件:conf/hdfs-site.xml
      <?xmlversion="1.0"?>
            <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
                 <configuration>
                       <property>
                             <name>dfs.name.dir</name>
                             <value>/home/hadoop/name1, /home/hadoop/name2</value> #hadoop的name目录路径
                             <description>  </description>
                       </property>
                       <property>
                             <name>dfs.data.dir</name>
                             <value>/home/hadoop/data1, /home/hadoop/data2</value>
                             <description> </description>
                        </property>
                        <property>
                              <name>dfs.replication</name>
                              <!-- 我们的集群又两个结点,所以rep两份 -->
                              <value>2</value>
                        </property>

                   </configuration>
       1)  dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分
  割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
       2)  dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目
  录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
       3) dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
  注意: 此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先
        创建反而会有问题。
    3.4配置masters和slaves主从结点
      配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以
  互相访问,每个主机名一行。

       hadoop@HADOOP-MASTER:/usr/program/hadoop-1.0.3/conf$ gedit masters
       输入:
       HADOOP-MASTER     #注意输入的内容前后不要有空格
      hadoop@HADOOP-SLAVE1:/usr/program/hadoop-1.0.3/conf$ gedit masters
  hadoop@HADOOP-SLAVE1:/usr/program/hadoop-1.0.3/conf$ gedit slaves
  hadoop@HADOOP-SLAVE2:/usr/program/hadoop-1.0.3/conf$ gedit masters
  hadoop@HADOOP-SLAVE2:/usr/program/hadoop-1.0.3/conf$ gedit slaves
       输入:
       HADOOP-SLAVE1
       HADOOP-SLAVE2


       配置结束,把配置好的hadoop-1.0.3文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而
  言正确,例如:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh

       $ scp -r /usr/program/hadoop-1.0.3 hadoop@HADOOP-SLAVE1: /usr/program/hadoop-1.0.3
  4 hadoop启动
    4.1 格式化一个新的分布式文件系统
     先格式化一个新的分布式文件系统,在Master机器上执行:
     hadoop@HADOOP-MASTER:/usr/program/hadoop-1.0.3$ bin/hadoop namenode -format
  成功情况下系统输出:

12/06/29 02:50:31 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = HADOOP-MASTER/192.168.1.102
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.0.3
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192; compiled by 'hortonfo' on Tue May  8 20:31:25 UTC 2012
************************************************************/
12/06/29 02:50:32 INFO util.GSet: VM type       = 32-bit
12/06/29 02:50:32 INFO util.GSet: 2% max memory = 19.33375 MB
12/06/29 02:50:32 INFO util.GSet: capacity      = 2^22 = 4194304 entries
12/06/29 02:50:32 INFO util.GSet: recommended=4194304, actual=4194304
12/06/29 02:50:32 INFO namenode.FSNamesystem: fsOwner=hadoop
12/06/29 02:50:32 INFO namenode.FSNamesystem: supergroup=supergroup
12/06/29 02:50:32 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/06/29 02:50:32 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/06/29 02:50:32 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/06/29 02:50:32 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/06/29 02:50:32 INFO common.Storage: Image file of size 112 saved in 0 seconds.
12/06/29 02:50:32 INFO common.Storage: Storage directory /home/hadoop/name1 has been successfully formatted.
12/06/29 02:50:32 INFO common.Storage: Image file of size 112 saved in 0 seconds.
12/06/29 02:50:32 INFO common.Storage: Storage directory /home/hadoop/name2 has been successfully formatted.
12/06/29 02:50:32 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at HADOOP-MASTER/192.168.1.102
************************************************************/

   查看输出保证分布式文件系统格式化成功。
     执行完后可以到Master机器上看到/home/hadoop//name1和/home/hadoop//name2两个目录。在主节点
  Master上面启动hadoop,主节点会启动所有从节点的hadoop。
   4.2 启动所有节点
     hadoop@HADOOP-MASTER:/usr/program/hadoop-1.0.3/bin$ ./start-all.sh
  运行正确输出:

starting namenode, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-namenode-HADOOP-MASTER.out
HADOOP-SLAVE1: starting datanode, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-datanode-HADOOP-SLAVE1.out
HADOOP-SLAVE2: starting datanode, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-datanode-HADOOP-SLAVE2.out
HADOOP-MASTER: starting secondarynamenode, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-secondarynamenode-HADOOP-MASTER.out
starting jobtracker, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-jobtracker-HADOOP-MASTER.out
HADOOP-SLAVE2: starting tasktracker, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-tasktracker-HADOOP-SLAVE2.out
HADOOP-SLAVE1: starting tasktracker, logging to /usr/program/hadoop-1.0.3/libexec/../logs/hadoop-hadoop-tasktracker-HADOOP-SLAVE1.out
       执行完后可以到Master(HADOOP-MASTER)和Slave(HADOOP-SLAVE1,HADOP-SLAVE2)机器上看到
  /home/hadoop/hadoopfs/data1和/home/hadoop/data2两个目录。
   4.3 关闭所有节点
     从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。
     hadoop@HADOOP-MASTER:/usr/program/hadoop-1.0.3/bin$ ./stop-all.sh
  运行正确输出:

stopping jobtracker
HADOOP-SLAVE2: stopping tasktracker
HADOOP-SLAVE1: stopping tasktracker
stopping namenode
HADOOP-SLAVE1: stopping datanode
HADOOP-SLAVE2: stopping datanode
HADOOP-MASTER: stopping secondarynamenode

      Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是 ${HADOOP_HOME}/logs).  ${HADOOP_HOME}就是安装路径.
  5 .测试
    1) 浏览NameNode和JobTracker的网络接口,它们的地址默认为:
    NameNode - http://HADOOP-MASTER:50070/
    JobTracker - http://HADOOP-SLAVE1:50030/
    2) 使用netstat  –nat 查看端口49000和49001是否正在使用。
    3) 使用jps 查看进程。
  
    要想检查守护进程是否正在运行,可以使用 jps 命令(这是用于 JVM 进程的ps 实用程序)。这个命令列出
  5 个守护进程及其进程标识符。
  
    4) 将输入文件拷贝到分布式文件系统:
    $ bin/hadoop fs -mkdir input
    $ bin/hadoop fs -put conf/core-site.xml input
  
    运行发行版提供的示例程序:
    $ bin/ h adoop jar hadoop-examples-1.0.3.jar wordcount grep input output 'dfs[a-z.]+'
  具体可参考:http://springsfeng.iyunv.com/admin/blogs/1379237

6.补充
    Q: bin/hadoop jar hadoop-examples-1.0.3.jar grep input output 'dfs[a-z.]+' 什么意思啊?
    A: bin/hadoop jar(使用hadoop运行jar包) hadoop-examples-1.0.3.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
  7. HDFS常用操作
    hadoopdfs -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上的数据块的分布。

运维网声明 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.iyunv.com/thread-309909-1-1.html 上篇帖子: 【转载】hadoop/hbase 搭建 下篇帖子: (转)使用Ant编译Hadoop eclipse插件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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