




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1节:环境准备1.1.VirtualBox的安装VirtualBox简介VirtualBox号称是免费虚拟机软件中最强的,拥有丰富的特色和出色的性能,在虚拟机市场占用重要地位。我们选择它的理由是:*安装程序体积小。相对于同类产品VMWare的四五百兆的体积,VirtualBox只有几十兆的安装程序,安装完成后也只有120多兆,太小巧了。*功能简单实用。配置简单、克隆系统、共享文件、虚拟化等一样不缺*免费。这是最大的诱惑。安装读者根据自己的电脑情况下载适合自己操作系统的安装程序,作者的系统是Windows XP 32位,以下截图是来自Windows XP的。VirtualBox的安装非常简单,
2、只需要根据提示一步步选择“Next”即可,遇到回答“Yes”还是“No”的地方,选择“Yes”。在安装过程中,会出现暂时的网络中断,不要惊慌,一会就会恢复。安装完成后,在电脑的“网络连接”中,会多出一个网络连接,如图2-1所示。图2-1点击桌面上的VirtualBox图标,就可以打开了,如图2-2所示。图2-2我们现在对虚拟机进行一些优化设置。点击菜单栏中的“管理”菜单项,选择“全局设定”命令,如图2-3 所示。图2-3出现一个弹出对话框d1 ,在“常规”设置中,可以修改“默认虚拟电脑位置”,设定一个磁盘空间较大的位置,如图2-4所示。图2-4选择“热键”选项,可以修改什么按键作为热
3、键。如图2-5所示,当用鼠标选中热键的时候,可以接收键盘输入。作者根据自己的习惯修改为组合键“Ctrl”+“Alt”。图2-5选择“扩展”选项,点击安装符号,选择一个扩展包进行安装,如图2-6所示。图2-6至此,虚拟机安装结束。1.2.RedHat安装1.RedHat简介RedHat既是一个公司的名称,也是一款linux产品的名称。RedHat公司生产RedHat Linux。该公司发布的Linux是基于开源产品的,如果我们下载使用是免费的,如果进行升级或者接收技术支持,那就需要收费了。RedHat主要应用于服务器领域,在服务器市场占有很大的市场份额。2.RedHat安装2.1 新建虚拟机并配
4、置参数点击工具栏中的“新建”按钮,弹出窗口,设置以下内容,如图2-7所示,点击“下一步”按钮。图2-7内存大小默认值是512,修改为1024,如图2-8所示,点击“下一步”按钮。图2-8内存是安装和运行操作系统使用的。当使用512MB内存安装RedHat时,会自动安装服务器版本,即只有命令行,没有图形窗口。设置是否创建虚拟硬盘,使用默认值,如图2-9所示,点击“创建”按钮。图2-9选择虚拟磁盘类型,我们使用默认值,如图2-10所示,点击“下一步”按钮。图2-10设置是否动态分配磁盘空间,使用默认值,如图2-11所示,点击“下一步”按钮。图2-11设置磁盘文件大小和存放位置,使用默认值,如图2-
5、12所示,点击“创建”按钮。图2-12弹出对话框关闭,如图2-13所示。图2-13点击工具栏的设置,会弹出一个针对本操作系统设置的窗口,如图2-14所示。图2-14选择“常规”选项,修改允许双向粘贴和拖放功能,如图2-15所示。图2-15选择“存储”选项,增加光驱,如图2-16所示,点击“选择磁盘”,把我们的RedHat操作系统的iso文件选中。图2-16这样系统启动的时候会从虚拟光驱引导,进行安装,这一步很重要。选择“网络”选项,将网络连接方式修改为“仅主机适配器”,如图2-17所示。图2-17点击弹出对话框右下角的“确定”按钮,关闭对话框,如图2-18所示。图2-18Host-Only连接
6、方式,使得宿主机和客户机可以单独构造一个网络,不同于宿主机所在的网络。这样,两个网络完全隔离。新搭建的网络的网段是192.168.56。2.2. 操作系统的安装点击虚拟机工具栏的“启动”,就会弹出窗口,进入操作系统的安装界面,如图2-19所示。图2-19用鼠标点击窗口,然后按回车键,就进入了RedHat安装的引导过程。小提示:现在鼠标已经被虚拟机独占。这时键盘和鼠标操作都是针对客户机的,不能针对宿主机操作。如果要退出独占,按组合键“Ctrl”+“Alt”。该按键在图2-5中已经设置。如图2-20,询问是否检查磁盘,选择“Skip”,然后按回车键。图2-20如图2-21所示,点击“Next”按钮
7、。图2-21选择安装语言,读者可以根据自己的喜好选择,建议使用英文,如图2-22所示,点击“Next”按钮。图2-22选择键盘类型,这里使用默认值,如图2-23所示,点击“Next”按钮。图2-23选择设备类型,这里使用默认值,如图2-24所示,点击“Next”按钮。图2-24询问是否格式化磁盘空间,选择“Yes”,如图2-25所示,点击“Next”按钮。图2-25小提示:这里的格式化操作不会造成我们windows系统的空间数据丢失,只是对空间的空间进行格式化处理,大家不要担心。修改主机名称,我们使用“hadoop0”,如图2-26所示,点击“Next”按钮。图2-26注意:在以后的章节中,会
8、使用这里设定的主机名,如果读者不使用“hadoop0”,请在以后的操作时注意修改。选择时区,我们修改为“Asia/Shanghai”,如图2-27所示,点击“Next”按钮。图2-27设置root账户的密码,我们使用“wuchao”作为密码,如图2-28所示,点击“Next”按钮。图2-28注意:该密码是以后登录linux系统时必须使用的,请读者牢记。这里的密码设置过于简单,是为了学习方便。在正式生产服务器中绝对不能这么设置密码,很容易被黑客攻破,应该设置为数字、大小写字母、特殊符号的组合。警告密码过于简单,不用理会,点击“Use Anyway”按钮,如图2-29所示。图2-29选择安装类型,
9、我们使用默认值,如图2-30所示,点击“Next”按钮。图2-30出现确认信息,询问这样做会造成磁盘数据丢失。由于是新的虚拟机磁盘,没有数据,我们同意,点击“Write changes to disk”按钮,如图2-31所示。图2-31询问安装的RedHat类型,我们选择“Desktop”,在最下面的软件定制选项,我们选择“Customize now”,如图2-32所示,点击“Next”按钮。图2-32在软件定制部分,我们选择安装MySQL数据库,如图2-33所示,在我们以后学习Hive时会用到,点击“Next”按钮。图2-33然后进入操作系统的安装过程,如图2-34,会持续很长时间,读者不要
10、随时操作虚拟机,防止安装失败,请耐心等待。图2-34经过漫长的等待,终于安装完了,如图2-35所示,点击右下角的“Reboot”按钮。图2-353. 系统的初始配置系统重启后进入系统初始配置页面,如图2-36所示,点击“Forward”按钮。图2-36这是关于操作系统的使用协议,我们当然同意了,如图2-37所示,点击“Forward”按钮。图2-37进行软件的自动更新,我们没有联网,没有注册,不能更新,如图2-38所示,点击“Foward”按钮。图2-38询问是否创建一个非管理员用户,如图2-39所示,我们这里不创建,点击“Foward”按钮。图2-39询问是否修改系统时间,我们不做修改,如图
11、2-40所示,点击“Foward”按钮。图2-40提示内存不足,我们不用理会,如图2-41所示,点击“OK”按钮。图2-41正是因为上一步的内存不足,才造成下面的选项全是灰色,如图2-42所示,点击“Finish”按钮。图2-42系统加载刚才的配置信息,终于进入登录页面了,如图2-43所示。图2-43点击“Other”,输入用户名root,如图2-44所示,点击“Log in”按钮。图2-44输入密码wuchao,如图2-45所示,点击“Log in”按钮。图2-45注意:root用户具有最高权限,操作方便,本书所有操作都是以root用户进行的,实际工作中一般不会直接使用root用户。读者如果
12、对linux权限不熟悉,请一定使用root用户操作,免得出现无谓的错误,自己搞不定。这样,就看到了RedHat的桌面,如图2-46所示。图2-46桌面最上面是菜单栏,右上角有个红叉,这表明网络没有连通。在红叉上点击右键,出现右键菜单,如图2-47所示。图2-47点击“Edit Connections”,弹出对话框,如图2-48所示。图2-48选中连接,点击右侧“Edit”,出现弹出对话框,如图2-49所示。图2-49左上角有个复选框,请选中,表示启用自动连接,然后点击右下角的“Apply”,然后依次关闭弹出窗口。会发现桌面右上的红叉消失了,这表明网络已经连通了。在桌面上鼠标右键,选择“Open
13、 in terminal”,输入命令ifconfig,可以查看到网卡地址是01,如图2-50所示。图2-50至此,RedHat安装完毕。4 Hadoop的伪分布安装前准备可以安装PieTTY 0.3.26.exe进行远程登录进行命令操作(1) 设置静态ip 在centos桌面右上角的网络连接图标,右键修改, Ip:00 子网掩码: 网关: dns:重启网卡:service network restart测试:执行ifconfig查看结果(2) 修改主机名 <1>
14、 修改当前会话的主机名:hostname XXX<2> 修改配置文件中的主机名:vi /etc/sysconfig/network 注意:需重启机器:shutdown r now 或reboot h now(3) 把hostname和ip绑定Vi /etc/hosts 增加00 XXX测试:ping XXX(4) 关闭防火墙 Service iptables stop 测试:service iptables status注意:如果重启电脑,防火墙有可能自动启动,可以通过chkconfig list |grep iptables查看,如果存在on,可以通过ch
15、kconfig iptables off 停止自动启动1.3.JDK安装我们使用的版本是Oracle的jdk-6u24-linux-i586.bin。首先,把jdk移动到/usr/local目录下。进入到/usr/local目录下,通过“.”解压文件,如图2-55所示。图2-55解压缩完成后,我们可以查看到新产生的目录jdk1.6.0_24,使用mv命令重命名为jdk,目的是方便以后引用,如图2-56所示。图2-56接下来把jdk的命令配置到环境变量中。在linux下,有很多配置环境变量的地方,分为全局环境变量和局部环境变量。linux加载的时候,会先找全局环境变量,如果找不到,就找局部变量。
16、本书中,我们只设置全局环境变量。使用gedit命令打开文件“/etc/profile”, 如图2-57所示。图2-57在文件最后增加以下内容,读者可以复制粘贴我的内容。export JAVA_HOME=/usr/local/jdkexport PATH=.:$PATH:$JAVA_HOME/bin保存关闭后,需要在shell环境下执行命令如下命令。#source /etc/profile我解释一下上面的配置内容:“export”是关键字,用于设置环境变量。我们设置了两个环境变量,一个是JAVA_HOME,一个是PATH。对于环境变量的引用,使用“$”,多个环境变量之间的连接,使用“:”。大家在
17、设置环境变量的时候,一定与windows下的操作区分开,不要混淆。命令“source”是为了让文件中的设置立刻生效。现在使用“java -version”命令,如果看到如图2-58的输出,那就证明一切顺利。1.4.SSH配置免密码登陆 如果我们需要远程管理其他机器的话,一般使用远程桌面或者telnet。linxu服务器几乎都是命令行,所以只能使用telnet了。telnet的缺点是通信不加密,非常不安全,只适合于内网访问。为解决这个问题,推出了加密的通信协议,即SSH。SSH的全称是Secure Shell,使用非对称加密方式,传输内容使用rsa或者dsa加密,可以有效避免网络窃听。
18、 hadoop的进程之间通信使用ssh方式,需要每次都要输入密码。为了实现自动化操作,我们下面配置SSH的免密码登录方式。 首先到用户主目录下,如图2-64所示。图2-64 在“ls -a”命令显示的文件中,最后一列中间一项是“.ssh”,该文件夹是存放密钥的。注意该文件夹是以“.”开头的,是隐藏文件。待会我们生成的密钥都会放到这个文件夹中。
19、160; 现在执行命令,生成密钥,如图2-65所示。图2-65 解释一下:命令“ssh-keygen -t rsa”表示使用rsa加密方式生成密钥, 回车后,会提示三次输入信息,我们直接回车即可。 然后进入密钥文件夹,执行命令,如图2-66所示。图2-66 其中,命令“cp
20、id_rsa.pub authorized_keys”用于生成授权文件。至此,配置部分完成了。 这里为什么要使用ssh登录本机哪?因为hadoop在本机部署时,需要使用ssh访问。 注意:文件夹“.ssh”中的三个文件的权限,是有要求的,“自己之外的任何人对每个文件都没有写权限”。另外,“.ssh”文件夹是700权限。如果权限有问题,会造成SSH访问失败。
21、160; 现在开始验证SSH无密码登录,如图2-67所示。图2-67 执行“ssh localhost”意味着使用“ssh”通信协议访问主机“localhost”,第一次执行时需要确认;第二次不再确认了。这就是无密码登录。当登录到对方机器后,退出使用命令“exit”。这两次操作时,注意观察主机名变化。读者可以执行命令“ssh book0”,验证dns对book0解析是否正确。 注意:使用命令ssh时,一定要
22、观察主机名的变化。很多同学在操作ssh时,由于大量的使用ssh登录退出,忘记自己目前在哪台机器了,执行了大量错误的操作。 另外,如果多次执行ssh,每次都要输入确认信息的话,说明配置失败了。可以删除文件夹“.ssh”,重新配置。也可以重启虚拟机再配置。只要严格按照上面的步骤操作,保证能够成功的。 如果还搞不定,给你个绝招” 删除/etc/udev/rules.d/70-persistent-net.rules文件,重启系统”。&
23、#160; 配置出错,可以查看/var/log/secure日志文件,找原因。 至此,恭喜你,开发环境搭建完工。1.5.Hadoop伪分布安装hadoop的安装分为本地模式、伪分布模式、集群模式。本地模式是运行在本地,只负责存储,没有计算功能,本书不讲述。伪分布模式是在一台机器上模拟分布式部署,方便学习和调试。集群模式是在多个机器上配置hadoop,是真正的“分布式”。本章讲述伪分布模式和集群的安装。1. 解压缩hadoop使用WinSCP
24、把压缩包hadoop-1.1.2.tar.gz从宿主机复制到linux的/usr/local目录下,如图3-1。图3-1解压缩文件,并重命名为hadoop,方便使用。重命名后,hadoop目录的完整路径是“/usr/local/hadoop”。#tar -xzvf hadoop-1.0.4.tar.gz#mv hadoop-1.0.4 hadoop设置环境变量HADOOP_HOME,修改文件“/etc/profile”,如下图:图3-2请读者与jdk设置时配置文件对照。这里我们设置了一个别名cdha,可以快速转到hadoop的目录。修改环境变量后,记得执行source命令哦。现在让我们浏览一下
25、hadoop的目录结构吧图3-3我们关注bin目录和conf目录。2. 修改配置文件hadoop配置文件默认是本地模式,我们修改四个配置文件,这些文件都位于$HADOOP_HOME/conf目录下。第一个是hadoop环境变量脚本文件hadoop-env.sh,修改第9行代码为。export JAVA_HOME=/usr/local/jdk保存并关闭。这里设置的是JAVA_HOME,注意去掉前面的“#”。第二个是hadoop核心配置文件core-site.xml,结果如下<configuration><property><name>hadoop.tmp.di
26、r</name><value>/home/hadoop/tmp</value><description>hadoop的运行临时文件的主目录</description></property><property><name></name><value>hdfs:/book0:9000</value><description>HDFS的访问路径</description></property></c
27、onfiguration>第三个是hdfs配置文件hdfs-site.xml,结果如下<configuration><property><name>dfs.replication</name><value>1</value><description>存储副本数</description></property></configuration>第四个是MapReduce配置文件mapred-site.xml,结果如下<configuration><prop
28、erty><name>mapred.job.tracker</name><value>book0:9001</value><description>JobTracker的访问路径</description></property></configuration>这是安装伪分布模式的最小化配置。目前的任务是把hadoop跑起来,先不关注各配置项什么含义,这些配置项还在后文会有详细的解释。3. 格式化文件系统hdfs是文件系统,所以在第一次使用之前需要进行格式化。执行命令$HADOOP_HOME/b
29、in/hadoop namenode format。见图3-4图3-4注意:只在第一次启动的时候格式化,不要每次启动都格式化。理解为我们新买了块移动硬盘,使用之前总要格式化硬盘。如果真的有必要再次格式化,请先把“$HADOOP_HOME/tmp”目录下的文件全部删除。读者可以自己观察目录”$HADOOP_HOME/tmp”在格式化前后的变化情况。格式化操作很少有出现失败的情况。如果真出现了,请检查配置是否正确。4. 启动格式化完成后,开始启动hadoop程序。启动hadoop的命令脚本都在$HADOOP_HOME/bin/下,下面的所有命令都不再带有完整路径名称。这里讲述hadoop启动的三种
30、方式:第一种,一次性全部启动:图3-5执行start-all.sh启动hadoop,观察控制台的输出,见图3-5,可以看到正在启动进程,分别是namenode、datanode、secondarynamenode、jobtracker、tasktracker,一共5个,待执行完毕后,并不意味着这5个进程成功启动,上面仅仅表示系统正在启动进程而已。我们使用jdk的命令jps查看进程是否已经正确启动。执行以下jps,如果看到了这5个进程,见图3-6,说明hadoop真的启动成功了。如果缺少一个或者多个,那就进入到“Hadoop的常见启动错误”章节寻找原因了。图3-6关闭hadoop的命令是stop
31、-all.sh。上面的命令是最简单的,可以一次性把所有节点都启动、关闭。除此之外,还有其他命令,是分别启动的。第二种,分别启动HDFS和MapReduce:图3-7执行命令start-dfs.sh,是单独启动hdfs,见图3-7。执行完该命令后,通过jps能够看到NameNode、DataNode、SecondaryNameNode三个进程启动了,该命令适合于只执行hdfs存储不使用MapReduce做计算的场景。关闭的命令就是stop-dfs.sh了。图3-8执行命令start-mapred.sh,可以单独启动MapReduce的两个进程。关闭的命令就是stop-mapred.sh了。当然,
32、也可以先启动MapReduce,再启动HDFS。这说明,HDFS和MapReduce的进程之间是互相独立的,没有依赖关系。第三种,分别启动各个进程:rootbook0 bin# jps14821 Jpsrootbook0 bin# hadoop-daemon.sh start namenoderootbook0 bin# hadoop-daemon.sh start datanoderootbook0 bin# hadoop-daemon.sh start secondarynamenoderootbook0 bin# hadoop-daemon.sh start jobtrackerroot
33、book0 bin# hadoop-daemon.sh start tasktrackerrootbook0 bin# jps14855 NameNode14946 DataNode15043 SecondaryNameNode15196 TaskTracker15115 JobTracker15303 Jps执行的命令是“hadoop-daemon.sh start 进程名称”,这种启动方式适合于单独增加、删除节点的情况,在安装集群环境的时候会看到。5. 运行简单的MapReduce计算在$HADOOP_HOME下有个jar包,叫hadoop-example-1.1.2.jar,见图3-9,
34、这里面含有框架提供的很多例子.我们现在学习一下如何运行其中的例子吧.图3-9hadoop jar hadoop-example-1.1.2.jar执行如下命令可以看到图3-10的输出信息,可以看到18个输出信息,都是内置的例子程序.我们选择最后一个”word count”来运行,该程序的说明在最后,是统计文件中单词的出现次数的.图3-10如何执行这个程序哪?见图3-11,如下图3-11根据用法,我们需要补全wordcount的文件输入路径和文件输出路径.我们首先上传一个文件到hdfs中,见图3-12.那么输入文件的路径就是/README.txt了。图3-12这时候我们再运行wordcount例
35、子,命令如下hadoop jar hadoop-examples-1.1.2.jar wordcount/README.txt /wordcountoutput在这条命令中,“/README.txt”是我们刚才上传到hdfs中的文件,作为输入路径;“/wordcountoutput”是设定的输出路径,该路径在命令执行前是不存在的。等到命令执行结束,运行的结果就会存在输出路径的文件夹中,文件名称叫做“part-r-00000”,我们使用命令查看输出内容,如图3-13图3-13以上只是显示了一部分。显示结果是按照字符的字段顺序排列的,每一行显示字符及出现次数。如果读者能够成功运行,那么恭喜你!你看
36、到的就是hadoop的MapReduce做的事情。通过一个简单的命令,就可以把文件中的单词统计一遍出现次数,还是很有意思的。参加工作后,大家会根据输入文件的内容和类型,写这样的算法程序,产生输出结果。1.6. Warning:$HADOOP_HOME is deprecated 解决方法我们在执行脚本start-all.sh,启动hadoop时,有时会出现如下图的警告信息虽然不影响程序运行,但是看到这样的警告信息总是觉得自己做得不够好,怎么去掉哪?我们一步步分享,先看一下启动脚本start-all.sh的源码,如下图虽然我们看不懂shell脚本的语法,但是可以猜到可能和文件hadoo
37、p-config.sh有关,我们再看一下这个文件的源码。该文件特大,我们只截取最后一部分,见下图从图中的红色框框中可以看到,脚本判断变量HADOOP_HOME_WARN_SUPPRESS和HADOOP_HOME的值,如果前者为空,后者不为空,则显示警告信息“Warning”。我们在安装hadoop是,设置了环境变量HADOOP_HOME造成的。网上有的说新的hadoop版本使用HADOOP_INSTALL作为环境变量,我还没有看到源代码,并且担心其他框架与hadoop的兼容性,所以暂时不修改,那么只好设置HADOOP_HOME_WARN_SUPPRESS的值了。修改配置文件/etc/profi
38、le(我原来一直在这里设置环境变量,操作系统是rhel6.3),增加环境变量HADOOP_HOME_WARN_SUPPRESS,如下图保存退出,再次启动hadoop,就不会出现警告信息了,如下图搞定,收工!第2节:HDFS-分布式文件系统2.1. HDFS体系结构与基本概念我们通过hadoop shell上传的文件是存放在DataNode的block中,通过linux shell是看不到文件的,只能看到block。可以一句话描述HDFS:把客户端的大文件存放在很多节点的数据块中。在这里,出现了三个关键词:文件、节点、数据块。HDFS就是围绕着这三个关键词设计的,我们在学习的时候也要紧抓住这三个
39、关键词来学习。NameNode作用NameNode的作用是管理文件目录结构,是管理数据节点的。名字节点维护两套数据,一套是文件目录与数据块之间的关系,另一套是数据块与节点之间的关系。前一套数据是静态的,是存放在磁盘上的,通过fsimage和edits文件来维护;后一套数据是动态的,不持久化到磁盘的,每当集群启动的时候,会自动建立这些信息。目录结构既然NameNode维护了这么多的信息,那么这些信息都存放在哪里呢?在hadoop源代码中有个文件叫做core-default.xml,如图4-51所示。图4-51打开这个文件,在第149行和第158行,有两个配置信息,一个是.dir,
40、另一个是.edits.dir。这两个文件表示的是NameNode的核心文件fsimage和edits的存放位置,如图4-52所示。图4-52在对应配置的value值有$,这是变量的表示方式,在程序读取文件时,会把变量的值读取出来。那么,第150行的变量hadoop.tmp.dir的值是在我们上一章的配置文件core-site.xml中配置的,值是/usr/local/hadoop/tmp。可以看出,这两个文件的存储位置是在linux文件系统的/usr/local/hadoop/tmp/dfs/name目录下。我们进入linux文件系统,可以看到如图4-53所示的目录结构。图4-
41、53DataNode作用DataNode的作用是HDFS中真正存储数据的。block如果一个文件非常大,比如100GB,那么怎么存储在DataNode中呢?DataNode在存储数据的时候是按照block为单位读写数据的。block是hdfs读写数据的基本单位。假设文件大小是100GB,从字节位置0开始,每64MB字节划分为一个block,依此类推,可以划分出很多的block。每个block就是64MB大小。block本质上是一个逻辑概念,意味着block里面不会真正的存储数据,只是划分文件的。我们看一下tocol.Block类,这里面的属性
42、有以下几个,如图4-54所示。图4-54类中的属性没有一个是可以存储数据的。为什么一定要划分为64MB大小呢?因为这是在默认配置文件中设置的,我们查看core-default.xml文件,如图4-55所示。图4-55上图中的参数指的就是block的大小,值是67 108 864字节,可以换算为64MB。如果我们不希望使用64MB大小,可以在core-site.xml中覆盖该值。注意单位是字节。副本副本就是备份,目的当时是为了安全。正是因为集群环境的不可靠,所以才使用副本机制来保证数据的安全性。副本的缺点就是会占用大量的存储空间。副本越多,占用的空间越多。相比数据丢失的
43、风险,存储空间的花费还是值得的。那么,一个文件有几个副本合适呢?我们查看hdfs-default.xml文件,如图4-551所示。图4-551从图4-551中可以看到,默认的副本数量是3。意味着HDFS中的每个数据块都有3份。当然,每一份肯定会尽力分配在不同的DataNode服务器中。试想:如果备份的3份数据都在同一台服务器上,那么这台服务器停机了,是不是所有的数据都丢了啊?目录结构既然DataNode的block是划分文件并,那么划分后的文件到底存放在哪里哪?我们查看文件core-default.xml,如图4-56所示。图4-56参数dfs.data.dir的值就是block存放在linu
44、x文件系统中的位置。变量hadoop.tmp.dir的值前面已经介绍了,是/usr/local/hadoop/tmp,那么dfs.data.dir的完整路径是/usr/local/hadoop/tmp/dfs/data。通过linux命令查看,结果如图4-57所示。图4-57上图中以“blk_”开头的文件就是存储数据的block。这里的命名是有规律的,除了block文件外,还有后缀是“meta”的文件,这是block的源数据文件,存放一些元数据信息。因此,上图中只有2个block文件。注意:我们从linux磁盘上传一个完整的文件到hdfs中,这个文件在linux是可以看到的,但是上传到hdfs
45、后,就不会有一个对应的文件存在,而是被划分成很多的block存在的。SecondaryNameNodeSNN只有一个职责,就是合并NameNode中的edits到fsimage中。合并原理图4-582.2. HDFS的shell操作既然HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。我们执行以下操作的时候,一定要确定hadoop是正常运行的,使用jps命令确保看到各个hadoop进程。我们执行命令had
46、oop fs,如图4-1所示。图4-1图中显示了很多命令选项信息。以上截图不全,我在表格4-1中完整地列出了支持的命令选项。选项名称使用格式含义-ls-ls <路径>查看指定路径的当前目录结构-lsr-lsr <路径>递归查看指定路径的目录结构-du-du <路径>统计目录下个文件大小-dus-dus <路径>汇总统计目录下文件(夹)大小-count-count -q <路径>统计文件(夹)数量-mv-mv <源路径> <目的路径>移动-cp-cp <源路径> <目的路径>复制-rm-r
47、m -skipTrash <路径>删除文件/空白文件夹-rmr-rmr -skipTrash <路径>递归删除-put-put <多个linux上的文件> <hdfs路径>上传文件-copyFromLocal-copyFromLocal <多个linux上的文件> <hdfs路径>从本地复制-moveFromLocal-moveFromLocal <多个linux上的文件> <hdfs路径>从本地移动-getmerge-getmerge <源路径> <linux路径>合并到本
48、地-cat-cat <hdfs路径>查看文件内容-text-text <hdfs路径>查看文件内容-copyToLocal-copyToLocal -ignoreCrc -crc hdfs源路径 linux目的路径从本地复制-moveToLocal-moveToLocal -crc <hdfs源路径> <linux目的路径>从本地移动-mkdir-mkdir <hdfs路径>创建空白文件夹-setrep-setrep -R -w <副本数> <路径>修改副本数量-touchz-touchz <文件路径&g
49、t;创建空白文件-stat-stat format <路径>显示文件统计信息-tail-tail -f <文件>查看文件尾部信息-chmod-chmod -R <权限模式> 路径修改权限-chown-chown -R 属主:属组 路径修改属主-chgrp-chgrp -R 属组名称 路径修改属组-help-help 命令选项帮助注意:以上表格中路径包括hdfs中的路径和linux中的路径。对于容易产生歧义的地方,会特别指出“linux路径”或者“hdfs路径”。如果没有明确指出,意味着是hdfs路径。下面我们讲述每个命令选项的用法。-ls 显示当前目录结构该
50、命令选项表示查看指定路径的当前目录结构,后面跟hdfs路径,如图4-1所示。图4-1上图中的路径是hdfs根目录,显示的内容格式与linux的命令ls l显示的内容格式非常相似,下面解析每一行的内容格式:l 首字母表示文件夹(如果是“d”)还是文件(如果是“-”);l 后面的9位字符表示权限;l 后面的数字或者“-”表示副本数。如果是文件,使用数字表示副本数;文件夹没有副本;l 后面的“root”表示属主;l 后面的“supergroup”表示属组;l 后面的“0”、“6176”、“37645”表示文件大小,单位是字节;l 后面的时间表示修改时间,格式是年月日时分;l 最后一项表示文件路径。可
51、见根目录下面有四个文件夹、两个文件。如果该命令选项后面没有路径,那么就会访问/user/<当前用户>目录。我们使用root用户登录,因此会访问hdfs的/user/root目录,如图4-2所示。图4-2如果没有这个目录/user/root,会提示文件不存在的错误。-lsr 递归显示目录结构该命令选项表示递归显示当前路径的目录结构,后面跟hdfs路径。如图4-3所示。图4-3显示/user目录下有个root目录,root目录下有文件abc。-du 统计目录下各文件大小该命令选项显示指定路径下的文件大小,单位是字节,如图4-4所示。图4-4-dus 汇总统计目录下文件大小该命令选项显示
52、指定路径的文件大小,单位是字节,如图4-5所示。图4-5请读者比较图4-4与图4-5的区别,体会两个命令选项的不同含义。-count 统计文件(夹)数量该命令选项显示指定路径下的文件夹数量、文件数量、文件总大小信息,如图4-6所示。图4-6在图4-6中有两条命令,下面的命令是为了佐证上面命令的正确性的。-mv 移动该命令选项表示移动hdfs的文件到指定的hdfs目录中。后面跟两个路径,第一个表示源文件,第二个表示目的目录,如图4-7所示。图4-7在图4-7中有三条命令,是为了体现移动前后的变化情况。-cp 复制该命令选项表示复制hdfs指定的文件到指定的hdfs目录中。后面跟两个路径,第一个是
53、被复制的文件,第二个是目的地,如图4-8所示。图4-8在图4-8中有三条命令,是为了体现复制前后的变化情况。-rm 删除文件/空白文件夹该命令选项表示删除指定的文件或者空目录,如图4-9所示。图4-9在图4-9中,前三条命令是为了体现执行前后的变化情况。第四条命令是删除非空的“/user/root”目录,操作失败,表明不能删除非空目录。-rmr 递归删除该命令选项表示递归删除指定目录下的所有子目录和文件,如图4-10所示。图4-10-put 上传文件该命令选项表示把linux上的文件复制到hdfs中,如图4-11所示。图4-11-copyFromLocal 从本地复制操作与-put一致,不再举
54、例。-moveFromLocal 从本地移动该命令表示把文件从linux上移动到hdfs中,如图4-12所示。图4-12-getmerge 合并到本地该命令选项的含义是把hdfs指定目录下的所有文件内容合并到本地linux的文件中,如图4-13所示。图4-13-cat 查看文件内容该命令选项是查看文件内容,如图4-14所示。图4-14-text 查看文件内容该命令选项可以认为作用和用法与-cat相同,此处略。-mkdir 创建空白文件夹该命令选项表示创建文件夹,后面跟的路径是在hdfs将要创建的文件夹,如图4-15所示。图4-15-setrep 设置副本数量该命令选项是修改已保存文件的副本数量
55、,后面跟副本数量,再跟文件路径,如图4-16所示。图4-16在图4-16中,我们修改了文件/install.log的副本数,由1修改为2,意味着多了一个副本,HDFS会自动执行文件的复制工作,产生新的副本。如果最后的路径表示文件夹,那么需要跟选项-R,表示对文件夹中的所有文件都修改副本,如图4-17所示。图4-17在图4-17中,我们对/user文件夹进行的操作,使用了选项-R,那么/user/root下的文件abc的副本数发生了改变。还有一个选项是-w,表示等待副本操作结束才退出命令,如图4-18所示。图4-18请读者自己比较以上两图中使用-q前后执行结果的变化情况。-touchz 创建空白
56、文件该命令选项是在hdfs中创建空白文件,如图4-19所示。图4-19-stat 显示文件的统计信息该命令选项显示文件的一些统计信息,如图4-20所示。图1-20在图4-20中,命令选项后面可以有格式,使用引号表示。示例中的格式“%b %n %o %r %Y”依次表示文件大小、文件名称、块大小、副本数、访问时间。-tail 查看文件尾部内容该命令选项显示文件最后1K字节的内容。一般用于查看日志。如果带有选项-f,那么当文件内容变化时,也会自动显示,如图4-21所示。图4-21-chmod 修改文件权限该命令选项的使用类似于linux的shell中的chmod用法,作用是修改文件的权限,如图4-
57、22所示。图4-22在图4-22中,修改了文件/emptyfile的权限。如果加上选项-R,可以对文件夹中的所有文件修改权限,如图4-23所示。图4-23-chown 修改属主该命令选项表示修改文件的属主,如图4-24所示。图4-24上图中把文件/emptyfile的属主由root修改为itcast。也可以同时修改属组,如图4-25所示。图4-25在图4-25中,把文件/emptyfile的属主和属组都修改为itcast,如果只修改属组,可以使用“:itcast”。如果带有选项-R,意味着可以递归修改文件夹中的所有文件的属主、属组信息。-chgrp 修改属组该命令的作用是修改文件的属组,该命令相当于“chown :属组”的用法,如图4-26所示。图4-26-help 帮助该命令选项会显示帮助信息,后面跟上需要查询的命令选项即可,如图4-27所示。图4-27在图4-27中,查询的rm的用法。该命令选项显示的内容并非完全准确,比如查询count的结果就不准确,而是把所有命令选项的用法都显示出来,如图4-28所示。希望新的版本以后改进。图4-28读者短时间无法掌握全部命令用法,请重点掌握ls(r)、rm(r)、mkdir、put、get的使用。2.3. 把hadoop源码关联到eclipse工程在eclipse中阅读源码非常方便
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 珍珠岩保温板施工方案
- 挑脚手架施工方案
- 氟碳油漆施工方案
- 紫藤架修复施工方案
- 2025年度智能工厂用工承包协议书
- 二零二五年度医院员工食堂运营管理协议
- 2025年度终止运输合同书面通知样本
- 2025年度物流运输企业司机派遣合同模版
- 2025年餐饮行业临时工福利待遇保障协议
- 2025年度智慧停车场委托管理及运营服务协议书
- 苏科版八年级生物下册全册完整课件
- 第四单元复习教学设计 部编版语文七年级上册
- 医学专家谈灵芝孢子粉课件
- 【讲座课件】中小学教师课题研究指南及管理策略原
- 开心麻花《白蛇前传》剧本
- 全部编版三年级语文下册生字读音、音序、偏旁及组词
- 六年级下册英语全册教案(冀教版)
- 认识DS3自动安平水准仪
- 血小板血浆(PRP)课件
- 腹部开放性损伤急救
- 某大酒店弱电智能化系统清单报价
评论
0/150
提交评论