hadoop03——hadoop架构以及优缺点,常用的hadoop shell命令以及Eclipse hadoop API配置

本文深入探讨了Hadoop的HDFS设计思想、架构,以及其优缺点。详细介绍了如何使用Hadoop的Shell命令行,并提供了Eclipse中配置Hadoop API的步骤,包括环境变量设置、插件安装和库管理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hdfs的设计思想

1)分块存储
默认128M   hadoop2 
太大   负载不均衡
太小    namenode的压力过大
注意: 一个块 不够128M   单独成一个块
200M  

2)冗余存储
默认每一个块  3个副本  每一个块  总共存储3份
副本: 相同地位  互为副本  没有优先级
注意:	
	1)同一个块的不同副本  存储在不同节点的 
	2)默认副本3个   有一个宕机了   复制出来一个
	3)默认副本3   宕机  启动   副本4个   删除
	4)默认副本3    2个节点   存储2个  剩下一个记账

hdfs的架构 :

总:一主多从
主:
	namenode :
		1)存储元数据信息
		元数据:描述数据的数据   描述的datanode存储的数据的数据
		类似于  目录
			1)抽象目录树
			2)数据和块的对应关系
			3)块的存储位置
			
			目录:自己配置的  hdfs-site 
		2)接受客户端的读写请求
从:
	datanode :
		1)真正的存储数据
			按照块进行存储的  每一个数据块  id
			/home/hadoop/data/hadoopdata/data/current/BP-1453129122-192.168.191.201-1556592207649/current/finalized/subdir0/subdir0
		2)真正的处理客户端的读写请求的
助理:
	secondarynamenode:
		1)备份namenode的元数据信息的
		2)帮助namenode减轻压力的

hdfs的优缺点:

缺点:
	1)延迟性高  离线  磁盘落地
	2)不适合大量小文件存储
		1)namenode压力过大
		2)寻址时间过长
	3)不支持文件修改   支持追加   
优点:
	批量 
	离线 
	流式访问

hdfs的使用

shell

==========================
命令行
在hadoop集群中的任意一个节点都可以启动命令行
hadoop fs
hadoop 启动hadoop的客户端 连接hadoop集群
fs 打开hadoop的(文件系统)filesystem的客户端

命令集合:
-真正的执行命令
[-appendToFile … ]
[-cat [-ignoreCrc] …]
[-checksum …]
[-chgrp [-R] GROUP PATH…]
[-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…]
[-chown [-R] [OWNER][:[GROUP]] PATH…]
[-copyFromLocal [-f] [-p] [-l] … ]
[-copyToLocal [-p] [-ignoreCrc] [-crc] … ]
[-count [-q] [-h] …]
[-cp [-f] [-p | -p[topax]] … ]
[-createSnapshot []]
[-deleteSnapshot ]
[-df [-h] [ …]]
[-du [-s] [-h] …]
[-expunge]
[-find … …]
[-get [-p] [-ignoreCrc] [-crc] … ]
[-getfacl [-R] ]
[-getfattr [-R] {-n name | -d} [-e en] ]
[-getmerge [-nl] ]
[-help [cmd …]]
[-ls [-d] [-h] [-R] [ …]]
[-mkdir [-p] …]
[-moveFromLocal … ]
[-moveToLocal ]
[-mv … ]
[-put [-f] [-p] [-l] … ]
[-renameSnapshot ]
[-rm [-f] [-r|-R] [-skipTrash] …]
[-rmdir [–ignore-fail-on-non-empty]

…]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} ]|[–set <acl_spec> ]]
[-setfattr {-n name [-v value] | -x name} ]
[-setrep [-R] [-w] …]
[-stat [format] …]
[-tail [-f] ]
[-test -[defsz] ]
[-text [-ignoreCrc] …]
[-touchz …]
[-truncate [-w] …]
[-usage [cmd …]]

1)查看hdfs的目录结构
hadoop fs -ls -R hdfs的目录   查看给定的hdfs的目录的子目录
-R 级联查看
hadoop fs -ls -R /
hadoop fs -lsr /
注意:在hdfs中所有的路径只有绝对路径的访问形式  必须从 /开始

