设为首页 收藏本站
查看: 1418|回复: 0

[经验分享] Hadoop化繁为简(二)

[复制链接]

尚未签到

发表于 2017-12-18 13:36:27 | 显示全部楼层 |阅读模式
层层递进-解开hdfs的面纱
  1、hdfs是什么?它与普通服务器的文件系统有什么区别?它的特性有什么?
  2、hdfs的工作原理是怎样的?
  3、每台机器都单独启动有什么弊端?假设有1000台机器需要启动?该怎么解决呢?
  4、hdfs配置与使用
  5、利用javaApi充当客户端访问hdfs

hdfs简介
  hdfs就是一个分布式文件系统。简单说,就是一个“分鱼展”的大硬盘,跟普通的文件系统没什么区别,只是它有多台机器共同承担存储任务。
  分鱼展指的是hdfs的特性分别指分布式、冗余性、可拓展。
  普通服务器文件系统:上传文件到服务器
DSC0000.png

  hdfs分布式文件系统:相当于一块大硬盘、百度云网盘(内部实现就是hdfs)。
DSC0001.png


hdfs工作原理
  举例:上传一个1G的文件。


  • 客户端与Master(NameNode)建立连接。
  • 把文件名、文件的分割的数据块号告知Master(NameNode)。
  • 告知客户端,存储数据Slave的ip、存储位置、块号。
  • 客户端写文件到Slave1(也有可以是其他的Slave,Master根据机器的内存大小、存储空间进行分配)。然后Slave1远程存放数据以后,将会复制一份到Slave2、Slave3。
  • 那什么是块呢?因为Master收到上传文件以后,hdfs默认一块128M(可修改)。那1G文件将会被分成10块。
  • Slave1、Slave2、Slave3都复制一份?那跟一台服务器存储又有什么区别呢?假设有100台Slave机器呢?
  • hdfs默认是配置备份数据到3台,可通过配置文件修改。
  • 假设有100台Slave(DataNode),1G分为10块分别为B1、B2、......、B10,它内部是怎么进行分配呢?
  • hdfs系统根据内存和存储空间。假设在Slave1、Slave2、Slave5存储B1,Slave2、Slave8、Slave10存储B2,Slave3、Slave12、Slave15存储B3,依次类推。
  分布式:别把hdfs理解得有多难,多抽象,只是数据从存储到一台机器上变成存储到多台机器上罢了。对于客户端而言,它就是一块硬盘,就是一台机器文件系统,跟JavaIO并没有很大差异。
  冗余性:因为分布式很难控制,一不小心就宕了一台机器呢?数据容易丢失,备份多份数据是非常有必要的,这也是hdfs的容错性。
  拓展性:拓展就是机器之间解耦,随时拓展集群、增加机器维持服务的供给。假设服务器正常运行中,突然之间Slave1宕了,那么怎么办?在我们潜意识当中,肯定分布式系统会自动去备份一份数据到另外一台内存占用比较低的机器。在hadoop有一概念叫做“心跳”检测,就是Master会每隔一段时间给集群发送一个消息,如果没有回应就默认机器宕了,然后Master会把重新把宕了的机器数据重新分配备份到内存占有率比较低的机器。善于思考的大佬们又想了,假设Master宕了呢?这么严重的问题,hadoop的开发者当然要考虑进去,在hadoop里面有一个类似于NameNode东西叫做SecondaNameNode,它将会隔一段时间将NameNode的快照和日志备份一遍到自己机器,并且通知NameNode更新日志,当NameNode宕了,SecondaNameNode将会及时顶上。有分析很透彻的文章,我就不班门弄斧了。http://blog.csdn.net/xh16319/article/details/31375197

每台机器都单独启动的弊端
  1、回顾之前命令
  查看结点启动情况:jps
  启动|关闭NameNode:hadoop-daemon.sh start|stop namenode
  启动|关闭DataNode:hadoop-daemon.sh start|stop datanode
  查看集群情况:hdfs dfsadmin -report或者利用网页http://192.168.56.100:50070
  2、集中式管理集群(注意:我们修改过的配置文件:/etc/hadoop/slaves)
  slave1 slave2 slave3
  3、启动集群(如果没有配置环境变量:start-dfs.sh、stop-dfs.sh在/usr/local/hadoop/sbin目录下找)
  切换至目录/usr/local/hadoop/sbin
  使用start-dfs.sh启动集群
  使用stop-dfs.sh关闭集群
  问题:需要依次输入远程机器的登录账号密码?这样貌似作用不大啊?
  答:在master机器上可以设置ssh远程登录的免密工作。ssh slave1输入账号密码就能远程登录
  cd
  ls -la
  cd .ssh
  ssh-keygen -t rsa (四个回车)
  #会用rsa算法生成私钥id_rsa和公钥id_rsa.pub
  ssh-copy-id slave1
  ssh-copy-id slave2
  ssh-copy-id slave3
