Hadoop 简介 及 安装

1.什么是Hadoop

1.1 Hadoop历史渊源

        Doug Cutting是Apache Lucene创始人, Apache Nutch项目开始于2002年,Apache Nutch是Apache Lucene项目的一部分。2005年Nutch所有主要算法均完成移植,用MapReduce和NDFS来运行。2006年2月,Nutch将MapReduce和NDFS移出Nutch形成Lucene一个子项目,命名Hadoop。

Hadoop不是缩写,而是虚构名。项目创建者Doug Cutting解释Hadoop的得名:“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子恰恰是这方面的高手。

 

1.2 狭义的Hadoop

        个人认为,狭义的Hadoop指Apache下Hadoop子项目,该项目由以下模块组成:

  • Hadoop Common: 一系列组件和接口,用于分布式文件系统和通用I/O
  • Hadoop Distributed File System (HDFS?): 分布式文件系统
  • Hadoop YARN: 一个任务调调和资源管理框架
  • Hadoop MapReduce: 分布式数据处理编程模型,用于大规模数据集并行运算

        狭义的Hadoop主要解决三个问题,提供HDFS解决分布式存储问题,提供YARN解决任务调度和资源管理问题,提供一种编程模型,让开发者可以进来编写代码做离线大数据处理

 

1.3 广义的Hadoop

        个人认为,广义的Hadoop指整个Hadoop生态圈,生态圈中包含各个子项目,每个子项目为了解决某种场合问题而生,主要组成如下图:

Hadoop 简介 及 安装_第1张图片
 

        

2.Hadoop集群部署两种集群部署方式

2.1 hadoop1.x和hadoop2.x都支持的namenode+secondarynamenode方式

Hadoop 简介 及 安装_第2张图片
 

2.2 仅hadoop2.x支持的active namenode+standby namenode方式


Hadoop 简介 及 安装_第3张图片 

2.3 Hadoop官网关于集群方式介绍

        1)单机Hadoop环境搭建

        http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster.html

        2)集群方式

            集群方式一(hadoop1.x和hadoop2.x都支持的namenode+secondarynamenode方式)

            http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/ClusterSetup.html

 

            集群方式二(仅hadoop2.x支持的active namenode+standby namenode方式,也叫HADOOP HA方式),这种方式又将HDFS的HA和YARN的HA单独分开讲解

                     HDFS HA(zookeeper+journalnode)http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

                     HDFS HA(zookeeper+NFS)http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailability

                     YARN HA(zookeeper)http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

 

        生产环境多采用HDFS(zookeeper+journalnode)(active NameNode+standby NameNode+JournalNode+DFSZKFailoverController+DataNode)+YARN(zookeeper)(active ResourceManager+standby ResourceManager+NodeManager)方式,这里我讲解的是hadoop1.x和hadoop2.x都支持的namenode+secondarynamenode方式,这种方式主要用于学习实践,因为它需要的机器台数低但存在namenode单节点问题

 

3.Hadoop安装

3.1 所需软件包

  1. JavaTM1.7.x,必须安装,建议选择Sun公司发行的Java版本。经验证目前hadoop2.7.1暂不支持jdk1.6,这里用的是jdk1.7,下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  2. ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
  3. hadoop安装包下载地址:http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz

3.2 环境

  1. 操作系统: Red Hat Enterprise Linux Server release 5.8 (Tikanga)
  2. 主从服务器:Master 192.168.181.66  Slave1 192.168.88.21   Slave2 192.168.88.22

3.3 SSH免密码登录

    首先需要在linux上安装SSH(因为Hadoop要通过SSH链接集群其他机器进行读写操作),请自行安装。Hadoop需要通过SSH登录到各个节点进行操作,我用的是hadoop用户,每台服务器都生成公钥,再合并到authorized_keys。

    1.CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置。       修改前:

Java代码   收藏代码
  1. #RSAAuthentication yes  
  2. #PubkeyAuthentication yes  

    修改后(修改后需要执行service sshd restart):

Java代码   收藏代码
  1. RSAAuthentication yes  
  2. PubkeyAuthentication yes  

    后续请参考http://aperise.iteye.com/blog/2253544

 

3.4 安装JDK

    Hadoop2.7需要JDK7,JDK1.6在Hadoop启动时候会报如下错误