2)创建文件夹
hadoop fs -mkdir -p 需要创建的目录
-p   级联创建
hadoop fs -mkdir -p /aa/bb/cc
hadoop fs -mkdir /testin

3)文件上传
hdfs不支持文件修改的
在hdfs不能先创建一个空文件  在进行编辑
只能本地编辑完成文件   上传到hdfs存储
或者将本地的文件进行直接存储在hdfs上
文件上传 :将本地的文件  传到hdfs存储  进行分布式存储的

hadoop fs -copyFromLocal 本地文件路径 hdfs路径
	将本地文件  拷贝到hdfs上
	对应API 
hadoop fs -moveFromLocal 本地文件路径 hdfs路径
	将本地文件  移动到hdfs上
hadoop fs -put 本地文件路径 hdfs路径 
	同  -copyFromLocal    提倡
	
hadoop fs -put hadoop-2.7.7.tar.gz /testin
hadoop fs -moveFromLocal hadoop-2.7.7.tar.gz /  剪切|移动



注意: 本地路径  客户端所在本地

测试:
hadoop fs -put hadoop-2.7.6.tar.gz /hadoop6

注意: 文件上传的时候 如果给定的是hdfs的目录 将本地文件 传到hdfs的给定目录下   如果给的是一个hdfs不存在的文件|目录  将本地文件传到hdfs上 但是会重命名  命名为给定的文件,名

4)文件下载
hadoop fs -copyToLocal|moveToLocal|get hdfs路径  本地路径  
将hdfs文件  下载到本地

hadoop fs -copyToLocal|get   将hdfs拷贝到本地
	-get 推荐 
	hadoop fs -get /hadoop-2.7.7.tar.gz .
hadoop fs -moveToLocal  将hdfs的移动到本地
	hadoop fs -moveToLocal /hadoop-2.7.7.tar.gz /home/hadoop/hadoop2
	
	报错:
	Option '-moveToLocal' is not implemented yet.
	这个命令还不支持
5)查看文件内容
	hadoop fs -cat hdfs文件路径
		hadoop fs -cat /hdfs-site.xml
		查看hdfs文件的所有内容
	hadoop fs -tail hdfs文件路径
		hadoop fs -tail /hdfs-site.xml
		查看hdfs给定文件的末尾1kb的数据
6)创建文件
	hadoop fs -touch hdfs文件名  创建空文件 
	hadoop fs -touchz /test_bd1901
	
	注意:在hdfs中大小为0kb的文件  不进行实际存储的  datanode中不存储的
	只在namenode中进行元数据存储
7)删除文件 或目录 
	hadoop fs -rm -f -r 需要删除hdfs的目录或文件
	-f  force 强制删除
	-r  级联删除    用于删除目录的时候
	删除文件
	hadoop fs -rm -f /hadoop-2.7.7.tar.gz
	删除目录 
	hadoop fs -rm -r -f /aa
8)修改hdfs文件或目录的读写权限
	chmod -R 777 文件或目录
	-R 级联修改目录下的所有子文件的权限的
	hadoop fs -chmod -R 777 /testin
9)修改文件所属用户  和 组
	chown -R 用户:组 文件或目录
	hadoop fs -chown -R 用户:组 文件或目录
	hadoop fs -chown -R hadoop:hadoop /testin
10)修改hdfs文件的副本个数
	hdfs配置文件 hdfs-site 中  设置的副本个数 2
	有一个文件很重要   需要将这个文件的副本---》 3个
	-setrep [-R] [-w]    set replication 修改副本的
	-R 级联修改目录下的所有文件
	-w wait   等待新副本的复制完成|删除完成   阻塞
	hadoop fs -setrep 3 /hadoop6
	只能修改hdfs上已经存在的文件或目录
	对于新上传的文件 副本个数  hdfs-site 配置文件中的作用的
	
	hdfs的存储文件的副本的修改:
		1)配置文件  全局
			hdfs-default.xml    3
			hdfs-site.xml    2
		2)命令  单个文件或目录的
			hadoop fs -setrep 
		加载:
		hdfs-default 3
			---> hdfs-site  2
				--->setrep  3
		最后加载的最终生效