DSC0002.png


hdfs的使用  
  1、解释hdfs最简陋的/usr/local/hadoop/etc/hdfs-site.xml配置文件。注意:修改完配置以后,一定要对master进行 hadoop NameNode -format
  

<configuration>  
<!--文件的存储位置-->
  
<property>
  
<name>dfs.name.dir</name>
  
<value>/usr/local/hadoop/data</value>
  
</property>
  
<!--关闭dfs权限,以免待会不允许客户端访问-->
  
<property>
  
<name>dfs.permissions</name>
  
<value>false</value>
  
</property>
  
<!--备份数据多少份,默认三份,我配置了两份测试-->
  
<property>
  
<name>dfs.replication</name>
  
<value>2</value>
  
</property>
  
<!--心跳检测-->
  
<property>
  
<name>dfs.namenode.heartbeat.recheck-interval</name>
  
<value>10000</value>
  
</property>
  
</configuration>   
  

  2、hdfs的使用(最好通过网页查看 http:192.168.56.100:50070)


  • hadoop fs -ls /
  • hadoop fs -put file / (举例:hadoop fs -put hello.txt /)
  • hadoop fs -mkdir /dirname
  • hadoop fs -text /filename
  • hadoop fs -rm /filename
DSC0003.png

DSC0004.png


利用JavaAPI充当客户端访问hdfs集群
  1、添加jar-pom.xml包
  

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
<modelVersion>4.0.0</modelVersion>
  
<groupId>com.ccut.aaron.test</groupId>
  
<artifactId>HadoopHdfs</artifactId>
  
<version>0.0.1-SNAPSHOT</version>
  
<packaging>war</packaging>
  
<name>HadoopHdfs</name>
  
<description/>
  
<properties>
  
<webVersion>3.0</webVersion>
  
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  
</properties>
  

  
<dependencies>
  
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
  
<dependency>
  
<groupId>org.apache.hadoop</groupId>
  
<artifactId>hadoop-hdfs</artifactId>
  
<version>2.7.3</version>
  
</dependency>
  

  
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
  
<dependency>
  
<groupId>org.apache.hadoop</groupId>
  
<artifactId>hadoop-common</artifactId>
  
<version>2.7.3</version>
  
</dependency>
  
</dependencies>
  
</project>
  

  2、读文件
  

public>
public static void main(String[] args) throws MalformedURLException, IOException {  
URL.setURLStreamHandlerFactory(
new FsUrlStreamHandlerFactory());  
InputStream in
= new URL("hdfs://192.168.56.100:9000/hei.txt").openStream();  
IOUtils.copyBytes(in, System.out,
4096, true);  
}
  

  
}
  

  3、写文件
  

public>
public static void main(String[] args) throws IOException {  
Configuration conf
= new Configuration();  
conf.set(
"fs.defaultFS", "hdfs://192.168.56.100:9000");  
FileSystem fileSystem
= FileSystem.get(conf);  

  

boolean b = fileSystem.exists(new Path("/hello"));  
System.out.println(b);
  

  

boolean success = fileSystem.mkdirs(new Path("/mashibing"));  
System.out.println(success);
  

  
success
= fileSystem.delete(new Path("/mashibing"), true);  
System.out.println(success);
  

  
FSDataOutputStream out
= fileSystem.create(new Path("/hei.txt"), true);  
FileInputStream fis
= new FileInputStream("f:/hei.txt");  
IOUtils.copyBytes(fis, out,
4096, true);  

  
FileStatus[] statuses
= fileSystem.listStatus(new Path("/"));  

//System.out.println(statuses.length);  
for(FileStatus status : statuses) {
  
System.out.println(status.getPath());
  
System.out.println(status.getPermission());
  
System.out.println(status.getReplication());
  
}
  

  
}
  
}
  


版权声明
  作者:xiaoyongAaron(邱勇)
  出处:http://www.cnblogs.com/qiuyong/
  您的支持是对博主深入思考总结的最大鼓励。
  本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,尊重作者的劳动成果。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425387-1-1.html 上篇帖子: (第4篇)hadoop之魂--mapreduce计算框架,让收集的数据产生价值 下篇帖子: hadoop datanode节点超时时间设置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表