1、hadoop项目简介 hadoop核心项目:1)HDFS(分布式系统)2)MapReduce(并行计算框架) (1)HDFS的体系结构: 1)它是一个主从结构: 主节点,只有一个,namenode 从节点,有很多个,datanodes 2)namenode的职责: 11)接受用户请求 22)维护文件系统的目录结构 33)管理文件和block(块)之间关系,block(块)与datanode之间关系 3)datanode的职责: 11)存储文件 22)文件被分成block(块)存储在磁盘上 33)为保证数据安全,文件会有多个副本,一般是3个副本。 相当于一个大的文件分成多个块,每个块一般为64M,每一个块分别存放在datanode上,而namenode维护每一块之间的关系和每一块和datanode之间的关系。从而构成一个整体。 (2)MapReduce的体系结构 1)它也是一个主从式的结构 主节点,只有一个,JobTracker 从节点,有很多个,TaskTrackers 2)JobTracker主要的职责: 11)接受客户提交的计算任务 22)把计算任务分配给TaskTracker执行 33)监控TaskTracker的执行情况,及时返回结果 3)TaskTrackers主要负责的任务 11)执行JobTracker分配的计算任务 (3)hadoop的特点 1)扩容能力:能可靠的存储和处理千兆字节的数据 2)成本低:可以通过普通的机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点 3)高效率:通过分发数据,hadoop可以在数据所在的节点上并行地处理他们,这使得处理非常快速。 4)可靠性:hadoop能自动的维护数据的多份副本,并且在任务失败后能自动地重新部署计算任务。 2、搭建hadoop的伪分布环境 (1)宿主机(window)和客户机(linux)网络连接方式 1)host-only 宿主机与客户机单独组网 2)bridge(桥连接) (客户机与宿主机在同一个局域网中) (2)hadoop的伪分布安装步骤 1)设置静态ip 11)在centos桌面右上角的图标上,邮件修改。 22)在控制台界面执行:service network restart 命令使得修改的ip地址生效 33)执行ifconfig命令查看是否生效 2)修改主机名,主机名类似域名一样的东西,因此每台机器都通过主机名来作为他的名字。 11)查看主机名:hostname 22)修改主机名:hostname 主机名 (此时修改时临时有效,要永久有效,则需要修改/etc/sysconfig/network配置文件,修改相应的名字即可) 3)将上面修改后的主机名和对应的ip地址绑定 修改/etc/hosts文件,即增加一行内容为:主机的ip地址 主机名 验证就是ping一下主机名即可 4)关闭防火墙 service iptables status 查看防火墙 service iptables stop 关闭防火墙 5)chkconfig --list 查看所有开启的服务,后面如跟on则表示该程序是开机自动启动的。为了想将防火墙彻底关闭,因此必须将开机自启动关闭。 chkconfig --list |grep iptables 查看防火墙是否是开机自启动。 (grep表示过滤的意思) chkconfig iptables off 关闭防火墙的开机自启动功能。 6)SSH(secure shell)【使用root用户登录】 <1>执行命令 ssh-keygen -t rsa 产生密钥,位于~/.ssh文件夹中执行 ,-t rsa表明加密算法 <2>执行命令 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys #注意~表示当前用户的主目录,即home目录,root用户就是/root下。 验证:ssh localhost 免密码登录另一个用户。 注意:如果是在安装分布式集群的时候,需要在每一个节点上都生成这个密钥,并且拷贝到相应的authorized_keys 文件中,最后需要制作一个公钥:就是所有节点上的authorized_keys 的内容合并成一个authorized_keys 。最后用这个公钥要替换所有节点的authorized_keys 。 7)安装jdk。 <1>执行rm -rf /usr/local/* 删除/usr/local/目录下所有内容。 <2>使用ssh工具将jdk上传到linux中 <3>给jdk安装文件授予执行权限:chmod 744 文件名 <4>执行./jdk文件名。必须在usr/local/*中执行,否则在其他路径下执行找不到相应的文件。 <5>修改文件名 mv jdk-8u jdk <6>修改环境变量即修改 vi /etc/profile文件即可。在该文件夹中添加两行内容 export JAVA_HOME=/usr/local/jdk export PATH=.:$JAVA_HOME/bin:$PATH 保存退出 <7>执行 source /etc/profile 命令,让修改的环境变量立即生效 8)安装hadoop <1>执行命令 tar -zxvf hadoop-1.1.2.tar.gz 进行解压缩 <2>重命令hadoop1.1.2:mv hadoop1.1.2 hadoop <3>配置环境变量,即增加hadoop的环境变量,即在/etc/profile中增加一行 export HADOOP_HOME=/hadoop/hadoop export PATH=.:$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin 保存退出 <4>执行 source /etc/profile 命令,让修改的环境变量立即生效 <5>修改hadoop的配置文件,位于$HADOOP_HOME/conf目录下的四个文件,分别是:hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml。具体修改内容如下 11)hadoop.sh文件 export JAVA_HOME=/home/jdk #jdk的安装路径 ,注意原文件中该行前面有一个#号,应该将它去掉 22)core-site.xml文件 ///该文件就是指定namenode节点的安装位置,主机名就是指定安装位置。 <configuration> <property> <name>fs.default.name</name> <value>hdfs://hadoop:9000</value> #这里的hadoop0表示的是主机名,9000表示的是端口号,所以根基相应的主机名做相应的改动 <description>change your own hostname</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/hadoop/hadoop/tmp</value> #这里填写hadoop的安装路径加/tmp </property> </configuration> 33)hdfs-site.xml文件 <configuration> <property> <name>dfs.replication</name> <value>1</value> #指定存储副本的个数 </property> <property> <name>dfs.permissions</name> <value>false</value> #这里填写hadoop的安装路径加/tmp </property> </configuration> 44)mapred-site.xml文件 <configuration> <property> <name>mapred.job.tracker</name> <value>hadoop:9001</value> #这里的hadoop0表示的是主机名,9000表示的是端口号,所以根基相应的主机名做相应的改动 </property> </configuration> 注意:上面四个文件是在伪分布下修改的,若需要设置完全分布模式的话,还需要修改两个文件:一个是masters和slves文件。 masters主要是添加安装namenode和jobtracker节点的主机名 slves主要是添加安装datanode和tasktracker节点的主机名 还有,在完全分布式中,如果六个文件都修改好了,就将hadoop拷贝到所有的节点中,采用scp -r /hadoop h1:/home/grid -----> 表示将hadoop的文件夹递归的拷贝到h1节点的home/grid的目录路下 <6>执行命令 hadoop namenode -format 对hadoop进行格式化 #这里需要注意可能会出现一个错误: <7>执行命令 start-all.sh启动hadoop 验证是否启动了hadoop:(1)执行命令jps会发现启动了5个java进程,分别是:JobTracker,NameNode,TaskTracker,DataNode,SecondaryNameNode (2)通过linux浏览器输入网址:hadoop:50070可以看到Namenode相应的界面。 (3)通过linux浏览器输入网址:hadoop:50030可以看到Mapreduce相应的界面。 (4)windows主机浏览的话可以设置C:\windows\System32\drivers\etc\hosts文件,增加一个 linux虚拟机的ip 主机名 即可。 <8>一般没有成功会出现的问题:namenode进程没有启动成功?(1)有可能是没有格式化,(2)也有可能配置文件修改的问题。(3)hostname与ip没有绑定(4)ssh的免密码登录没有配置成功 <9>也有可能多次格式化hadoop也可能引起错误?解决方式是 :删除hadoop安装目录下的/tmp文件夹,重新格式化即可。 3、使用eclipse查看hadoop源码