20161209 09:45——10:45
操作备注:只是查阅hadoop的基础理论知识,而产生的认知感觉很浅显,难以具体学习。鉴于此,了解基本运作模块直接进入上手搭建集群环境阶段,在实践中学习。遂有此文,以作记录。
参考资料:
Hadoop知识结构知识图谱
http://lib.csdn.net/base/hadoop/structure
Hadoop生态系统概述
http://lib.csdn.net/article/20/50996?knId=526
Hadoop1.0主要有两个模块组成,分布式存储系统HDFS、分布式计算框架MapReduce。1.0是较旧版本。
Hadoop2.0主要有三个模块组成,分布式存储系统HDFS、资源管理系统YARN、分布式计算框架MapReduce。
HDFS负责redundant,reliable storage,冗余和可靠存储,属于分布式存储层;YARN负责cluster resource management,集群资源管理,属于集群资源管理层;MapReduce负责data processing,数据处理 ,属于分布式计算层;Others同样负责data processing,数据处理。
HDFS的工作原理如下图所示。其节点分为两类,一类是namenode存储着所以block的位置信息,secondnamenode作为namenode的热备份,在namenode宕机时,用来恢复文件信息。数据存储在datanode中。namenode和secondnamenode的数据恢复通过zookeeper实现。
说明:下图中ZK指代zookeeper,DN指代DataNode,NN指代Name Node,NN Active指代主NN,NN Standby指代从属NN
yarn是hadoop2.0的新特性。负责集群的资源管理和调度。其具有良好的扩展性,可以同时对多种应用程序进行资源的管理与调度。更适合当今互联网对大数据不同场景的处理需求。如上图所示,yarn还可以提高集群的资源利用率。例如,当hadoop空闲的时候,可以将空闲资源分配给spark。这样可以提高集群资源利用率。
20161209 14:45——
CentOS 6.5下Hadoop1.1.2环境搭建(单机版)(下面实践过程的主要参考资料)
http://www.linuxidc.com/Linux/2014-08/105268p2.htm
Centos6.8搭建hadoop伪分布模式
http://www.cnblogs.com/ssslinppp/p/5923793.html
Hadoop基础教程之分布式环境搭建
http://www.kwstu.com/ArticleView/hadoop_201408181042089382
20161212 15:20——16:21
单机版hadoop环境搭建和应用部署(实践操作记录)
备注:下面的步骤、流程记录是基于实践的,包含许多尝试和期间问题的处理,所以是波浪式前进和曲折式上升,一波三折。在实践操作记录全面完成后会着手实用操作记录部分,工序流畅、干净利落。
一、java环境准备
1.将jdk安装包直接解压放到usr下
2.编辑profile全局环境变量配置文件,添加如下内容
#=========JDK-env===============
export JAVA_HOME=/usr/local/jdk/jdk1.7.0_79
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$PATH:$JAVA_HOME/bin
3.执行source命令 使得文件立即生效
source /etc/profile
4. 执行命令java -version检测java环境是否准备成功
[root@localhost ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) Client VM (build 24.79-b02, mixed mode)
二、配置ssh免密码登录
20161213 11:07——12:34
操作备注:在研究ssh的时候,仿照教程执行命令ssh时,提示无此命令,而新装系统时能提供ssh登录连接的,于是想到或许是客户端的原因。于是,专门分配时间分析关于ssh的相关配置和结合参数的命令的使用。最终实现免密码登录。
2.1 安装ssh的client端
友情箴言:其实未知与熟识之间相离并不遥远。当遇到未知异常时,不必先将自己置于惊慌的状态,定下心来,逐步分析、突破,最终大事可成。
------未安装client之前-------------------
[root@localhost ~]# ssh
-bash: ssh: command not found
------yum方式安装ssh客户端------------------
yum -y install openssh-clients-5.3p1-118.1.el6_8.i686
------安装client之后---------------------
root@localhost ~]# ssh
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
2.2关于ssh-keygen命令的使用
2.2.1 发现执行man、whatis等命令,也是找不到该命令,于是通过yum命令了解到如下:
[root@localhost ~]# yum whatprovides */man #查询提供命令man的安装包
man-1.6f-32.el6.i686 : A set of documentation tools: man, apropos and #而后 通过这里的信息了解到,原来man和whatis命令是由该软件包提供的
: whatis
Repo : base
Matched from:
Filename : /usr/share/locale/sl/LC_MESSAGES/man
Filename : /usr/bin/man #首先 找到包含二进制可执行命令的man来定位到所需要的正确的软件包
Filename : /usr/share/locale/fr/LC_MESSAGES/man
2.2.2 安装man-1.6f-32.el6.i686软件包并执行man命令了解ssh-keygen的基本使用
[root@localhost ~]# man ssh-keygen
-bash: man: command not found #安装软件包之前命令不可用
yum -y install man-1.6f-32.el6.i686
[root@localhost ~]# man #安装完成后命令可用,可见找到的安装包是正确的
What manual page do you want?
关于ssh-keygen的基本使用
ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen can create RSA keys for use by SSH protocol version 1 and DSA, ECDSA or RSA keys for use by SSH protocol version 2. The type of key to be generated is specified with the -t option. If invoked without any arguments, ssh-keygen will generate an RSA key for use in SSH protocol 2 connections.
2.2.3 使用ssh-keygen生成rsa过程中总遇到Saving the key failed: /root/.ssh/id_rsa.的处理
一是按照提示直接回车可解除,但这时应该是空口令的;二是输入对应于当前或指定账号的口令 也可解除创建失败的报错。
2.2.3关于 使用ssh-keygen生成rsa文件之后免密登录的实现的实践
按照网友实施案例,执行cp操作 基于id_rsa.pub生成authorized_keys文件之后,发现通过执行ssh localhost命名时还是需要输入口令,这时对应的需要id_rsa的口令,才能登录。
尝试处理1:以为是aunthorized_keys文件的位置不正确,于是将它移动到了root家目录层。
发现这样处理后,登录的交互直接要求输入root的口令,于是又原样移动回去了。应该定位到处理要求输入id_rsa口令的部分。
备注:通过参考实施案例,分析id_rsa.pub改名为authorized_keys是正确的,下一步需要围绕id_rsa的使用来研究、处理。(12:34)
尝试处理2:将如上生成的id_rsa文件拷贝到另一台linux中对应于本机的路径下,测试该文件的可用性,结果如下:
1.起初提示存放的id_rsa文件权限过于开放“are too open”,于是修改其属性为600,使用chmod。
2.但是修改后,问题依然存在:居然是和生成该文件的主机中同样的现象——需要输入id_rsa的密码。于是就开始考虑尝试在执行ssh-keygen过程中不输入口令,就像括弧提示中的那样“empty for no passphrase”。
尝试处理3[final]:在执行ssh-keygen -t rsa的过程中不输入密码
(1) 虽然在本小节2.2.3 处理Saving the key failed: /root/.ssh/id_rsa.时认为不输入口令的处理方式下结果会是空口令,但意识到id_rsa文件是被拷贝到其他主机供其免密登录的,考虑到这样的用途,于是尝试在执行ssh-keygen -t rsa的过程中不输入口令——“empty for no passphrase”。(2)如此执行后,先将这样产生的id_rsa文件拷贝到另一台linux主机对等的路惊下并修改其属性,通过执行“ssh 192.168.0.17[对应的hadoop目标主机IP]”,发现免密登录成功;而后试着在生成该文件的主机本机中通过ssh命令测试,发现也是成功的(证实了在本机就可以以此方式来验证是否ssh免密登录设定成功),SSH免密可登录的效果如下:
小结:基于尝试处理3[final],对id_rsa的使用做简单总结。(1)在执行ssh-keygen命令生成该文件的过程中不需要输入口令才能实现由SSH免密登录的效果 (2)在生成该文件之后,将其拷贝到想要由SSH免密登录到本机的linux机器上(wimwods还有待分解怎用)对应本机的存放路径中,即|如:/root/.ssh/
备注(20161213 17:56):1.VisualBox在PC更换AP重新联网或者是与同一AP断开片刻网络连接等只要是Vbox中centos运行过程中宿主主机PC网络连接断开片刻再重连之后恢复Vbox中centos的网络连接很费劲,其中的centos容易与网络断开(ping不通网关),重启网卡和网络服务均无效。只有彻底关机并等候片刻、而后手动开机vbox中的centos 并将网络服务重启后网络才会使得网络重新连接。2.最核心的一点: 使用ssh-keygen -t rsa命令生成rsa的两个文件过程中不要输入密码,把这样生成的id_rsa文件拷贝到另一台linux主机对应的这样的目录下就能实现免密远程登录,并且,在执行ssh-keygen命令的本机上也能验证免密登录设定成功(ssh localhost)! 3.关于ssh免密登录的实践中参考了几篇认真、整洁的博客,只是没有说明关键部分:为实现SSH免密登录的话,在执行ssh-keygen的过程中切勿输入口令(即对应用户的口令,与root或对应账号相同的口令才不会报错)。但理论只是还是值得借鉴的,如下:
linux ssh key配置方法
http://www.cnblogs.com/x_wukong/p/5319440.html
ssh无需密码提示登录
http://blog.csdn.net/wyzxg/article/details/2177502
Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录(关于xshell免密登录的设定)
http://www.aiezu.com/system/linux/xshell_ssh_public-key_login.html
20161214 10:08——10:55;14:34——15:09——16:51
三、.修改分布式集群服务器主机名; hostname与ip地址绑定
参考:Linux系统下如何修改主机名
http://jingyan.baidu.com/article/574c52192a1d8d6c8d9dc1ce.html
3.1.修改分布式集群服务器主机名(10:08——10:55)
核心:编辑两个配置文件,而后重启主机系统
两个配置文件分别为/etc/sysconfig/network ; /etc/hosts,文件中要修改的部分如下:
说明:把文件中“localhost.localdomain”修改为想要设定为的主机名,如修改为“hadoop0”
经实践,发现只有重新启动系统后修改的主机名才会生效,如下:
3.2 hostname与ip地址绑定(14:34——14:51(重新开机 连接网络);14:51——15:22 注解并附图 )
这个时候,如果直接ping hadoop0,分两种情况
1.本机ping测hadoop0是可以的,因为已经在/etc/hosts当中对应回环网址一行中配置了主机名hadoop0,此时实际ping的是回环网址127.0.0.1;
2.其他主机ping测hadoop的话那么是不成功的,因为hadoop0没有绑定对应主机IP,需要先把hadoop0和该主机名的IP手动添加到其他主机的/etc/hosts文件中才行(这涉及域名解析原理,域名信息会首先从本机hosts文件中读取);
其他linux主机ping测得通hadoop的处理方法:
输入:vi /etc/hosts,增加一行:
192.168.0.17 hadoop0
这里192.168.0.17 是我hadoop0主机的Ip地址,之后再ping hadoop0就成功了。
四、安装、初始化配置 并运行hadoop(15:22——16:51实践并记录、总结、附图)
4.1.将安装包hadoop-1.2.1-bin.tar.gz解压安装到/usr/local下
备注:这里的安装包hadoop-1.2.1-bin.tar.gz是二进制包文件,解压即安装,而不是源码包(需编译安装)文件。
cd /usr/local
tar xzvf /root/hadoop-1.2.1-bin.tar.gz #/root是hadoop压缩包的存放位置。即是说直接在被解压路径中执行tar时 注明包文件的所在路径就可以在当前路径从包的存放路径将其解压到当前路径。另外,从这里还可以看出一般与特别之间的对立统一:一般入门级常见的tar解压包文件是不指定路径的,而这种在包名之前限定路径的特殊解压方式,“隔空取物”的效果,就是别于一般的特殊之处。这种想象广泛存在于linux系统管理应用的命令中(一般的不加限定,特别的加以限定就是另一番功能实现)。——————或者说,关于linux命令行使用路径的特殊与一般之间的规则:如,tar命令解压包文件,压缩包文件存在/tmp路径下,tar命令就在该当前目录下执行,特殊写法为 tar xzvf XYZ.tar.gz ,实际严格、完整、等效的一般写法是tar xzvf /tmp/xzvf XYZ.tar.gz 。(这样也就明白了在当前目录解压不在当前路径下的包文件的写法了)这种特殊与一般性规则,与高数中的定理完全一致。
4.2 创建加压后的安装目录hadoop-1.2.1的软连接(非必须,方便管理而已)
ln -s hadoop-1.2.1 hadoop
4.3 编辑配置文件,初始化配置参数
采用伪分布式hadoop配置
进入hadoop的安装目录|解压目录下的conf目录|文件夹,修改配置文件。
注意:下面的“hadoop0”是你的电脑主机名,根据自己的主机名来修改。
(1).指定jdk安装位置,在Hadoop-env.sh中编辑:
export JAVA_HOME=/usr/local/jdk/jdk1.7.0_79 #对应自己服务器中java的安装路径|环境变量
(2).配置HDFS地址和端口号,在core-site.xml中编辑:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop0:9000</value>
</property>
< /configuration>
(3).配置hadoop分布主机数量,在hdfs-site.xml中编辑[默认的配置方式是3,在单机版的hadoop中,将其改为1] :
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
< /configuration>
(4).配置JobTracker的地址和端口,在mapred-site.xml中编辑:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop:9001</value>
</property>
< /configuration>
4.4 格式化hadoop的HDFS,并启动hadoop进程以及设定应用级配置
(1)在启动hadoop前,需要格式化hadoop的HDFS。进入hadoop的安装目录,格式化文件系统,输入:
bin/hadoop namenode -format
(2)接下来启动hadoop,输入命令,启动所有进程:
bin/start-all.sh
(3.1) 可以通过“jps”命令来查看运行的进程,如果成功运行,那么将会有6个进程运行,如下图:
分别是:secondaryNameNode、DataNode、JobTracker、TaskTracker、Jps和NameNode
(3.2) 为了方便,也可以把/usr/local/hadoop/bin的路径添加到PATH下,那么久可以直接通过命令:start-all.sh来启动。
vi /etc/profile #编辑全局变量配置文件
source /etc/profile #使得配置的更新立即生效
(3.3) 配置防火墙使得匹配对应端口号
备注:在防火墙开启状态下只有添加防火墙匹配策略才能访问服务器中的服务;或者通过service iptables stop,在防火墙关闭状态下访问服务。下面记录开启方式的配置:
在防火墙进程开着的状态下访问应用进程所提供的的服务,需要添加匹配策略,mapreduce的端口是50030, HDFS的端口号是50070,操作步骤如下:
vim /etc/sysconfig/iptables #通过直接编辑防火墙配置文件的方式添加如下匹配策略
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50030 -j ACCEPT #添加的mapreduce匹配策略
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50070 -j ACCEPT #添加的HDFS的端口匹配策略
service iptables restart #重启防火墙进程使得新增策略生效
iptables -L -n #查看防火墙策略是否生效
4.5 验证hadoop是否安装成功。
基于上一小节4.4防火墙的处理,在windows中访问,打开浏览器,分别输入网址:
192.168.0.17:50030(mapreduce的web页面)
192.168.0.17:50070(HDFS的web页面)
备注:如果在windows主机中hosts配置文件中绑定了hadoop0和该主机的IP,则可以直接使用hadoop0替换上面的IP来进行访问。
windows中hosts文件存放在C:\Windows\System32\drivers\etc路径下,文本方式打开编辑绑定即可。
输入上述网址相应界面分别 显示如下:
至此,二进制安装包方式安装的单机版hadoop环境就初步搭建完成,该分布集群环境的实质是基于单机环境的伪分布。
操作备注:下一步将单机版伪分布集群的实践记录中的步骤进行梳理,使之简洁有序、干净利落。或,趁热打铁,另开一博客,实践Hadoop基础之分布式环境搭建。