Java代码   收藏代码
  1. [hadoop@nmsc1 bin]# ./hdfs namenode -format  
  2. Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/hadoop/hdfs/server/namenode/NameNode : Unsupported major.minor version 51.0  
  3.         at java.lang.ClassLoader.defineClass1(Native Method)  
  4.         at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)  
  5.         at java.lang.ClassLoader.defineClass(ClassLoader.java:615)  
  6.         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)  
  7.         at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)  
  8.         at java.net.URLClassLoader.access$000(URLClassLoader.java:58)  
  9.         at java.net.URLClassLoader$1.run(URLClassLoader.java:197)  
  10.         at java.security.AccessController.doPrivileged(Native Method)  
  11.         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)  
  12.         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
  13.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
  14.         at java.lang.ClassLoader.loadClass(ClassLoader.java:247)  
  15. Could not find the main class: org.apache.hadoop.hdfs.server.namenode.NameNode.  Program will exit.  

     1.下载jdk-7u65-linux-x64.gz放置于/opt/java/jdk-7u65-linux-x64.gz.

     2.解压,输入命令tar -zxvf jdk-7u65-linux-x64.gz.

     3.编辑/etc/profile,在文件末尾追加如下内容

Java代码   收藏代码
  1. export JAVA_HOME=/opt/java/jdk1.7.0_65  
  2. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  3. export PATH=$PATH:$JAVA_HOME/bin  

     4.使配置生效,输入命令,source /etc/profile

     5.输入命令java -version,检查JDK环境是否配置成功。

Java代码   收藏代码
  1. [hadoop@nmsc2 java]# java -version  
  2. java version "1.7.0_65"  
  3. Java(TM) SE Runtime Environment (build 1.7.0_65-b17)  
  4. Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)  
  5. [hadoop@nmsc2 java]#  

 

 3.5 安装Hadoop2.7

    1.只在master上下载hadoop-2.7.1.tar.gz并放置于/opt/hadoop-2.7.1.tar.gz.

    2.解压,输入命令tar -xzvf hadoop-2.7.1.tar.gz.

    3.在/home目录下创建数据存放的文件夹,hadoop/tmp、hadoop/hdfs、hadoop/hdfs/data、hadoop/hdfs/name.

    4.配置/opt/hadoop-2.7.1/etc/hadoop目录下的core-site.xml

Xml代码   收藏代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <configuration>  
  5.        
  6.     <property>  
  7.         <name>fs.trash.intervalname>  
  8.         <value>1440value>  
  9.     property>  
  10.     <property>  
  11.           
  12.         <name>fs.defaultFSname>  
  13.         <value>hdfs://192.168.181.66:9000value>  
  14.     property>  
  15.     <property>  
  16.           
  17.         <name>hadoop.tmp.dirname>  
  18.         <value>file:/home/hadoop/tmpvalue>  
  19.     property>  
  20.     <property>  
  21.           
  22.         <name>io.file.buffer.sizename>  
  23.         <value>131072value>  
  24.     property>  
  25. <property>  
  26.   <name>dfs.namenode.handler.countname>  
  27.   <value>200value>  
  28.   <description>The number of server threads for the namenode.description>  
  29. property>  
  30. <property>  
  31.   <name>dfs.datanode.handler.countname>  
  32.   <value>100value>  
  33.   <description>The number of server threads for the datanode.description>  
  34. property>  
  35. configuration>  
     5.配置/opt/hadoop-2.7.1/etc/hadoop目录下的hdfs-site.xml
Xml代码   收藏代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <configuration>  
  5.     <property>  
  6.           
  7.         <name>dfs.namenode.name.dirname>  
  8.         <value>file:/home/hadoop/hdfs/namevalue>  
  9.     property>  
  10.     <property>  
  11.           
  12.         <name>dfs.datanode.data.dirname>  
  13.         <value>file:/home/hadoop/hdfs/datavalue>  
  14.     property>  
  15.     <property>  
  16.           
  17.         <name>dfs.replicationname>  
  18.         <value>3value>  
  19.     property>  
  20.     <property>  
  21.           
Xml代码   收藏代码
  1.         <name>dfs.namenode.secondary.http-addressname>  
  2.         <value>192.168.181.66:9001value>  
  3.     property>  
  4.     <property>  
  5.       
  6.   <name>dfs.client.socket-timeoutname>  
  7.   <value>600000/value>  
  8. property>  
  9. <property>  
  10.     
  11.   <name>dfs.datanode.max.transfer.threadsname>  
  12.   <value>409600value>  
  13. property>    
  14. configuration>  
     6.配置/opt/hadoop-2.7.1/etc/hadoop目录下的mapred-site.xml.template另存为mapred-site.xml ,修改内容如下:
