版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HDFS实战
1Hadoop运行模式Hadoop伪分布式安装HDFS命令行工具HDFS安全模式启动、停止HDFS服务如何查看HDFS日志如何查看HDFSWeb控制台HDFS参数配置2单机在一个Java进程内模拟Hadoop的各个角色伪分布式由各个Java进程来模拟Hadoop的各个角色集群环境Hadoop运行模式3Hadoopshell$HADOOP_HOME_BASE/bin/hadoopfs<args>FSshell使用URIs地址Schema://autority/path例如hdfs://namenodehost:port/folder1/folder2如果不指定schema,则使用配置文件中的默认地址可以使用hadoopfs–help查看所有命令HDFS命令行工具4用途显示一个或多个文件内容到控制台使用方法hadoopfs-catURI[URI...]例子:hadoopfs-cathdfs://host1:port1/file1hdfs://host2:port2/file2hadoopfs-cat/user/hadoop/file4cat5用途将本地一个或多个文件导入HDFS以上两个命令唯一的不同时copyFromLocal的源只能是本地文件,而put可以读取stdin的数据使用方法hadoopfs-put/copyFromLocal<localsrc>URI例子:hadoopfs-putlocal/user/hadoop/hadoophadoopfs-putlocalfile1localfile2/user/hadoop/hadoopdirhadoopfs-putlocalhadoopfs-put-hdfs://host:port/hadoop/hadoopput/copyFromLocal6用途将HDFS中的一个或多个文件导出到本地文件系统使用方法hadoopfs-get/copyToLocal[-ignorecrc][-crc]URI<localsrc>例子:hadoopfs-get/user/hadoop/hadoophadoopfs-gethdfs://host:port/user/hadoop/get/copyToLocal7用途列出文件夹目录信息lsr递归显示文件子目录使用方法hadoopfs-ls/lsrURI例子:ls/lsr[hadoop@master]$hadoopfs-ls/user/hadoopdrwxr-xr-x-hadoopsupergroup02012-05-1417:24/user/hadoop/a[hadoop@master]$hadoopfs-lsr/user/hadoopdrwxr-xr-x-hadoopsupergroup02012-05-1417:24/user/hadoop/a-rw-r--r--2hadoopsupergroup472012-05-1417:24/user/hadoop/a/oct.sh-rw-r--r--2hadoopsupergroup62012-05-1417:24/user/hadoop/a/x.sh8用法hadoopfsck[GENERIC_OPTIONS]<path>[-move|-delete|-openforwrite][-files[-blocks[-locations|-racks]]]检查dfs的文件的健康状况只能运行在master上fsck[hadoop@master]$hadoopfsck/user/hadoopFSCKstartedbyhadoopfrom/7forpath/user/hadoopatFriJun1517:11:50CST2012./user/hadoop/a/oct.sh:Underreplicatedblk_-3537883739360629007_1303.TargetReplicasis2butfound1replica(s)../user/hadoop/a/x.sh:Underreplicatedblk_86643771_1304.TargetReplicasis2butfound1replica(s).9fsckStatus:HEALTHYTotalsize:57697BTotaldirs:5Totalfiles:6Totalblocks(validated):5(avg.blocksize11539B)Minimallyreplicatedblocks:5(100.0%)Over-replicatedblocks:0(0.0%)Under-replicatedblocks:5(100.0%)Mis-replicatedblocks:0(0.0%)Defaultreplicationfactor:2Averageblockreplication:1.0Corruptblocks:0Missingreplicas:2(100.0%)Numberofdata-nodes:1Numberofracks:1FSCKendedatFriJun1517:11:50CST2012in3milliseconds10用法hadoopdfsadmin[command]hadoopdfsadmin-help可以列出所有的可用命令主要的有一下几个-safemode安全模式操作-report报告集群DFS的运行情况可以使用hadoopdfsadmin-help查看所有命令的用法dfsadmin11指文件系统所处的一种只读的安全模式HDFS启动时会在safemode状态相关命令:HDFS的SafeMode$hadoopdfsadmin-safemodeget#安全模式当前状态信息$hadoopdfsadmin-safemodeenter#进入安全模式$hadoopdfsadmin-safemodeleave#解除安全模式$hadoopdfsadmin-safemodewait#挂起,直到安全模式结束12NameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstartnamenodeSecondaryNameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstartsecondarynamenodeDataNode同时启动:$HADOOP_HOME_BASE/bin/hadoop-daemons.shstartdatanode单台启动:$HADOOP_HOME_BASE/bin/hadoop-daemon.shstartdatanodeNameNode、SecondaryNameNode、DataNode$HADOOP_HOME_BASE/bin/start-dfs.shHDFS服务启动13NameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstopnamenodeSecondaryNameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstopsecondarynamenodeDataNode同时关闭:$HADOOP_HOME_BASE/bin/hadoop-daemons.shstopdatanode单台关闭:$HADOOP_HOME_BASE/bin/hadoop-daemon.shstopdatanodeNameNode、SecondaryNameNode、DataNode$HADOOP_HOME_BASE/bin/stop-dfs.shHDFS服务关闭14NameNode位置:$HADOOP_HOME_BASE/logs/hadoop-$USER-namenode-$HOSTNAME.log命令:tail-fn100$HADOOP_HOME_BASE/logs/hadoop-$USER-namenode-$HOSTNAME.logDataNode位置:$HADOOP_HOME_BASE/logs/hadoop-$USER-datanode-$HOSTNAME.log命令:tail-fn100$HADOOP_HOME_BASE/logs/hadoop-$USER-datanode-$HOSTNAME.log设置Log文件
的大小和数量修改core-site.xml中的参数hadoop.loghadoop.log如何查看HDFS日志15
查看不同组件的日志级别hadoopdaemonlog-getlevelhost:portpackageName设置组件的日志级别
hadoopdaemonlog–setlevlehost:portpackageNamelevel“level”DEBUG,INFO,ERROR,FATAL
端口为前台页面的端口,缺省为50070组件名称(packageName)node.NameNodeorg.apache.hadoop.hdfs.server.datanode.DataNodeorg.apache.hadoop.hdfsorg.apache.hadoop如何设置日志级别16访问:http://<NameNodehostname>:<port>如何查看HDFSWeb控制台17.dir NameNode元数据存放位置默认值:使用core-site.xml中的hadoop.tmp.dir/dfs/namedfs.block.size对于新文件切分的大小,单位byte。默认是64M,建议是128M。每一个节点都要指定,包括客户端。默认值:67108864dfs.data.dirDataNode在本地磁盘存放block的位置,可以是以逗号分隔的目录列表,DataNode循环向磁盘中写入数据,每个DataNode可单独指定与其它DataNode不一样默认值:${hadoop.tmp.dir}/dfs/dataHDFShdfs-site.xml参数配置18node.handler.countNameNode用来处理来自DataNode的RPC请求的线程数量建议设置为DataNode数量的10%,一般在10~200个之间如设置太小,DataNode在传输数据的时候日志中会报告“connectonrefused"信息在NameNode上设定默认值:10dfs.datanode.handler.countDataNode用来连接NameNode的RPC请求的线程数量取决于系统的繁忙程度设置太小会导致性能下降甚至报错在DataNode上设定默认值:3dfs.datanode.max.xcieversDataNode可以同时处理的数据传输连接数默认值:256建议值:4096HDFShdfs-site.xml参数配置19dfs.permissions
如果是true则检查权限,否则不检查(每一个人都可以存取文件)于NameNode上设定默认值:truedfs.datanode.du.reserved 在每个卷上面HDFS不能使用的空间大小在每个DataNode上面设定默认值:0建议为10737418240,即10G。需要结合MapReduce场景设置。dfs.datanode.failed.volumes.toleratedDataNode可以容忍损块的磁盘数量,超过这个数量DataNode将会离线,所有在这个节点上面的block将会被重新复制默认是0,但是在有多块磁盘的时候一般会增大这个值dfs.replication在文件被写入的时候,每一块将要被复制多少份默认是3份。建议3份在客户端上设定通常也需要在DataNode上设定HDFShdfs-site.xml参数配置20文件系统的名字。通常是NameNode的hostname与port需要在每一个需要访问集群的机器上指定,包括集群中的节点例如:hdfs://<your_namenode>:9000/fs.checkpoint.dir以逗号分隔的文件夹列表,SecondNameNode用来存储checkpointimage文件如果多于一个文件夹,那么都会被写入数据需要在SecondNameNode上设定默认值:${hadoop.tmp.dir}/dfs/namesecondaryhadoop.tmp.dir HDFS与本地磁盘的临时文件默认是/tmp/hadoop-${}.需要在所有的节点中设定HDFScore-site.xml参数配置21erval当一个文件被删掉后,它会被放到用户目录的.Trash目录下,而不是立即删掉经过此参数设置的分钟数之后,再删掉数据默认是0,禁用此功能,建议1440(一天)io.设定在读写数据时的缓存大小,应该为硬件分页大小的2倍默认是4096,建议为65536(64K)HDFScore-site.xml参数配置22HDFS-javaapi使用23HDFS开发基本步骤HDFSJavaAPI详解ConfigurationPathStream、IOUtilsHDFSJavaAPI使用场景示例24实例化Configuration实例化根据配置文件选择使用本地或分布式文件系统文件或目录操作Stream
HDFS开发基本步骤25包org.apache.hadoop.conf构造方法publicConfiguration()调用构造方法Configuration(true)publicConfiguration(booleanloadDefaults)true:先加载缺省配置文件,再加载用户指定文件(addResource)core-default.xml,core-site.xml以及通过addDefaultResource添加的文件名false:不加载缺省配置文件,需要通过addResource手动添加后加载的配置会覆盖先加载的配置除了被指定为final的publicConfiguration(Configurationother)复制other参数信息Configuration26staticvoidaddDefaultResource(Stringname)添加默认配置文件,配置文件加载的顺序是根据添加的顺序参数是文件名,文件是在classpath中voidaddResource(InputStreamin)voidaddResource(Pathfile)本地文件voidaddResource(Stringname)classpath中的文件voidaddResource(URLurl)Configuration加载配置文件方法27先加载缺省配置文件,再加载用户定义的配置文件对于每一个文件只加载一次:第一个在classpath出现的classpath的目录顺序$HADOOP_CONF_DIR$JAVA_HOME/lib/tools.jar如果$HADOOP_HOME目录下有build目录,则添加build下各子目录$HADOOP_HOME/hadoop-core-*.jar$HADOOP_HOME/lib/*.jar用户在hadoop-env.sh中定义的$HADOOP_CLASS_PATH当前作为hadoopjar…参数提交的JAR包配置文件加载顺序28voidset(Stringname,Stringvalue)voidsetBoolean(Stringname,booleanvalue)voidsetInt(Stringname,Stringvalue)voidsetLong(Stringname,longvalue)voidsetFloat(Stringname,floatvalue)voidsetIfUnset(Stringname,Stringvalue)voidsetBooleanIfUnset(Stringname,booleanvalue)Stringget(Stringname)booleangetBoolean(Stringname,booleandefaultValue)Configuration设置/获取参数方法29包org.apache.hadoop.fs构造方法publicPath(StringpathString)publicPath(URIaUri)publicPath(Pathparent,Pathchild)publicPath(Stringparent,Stringchild)参数parent指定父目录,参数child指定父目录下的文件或子目录publicPath(Stringscheme,Stringauthority,Stringpath)scheme:协议类型,譬如hdfs、file、s3authority:认证信息,譬如user:pwd@host:portpath:文件或目录名如参数不符合RFC2396,则抛出异常Path30intdepth()返回路径的深度StringgetName()返回路径上最后的资源名称PathgetParent()返回父目录,如果已是根目录则返回nullPathsuffix(Stringsuffix)参数suffix给Path增加后缀返回加完后缀的Path实例get(Configurationconf)返回该Path所属的文件系统实例Path常用方法31包org.apache.hadoop.fs构造方法protected()
是一个抽象类,不能通过new来创建通过静态get(Configurationconf)方法获得子类的实例fs.$scheme.implorg.apache.hadoop.hdfs.Distributed主要子类Local本地文件系统Distributed分布式文件系统32booleancreateNewf)不会覆盖已有文件创建成功返回true,失败返回falseFSDataOutputStreamcreate(Pathf)覆盖已有文件创建文件并返回输出流FSDataOutputStreamcreate(Pathf,booleanoverwrite)创建文件并返回输出流FSDataOutputStreamcreate(Pathf,booleanoverwrite,intbuffer)FSDataOutputStreamcreate(Pathf,booleanoverwrite,int buffer,shortreplication,longblockSize)创建文件33FSDataInputStreamopen(Pathf)FSDataInputStreamopen(Pathf,intbufferSize)返回输入流如果文件不存在会抛出异常不指定bufferSize时,会从Configuration中读取io.,默认为4096字节打开文件34FSDataOutputStreamappend(Pathf)FSDataOutputStreamappend(Pathf,intbufferSize)块不足64M时,会补足到64M块达到64M之前,该块不可见,ls看不到该块新增的大小,也无法读取不能同时多个writer追加同一个文件文件追加35voidcopyFromLocalFile(Pathsrc,Pathdst)目标文件存在,直接覆盖voidcopyFromLocalFile(booleandelsrc,Pathsrc,Pathdst)根据参数delsrc,如果是true,拷贝完成之后直接删除源文件voidcopyFromLocalFile(booleandelsrc,booleanoverwrite, Pathsrc,Pathdst)voidcopyFromLocalFile(booleandelsrc,booleanoverwrite, Path[]srcs,Pathdst)参数srcs指定多个本地文件或文件夹参数dst指定HDFS文件夹voidmoveFromLocalFile(Pathsrc,Pathdst)voidmoveFromLocalFile(Path[]srcs,Pathdst)从本地拷贝文件到HDFS36voidcopyToLocalFile(Pathsrc,Pathdst)voidcopyToLocalFile(booleandelsrc,Pathsrc,Pathdst)voidmoveToLocalFile(Pathsrc,Pathdst)没有多文件拷贝函数会覆盖已存在的本地文件dst从HDFS拷贝文件到本地37booleanmkdirs(Pathf)booleanmkdirs(Pathf,FsPermissionpermission)staticbooleanmkdirs(fs,Pathdir,FsPermissionpermission)支持多级目录同时创建(类似mkdir-p)默认权限是755成功返回true目录权限的含义r+x:
获取文件列表w:创建(删除)文件/子目录
创建目录38booleandelete(Pathf,booleanrecursive)删除文件或目录如果f是目录,则参数recursive指定是否要递归删除recursive是false,并且f不为空,会抛出异常删除成功返回truef不存在时,会返回falsebooleandeleteOnExit(f)当关闭时,才会删除如f是目录,则递归删除子目录和文件booleanrename(Pathsrc,Pathdst)删除及重命名39[]listStatus(Pathf)[]listStatus(Path[]dirs)[]listStatus(Pathf,PathFilterfilter)[]listStatus(Path[]dir,PathFilterfilter)列出文件或目录的信息参数dir指定要查询的多个目录参数filter指定需要过滤规则PathFilter是一个接口,需要实现booleanaccept(Pathpath)方法,返回false,在返回结果中会过滤掉只返回列出指定目录下的文件或目录信息
信息包括:绝对路径文件大小(单位:字节)文件访问时间块大小、复制份数文件所属用户、组、访问权限获取文件或目录信息40voidsetOwner(Pathp,Stringusername,Stringgroupname)设置文件或目录所属用户及组参数p指定文件或目录参数username,设置此文件或目录的所属用户只返回列出指定目录下的文件或目录信息voidsetPermission(Pathp,FsPermissionpermission)设置文件或目录权限参数p指定文件或目录参数permission,指定权限,权限同linux权限雷同voidsetReplication(Pathf,shortreplication)设置文件复制份数参数f指定文件参数replication指定复制份数设置文件或目录属性41voidsetTimes(Pathf,longmtime,longatime)设置文件的修改及访问时间参数f指定文件参数mtime,修改时间参数atime,访问时间设置文件或目录属性42包org.apache.hadoop.fs继承java.io.DataInputStream构造方法publicFSDataInputStream(InputStreamin)输入流对象实例化in参数,输入流的来源一般输入流对象,通过方法获得HDFS输入流43包org.apache.hadoop.fs继承java.io.DataOutputStream构造方法publicFSDataOutputStream(OutputStreamout,stats)publicFSDataOutputStream(OutputStreamout,stats,longstartPosition)输出流对象实例化out参数,输出流stats参数是对输出流的相关的计数,如bytesread,byteswrittenstats是对象startPosition参数,开始写入位置一般输出流对象,通过方法HDFS输出流44包org.apache.hadoop.fs构造方法publicIOUtils()I/O帮助类,提供的都是静态方法,不需要实例化
IOUtils构造方法45publicstaticvoidcopyBytes(InputStreamin,outputStreamout,Configurationconf)publicstaticvoidcopyBytes(InputStreamin,outputStreamout,Configurationconf,booleanclose)从输入流拷贝到输出流参数in输入流实例参数out输出流实例参数conf,通过io.获取缓存大小没有设置io.,缓存默认为4096bytes参数close指定是否需要拷贝完成后,由此方法关闭输入输出流IOUtils拷贝流方法46publicstaticvoidcopyBytes(InputStreamin,outputStreamout,intbuffSize)publicstaticvoidcopyBytes(InputStreamin,outputStreamout,intbuffSize,booleanclose)publicstaticvoidcopyBytes(InputStreamin,outputStreamout,intlength,intbuffSize,booleanclose)从输入流拷贝制定字节大小到输出流参数in输入流实例参数out输出流实例参数length指定要拷贝的字节大小参数buffSize指定输入输出缓冲参数close指定是否需要拷贝完成后,由此方法关闭输入输出流IOUtils拷贝流方法47HDFS依赖Jar包来源集群中已部署的Hadoop路径下$HADOOP_HOME_BASE/hadoop-core-1.0.0.jar$HADOOP_HOME_BASE/lib/*.jarJavaDoc位置集群中已部署Hadoop路径下$HADOOP_HOME_BASE/docs/api/index.html
HDFS依赖的jar包及JavaDoc位置48创建HDFS文件(createNewFile)Configurationconfig=newConfiguration();hdfs=(config);Pathpath=newPath();booleanisCreated=hdfs.createNewFile(path);49从本地拷贝文件到HDFS(copyFromLocalFile)Configurationconfig=newConfiguration();hdfs=(config);PathsrcPath=newPath(srcFile);PathdstPath=newPath(dstFile);hdfs.copyFromLocalFile(srcPath,dstPath)50从HDFS读取文件(open)Configurationconfig=newConfiguration();hdfs=(config);Pathpath=newPath(dstFile);FSDataInputStreaminputStream=hdfs.open(path);Textline=newText()LineReaderliReader=newLineReader(inputStream);while(liReader.readLine(line)>0){System.out.println(line);}inputStream.close();51追加方式写入HDFS文件(append)Configurationconfig=newConfiguration();hdfs=(config);Pathpath=newPath(dstFile);FSDataOutputStreamout=hdfs.append(path);//在文件尾部,追加数据out.close();52列出目录下的所有文件(listStatus)Configurationconfig=newConfiguration();hdfs=(config);Pathdir=newPath(dirName);[]=hdfs.listStatus(newPath[]{dir});53HDFS命令
HDFS中的文件权限:
–
读权限(r)、写权限(w)
–
执行权限(x)(控制对目录下的文件和子目录的访问)
HDFS的命令行格式:hadoop
fs
–cmd
<args>
–
cmd:具体的指令内容
–
<args>:一系列可变的参数
命令catchmodchowncopyFromLocalcopyToLocalcpgetlsmkdirmoveFromLocalmvputrmtail
说明显示非压缩文件的内容改变文件或目录的访问权限变更文件或目录的所有者从本地复制文件到HDFS文件系统中从HDFS复制文件到本地复制文件或目录从HDFS复制文件到本地列出文件和子目录创建目录将文件或目录从本地移动到HDFS将文件或目录源路径移动到目的路径将文件或目录从本地移动复制HDFS删除文件或空目录显示文件的最后1KB数据
示例-cat
hdfs:///file1-chmod
777
hdfs:///file1-chown
user1
hdfs:///file1-copyFromLocal
localf1
/usr/hadoop/file1-copyToLocal
/usr/hadoop/file1
localf1-cp
/usr/hadoop/file1
/usr/hadoop/file2-get
/usr/hadoop/file1
localf1-ls
/usr/hadoop/file1-mkdir
/usr/hadoop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东广州花都区新雅街新雅小学专任教师招聘1人笔试备考试题及答案解析
- 2026国家统计局澄迈调查队招聘公益性岗位工作人员1人笔试备考试题及答案解析
- 2026安徽蚌埠市港城产投集团所属公司社会招聘总经理1人笔试备考试题及答案解析
- 2026江西新余市北湖宾馆有限公司招聘2名工作人员(派遣用工)笔试备考题库及答案解析
- 2026年春季小学音乐苏少版(简谱)一年级下册教学计划含进度表
- 4.7.2 免疫与免疫规划教学设计(2025-2026学年人教版生物八年级上册)
- 2026年度青岛市市北区卫生健康局局属事业单位公开招聘卫生类岗位工作人员(37名)笔试备考题库及答案解析
- 2026上海交通职业技术学院招聘6人笔试备考题库及答案解析
- 2026中国联通普洱分公司招聘40人笔试备考试题及答案解析
- 2026年河北石家庄市事业单位公开招聘工作人员4786人笔试备考试题及答案解析
- 新版人教版二年级下册数学全册教案(完整版)教学设计含教学反思
- T∕CCSAS 061-2025 特殊作业监护人员履责管理要求
- GB/T 21508-2025燃煤烟气脱硫设备性能测试方法
- 财务给销售部门培训
- 2026届吉林省四校高三一模语文试题(含答案)(解析版)
- 2025至2030中国汽车声学材料行业发展趋势分析与未来投资战略咨询研究报告
- 2025年国家自然博物馆面试准备及参考答案
- 煤矿智能监测与智能化运维方案
- 公司技术部绩效管理制度
- 护理人员职业暴露处理规范流程
- 太平人寿教育培训体系
评论
0/150
提交评论