11)查看磁盘占有情况
	du df 
	hadoop fs -du -h hdfs目录
	hadoop fs -du -h /
		统计hdfs的每一个文件夹|文件的大小
	hadoop fs -df -h hdfs目录
	hadoop fs -df -h /
		查看指定路径的磁盘占有率
12)其他
	1)-appendToFile 追加  了解
	hadoop fs -appendToFile 本地文件 hdfs文件
	将本地文件  追加到指定的hdfs文件的末尾
	hadoop fs -appendToFile hdfs-site.xml /slaves  不建议使用的
	
	2)-cp|-mv   
	用法:
	hadoop fs -cp|-mv hdfs路径  hdfs路径 
	将hdfs的(目录)文件 拷贝 | 移动  hdfs另一个文件路径中
	
	hadoop fs -cp /slaves /sl01  了解
	hadoop fs -mv /slaves /sl02  重命名  掌握
	
	3) -getmerge  合并下载  归并下载
		将hdfs上的多个文件  合并为一个文件下载
		
		hadoop fs -getmerge hdfs路径1 hdfs路径2 。。。。 本地路径
		将hdfs的多个路径  合并下载到本地
		hadoop fs -getmerge /sl01 /sl02 /home/hadoop/testmetge
		这个命令 默认将最后一个目录识别为本地路径
	4)-count  文件统计
	5)-text  将文件以文本显示
	hadoop fs -text /hadoop6
补充:
1)hdfs的所有路径权限定名:
	namenode的访问路径+需要访问的路径
		core-site.xml 
		<property>
		 <name>fs.defaultFS</name>
		 <value>hdfs://hdp01:9000</value>
		</property>
		hdfs://hdp01:9000/
		简写  /
		全写:hadoop fs -ls hdfs://hdp01:9000/
		hdfs  --》  协议
		hdp01  namenode 主节点 
		9000 端口号
		
		hdfs有两个端口:
		9000 :
			datanode和namenode通信访问的端口  内部
			rpc协议的
		50070  客户端访问web界面的http协议端口
			http://hdp01:50070/explorer.html#/
2)	hadoop fs -命令  老
hdfs dfs - 命令  新
hdfs dfs -ls /

级联—递归

API

配置eclipse本地开发环境
1)将hadoop的插件放在eclipse的安装目录的 plugins下
C:\soft\eclipse\eclipse\plugins
2)配置windows的hadoop环境
winutils.exe 将linux下的hadoop的安装包兼容windows平台
1)将hadoop的linux下的安装包 windows下解压
注意:解压目录 1.不能有中文 2.不能有空格
2)将winutils.exe放在hadoop的安装包的 bin目录下
3)配置windows下hadoop的环境变量
属性–》高级系统设置—》环境变量—》系统变量–》
添加
HADOOP_HOME C:\soft\hadoop-2.7.6
添加
PATH 末尾追加 ;%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin
检查 cmd
hadoop version

4)将hadoop.dll 放在windows的 C:\Windows\System32

3)配置eclipse的可视化连接界面
注意:如果eclipse已经启动的 必须重启
window–> show view —>other --> 搜索map–>点击Map/Reduce Locations --> ok
单机蓝色小象

配置 如图

到此为止 配置完成了

创建工程 并导包:
1)在工程下 创建一个lib的文件夹 将所有的依赖放在lib下 build path
缺点:无法解决jar包冲突问题 工程臃肿
优点:工程移动比较方便
2)maven的方式


org.apache.hadoop
hadoop-client
2.7.7

优点:工程比较规整 可以解决jar包冲突
缺点:代码移动时候 需要重新构建依赖的
3)本地工程下 构建library
右键–》 build path —》 configuration …–>libraries —>
—> add library …—> user library —> next —> user libraries … --> new … —> 指定library 名 —》添加jar包
hadoop的开发依赖包
/home/hadoop/apps/hadoop-2.7.6/share/hadoop
hdfs common
缺点:
1.多个library中的jar包不能去重 很多包重复导入
2.不能解决jar包冲突
优点:
再次进行创建工程的时候 可以重复利用library的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值