Xml代码   收藏代码
  1. xml version="1.0"?>  
  2. xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <configuration>  
  5.     <property>  
  6.           
  7.         <name>mapreduce.framework.namename>  
  8.         <value>yarnvalue>  
  9.     property>  
  10.       
  11.         <name>yarn.nodemanager.aux-servicesname>  
  12.         <value>mapreduce_shufflevalue>  
  13.     property>  
  14.     <property>  
  15.         <name>yarn.nodemanager.auxservices.mapreduce.shuffle.classname>  
  16.         <value>org.apache.hadoop.mapred.ShuffleHandlervalue>  
  17.     property>  
  18.     <property>  
  19.           
  20.         <name>yarn.resourcemanager.addressname>  
  21.         <value>192.168.<span style="line-height: 1.5;">181.66span><span style="font-size: 1em; line-height: 1.5;">:8032value>span>  
  22.     property>  
  23.     <property>  
  24.           
  25.         <name>yarn.resourcemanager.scheduler.addressname>  
  26.         <value>192.168.<span style="line-height: 1.5;">181.66span><span style="font-size: 1em; line-height: 1.5;">:8030value>span>  
  27.     property>  
  28.     <property>  
  29.           
  30.         <name>yarn.resourcemanager.resource-tracker.addressname>  
  31.         <value>192.168.<span style="line-height: 1.5;">181.66span><span style="font-size: 1em; line-height: 1.5;">:8031value>span>  
  32.     property>  
  33.     <property>  
  34.           
  35.         <name>yarn.resourcemanager.admin.addressname>  
  36.         <value>192.168.<span style="line-height: 1.5;">181.66span><span style="font-size: 1em; line-height: 1.5;">:8033value>span>  
  37.     property>  
  38.     <property>  
  39.           
  40.         <name>yarn.resourcemanager.webapp.addressname>  
  41.         <value>192.168.<span style="line-height: 1.5;">181.66span><span style="font-size: 1em; line-height: 1.5;">:8088value>span>  
  42.     property>  
  43.     <property>  
  44.           
  45.         yarn.nodemanager.resource.memory-mb  
  46.         2048  
  47.       
  48.   

   

      6) WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

       解决办法  http://zhidao.baidu.com/link?url=_cOK3qt3yzgWwifuMGuZhSOTUyKTiYZfyHr3Xd1id345B9SvSIGsJ-mGLDsk4QseWmBnY5LjxgwHwjKQ4UTFtm8IV6J2im4QfSRh__MhzpW

      7) 很多人单机版Hadoop遇到错误Hadoop hostname: Unknown host

      解决办法:先ifconfig查看本机IP和用hostname查看主机名,比如为 192.168.55.128和hadoop,那就在/etc/hosts增加一条记录192.168.55.128 hadoop,然后同步修改core-site.xml和mapred-site.xml中localhost为hadoop,修改完后执行./hdfs namenode format,执行完后sbin/start-all.sh就可以了

3.7 网上找到一网友关于hadoop2.7+hbase1.0+hive1.2安装的总结,详见附件“我学大数据技术(hadoop2.7+hbase1.0+hive1.2).pdf”

     另外写的比较好的文章有:

      Hadoop2.7.1分布式安装-准备篇      http://my.oschina.net/allman90/blog/485352

      Hadoop2.7.1分布式安装-安装篇      http://my.oschina.net/allman90/blog/486117

3.8 常用shell

 

Java代码   收藏代码
  1. #显示hdfs指定路径/user/下的文件和文件夹  
  2. bin/hdfs dfs –ls  /user/                    
  3. #将本地文件/opt/smsmessage.txt上传到hdfs的目录/user/下  
  4. bin/hdfs dfs –put /opt/smsmessage.txt  /user/      
  5. #将hdfs上的文件/user/smsmessage.txt下载到本地/opt/目录下  
  6. bin/hdfs dfs -get /user/smsmessage.txt /opt/      
  7. #查看hdfs中的文本文件/opt/smsmessage.txt内容  
  8. bin/hdfs dfs  –cat /opt/smsmessage.txt       
  9. #查看hdfs中的/user/smsmessage.txt文件内容  
  10. bin/hdfs dfs  –text /user/smsmessage.txt   
  11. #将hdfs上的文件/user/smsmessage.txt删除  
  12. bin/hdfs dfs –rm /user/smsmessage.txt              
  13. #在执行balance 操作之前,可设置一下balance 操作占用的网络带宽,设置10M,10*1024*1024  
  14. bin/hdfs dfsadmin -setBalancerBandwidth    
  15.   
  16.   
  17.   
  18. #执行Hadoop自带Wordcount例子,/input目录必须存在于HDFS上,且其下有文件,/output目录是输出目录,mapreduce会自动创建  
  19. bin/hadoop jar /opt/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /input /output  
  20.   
  21. #用这个命令可以检查整个文件系统的健康状况,但是要注意它不会主动恢复备份缺失的block,这个是由NameNode单独的线程异步处理的。  
  22. cd /opt/hadoop-2.7.1/bin  
  23. ./hdfs  fsck /  
  24. #Hadoop设置根目录/下的备份数  
  25. cd /opt/hadoop-2.7.1/bin  
  26. ./hadoop fs -setrep -R 2 /  
  27. #也可以使用如下命令  
  28. ./hdfs dfs -setrep -R 2 /  
  29. #打印出了这个文件每个block的详细信息包括datanode的机架信息。  
  30. cd /opt/hadoop-2.7.1/bin  
  31. bin/hadoop  fsck /user/distribute-hadoop-boss/tmp/pgv/20090813/1000000103/input/JIFEN.QQ.COM.2009-08-13-18.30 -files -blocks -locations  -racks  
  32. #查看配置文件hdfs-site.xml中配置项dfs.client.block.write.replace-datanode-on-failure.enable和dfs.client.block.write.replace-datanode-on-failure.policy配置的值  
  33. cd /opt/hadoop-2.7.1/bin  
  34. ./hdfs getconf -confKey dfs.client.block.write.replace-datanode-on-failure.enable  
  35. ./hdfs getconf -confKey dfs.client.block.write.replace-datanode-on-failure.policy  
  36.   
  37. #启动HDFS,该命令会读取slaves和配置文件,将所有节点HDFS相关服务启动  
  38. cd /opt/hadoop-2.7.1/sbin  
  39. ./start-dfs.sh  
  40. #启动yarn,该命令会读取slaves和配置文件,将所有节点YARN相关服务启动  
  41. cd /opt/hadoop-2.7.1/sbin  
  42. ./start-yarn.sh  
  43. #只在单机上启动服务namenode、secondarynamenode、journalnode、datanode  
  44. ./hadoop-daemon.sh start/stop namenode  
  45. ./hadoop-daemon.sh start/stop secondarynamenode  
  46. ./hadoop-daemon.sh start/stop journalnode  
  47. ./hadoop-daemon.sh start/stop datanode  
  48.   
  49. #查看是否在安全模式    
  50. [hadoop@nmsc2 bin]$ cd /opt/hadoop-2.7.1/bin    
  51. [hadoop@nmsc2 bin]$ ./hdfs dfsadmin -safemode get    
  52. Safe mode is OFF    
  53. [hadoop@nmsc2 bin]$     
  54. #离开安全模式    
  55. [hadoop@nmsc2 bin]$ cd /opt/hadoop-2.7.1/bin    
  56. [hadoop@nmsc2 bin]$ ./hdfs dfsadmin -safemode leave    
  57. Safe mode is OFF    
  58. [hadoop@nmsc2 bin]$  
  59. #查看某些参数配置值  
  60. [hadoop@nmsc1 bin]$ cd /opt/hadoop-2.7.1/bin  
  61. [hadoop@nmsc1 bin]$ ./hdfs getconf -confKey dfs.datanode.handler.count  
  62. 100  
  63. [hadoop@nmsc1 bin]$ ./hdfs getconf -confKey dfs.namenode.handler.count  
  64. 200  
  65. [hadoop@nmsc1 bin]$ ./hdfs getconf -confKey dfs.namenode.avoid.read.stale.datanode  
  66. false  
  67. [hadoop@nmsc1 bin]$ ./hdfs getconf -confKey dfs.namenode.avoid.write.stale.datanode  
  68. false  
  69. [hadoop@nmsc1 bin]$   

你可能感兴趣的:(hadoop)