❶ 用 java遍历hadoop分布式文件系统中某个目录下的全部文件,我的hadoop是单节点的
原因:你访问的是本地文件系统而非hdfs , 因为Configuration默认的是在core-default.xml中的属性fs.default.name默认值是file:///,表示本地文件系统。在我们new Configuration();时会默认加载core-default.xml文件,所以根据这个文件的fs.default.name值使用了本地文件系统。解决方法:一般安装hadoop时都是修改core-site.xml文件,这个文件设置的属性值一般使用来覆盖core-default.xml这个文件的,在core-site.xml文件中会设置fs.default.name值为hadoop的namenode的地址以及端口号,如hdfs://localhost:9000,即表示namenode是本机,也就是为分布式。所以我们在连接hdfs时需要指定连接的地址,也就是hadoop集群中core-site.xml中fs.default.name属性值。所以解决方法有三种:1)在代码Configuration conf=new Configuration();之后手动为Configuration对象设置fs.default.name属性值,如:conf.set("fs.default.name","hdfs:localhost:9000");2)在代码的classpath下创建一个文件,在文件中设置fs.default.name属性值,再使用conf.addResource("文件路径")将该文件添加到Configuration中;3)直接将集群的core-site.xml添加到classpath下即可,无需手动添加到Configuration,在new Configuration时会自动加载该文件
❷ 分布式文件系统是什么啊
分布式文件系统(Distributed File System,DFS)如果局域网中有多台服务器,并且共享文件夹也分布在不同的服务器上,这就不利于管理员的管理和用户的访问。而使用分布式文件系统,系统管理员就可以把不同服务器上的共享文件夹组织在一起,构建成一个目录树。这在用户看来,所有共享文件仅存储在一个地点,只需访问一个共享的DFS根目录,就能够访问分布在网络上的文件或文件夹,而不必知道这些文件的实际物理位置。
❸ 如何部署hadoop分布式文件系统
一、实战环境系统版本:CentOS 5.8x86_64JAVA版本:JDK-1.7.0_25Hadoop版本:hadoop-2.2.0192.168.149.128namenode (充当namenode、secondary namenode和ResourceManager角色)192.168.149.129datanode1 (充当datanode、nodemanager角色)192.168.149.130datanode2 (充当datanode、nodemanager角色)二、系统准备1、Hadoop可以从Apache官方网站直接下载最新版本Hadoop2.2。官方目前是提供了linux32位系统可执行文件,所以如果需要在64位系统上部署则需要单独下载src 源码自行编译。(如果是真实线上环境,请下载64位hadoop版本,这样可以避免很多问题,这里我实验采用的是32位版本)1234 HadoopJava2、我们这里采用三台CnetOS服务器来搭建Hadoop集群,分别的角色如上已经注明。第一步:我们需要在三台服务器的/etc/hosts里面设置对应的主机名如下(真实环境可以使用内网DNS解析)[[email protected] hadoop]# cat /etc/hosts# Do not remove the following line, or various programs# that require network functionality will fail.127.0.0.1localhost.localdomain localhost192.168.149.128node1192.168.149.129node2192.168.149.130node3(注* 我们需要在namenode、datanode三台服务器上都配置hosts解析)第二步:从namenode上无密码登陆各台datanode服务器,需要做如下配置:在namenode 128上执行ssh-keygen,一路Enter回车即可。然后把公钥/root/.ssh/id_rsa.pub拷贝到datanode服务器即可,拷贝方法如下:ssh–id -i .ssh/id_rsa.pub [email protected]ssh–id -i .ssh/id_rsa.pub [email protected]68.149.130三、Java安装配置tar -xvzf jdk-7u25-linux-x64.tar.gz &&mkdir -p /usr/java/ ; mv /jdk1.7.0_25 /usr/java/ 即可。安装完毕并配置java环境变量,在/etc/profile末尾添加如下代码:export JAVA_HOME=/usr/java/jdk1.7.0_25/export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=$JAVE_HOME/lib/dt.jar:$JAVE_HOME/lib/tools.jar:./保存退出即可,然后执行source /etc/profile 生效。在命令行执行java -version 如下代表JAVA安装成功。[[email protected] ~]# java -versionjava version "1.7.0_25"Java(TM) SE Runtime Environment (build 1.7.0_25-b15)Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)(注* 我们需要在namenode、datanode三台服务器上都安装Java JDK版本)四、Hadoop版本安装官方下载的hadoop2.2.0版本,不用编译直接解压安装就可以使用了,如下:第一步解压:tar -xzvf hadoop-2.2.0.tar.gz &&mv hadoop-2.2.0/data/hadoop/(注* 先在namenode服务器上都安装hadoop版本即可,datanode先不用安装,待会修改完配置后统一安装datanode)第二步配置变量:在/etc/profile末尾继续添加如下代码,并执行source /etc/profile生效。export HADOOP_HOME=/data/hadoop/export PATH=$PATH:$HADOOP_HOME/bin/export JAVA_LIBRARY_PATH=/data/hadoop/lib/native/(注* 我们需要在namenode、datanode三台服务器上都配置Hadoop相关变量)五、配置Hadoop在namenode上配置,我们需要修改如下几个地方:1、修改vi /data/hadoop/etc/hadoop/core-site.xml 内容为如下:<?xml version="1.0"?><?xml-stylesheet type="text/xsl"href=\'#\'" Put site-specific property overrides inthisfile. –><configuration><property><name>fs.default.name</name><value>hdfs://192.168.149.128:9000</value></property><property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value><description>A base forother temporary directories.</description></property></configuration>2、修改vi /data/hadoop/etc/hadoop/mapred-site.xml内容为如下:<?xml version="1.0"?><?xml-stylesheet type="text/xsl"href=\'#\'" Put site-specific property overrides inthisfile. –><configuration><property><name>mapred.job.tracker</name><value>192.168.149.128:9001</value></property></configuration>3、修改vi /data/hadoop/etc/hadoop/hdfs-site.xml内容为如下:<?xml version="1.0"encoding="UTF-8"?><?xml-stylesheet type="text/xsl"href=\'#\'" /name><value>/data/hadoop/data_name1,/data/hadoop/data_name2</value></property><property><name>dfs.data.dir</name><value>/data/hadoop/data_1,/data/hadoop/data_2</value></property><property><name>dfs.replication</name><value>2</value></property></configuration>4、在/data/hadoop/etc/hadoop/hadoop-env.sh文件末尾追加JAV_HOME变量:echo "export JAVA_HOME=/usr/java/jdk1.7.0_25/">> /data/hadoop/etc/hadoop/hadoop-env.sh5、修改 vi /data/hadoop/etc/hadoop/masters文件内容为如下:192.168.149.1286、修改vi /data/hadoop/etc/hadoop/slaves文件内容为如下:192.168.149.129192.168.149.130如上配置完毕,以上的配置具体含义在这里就不做过多的解释了,搭建的时候不明白,可以查看一下相关的官方文档。如上namenode就基本搭建完毕,接下来我们需要部署datanode,部署datanode相对简单,执行如下操作即可。1 fori in`seq 129130` ; doscp -r /data/hadoop/ [email protected]$i:/data/ ; done自此整个集群基本搭建完毕,接下来就是启动hadoop集群了。
❹ 如何用java 建立一个分布式系统
分布式架构的演进系统架构演化历程-初始阶段架构初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系统使用Linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用MySQL,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。系统架构演化历程-应用服务和数据服务分离好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver特征:应用程序、数据库、文件分别部署在独立的资源上。描述:数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。系统架构演化历程-使用缓存改善性能特征:数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。描述:系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。系统架构演化历程-使用应用服务器集群在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢特征:多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。系统架构演化历程-数据库读写分离享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢特征:多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。系统架构演化历程-反向代理和CDN加速特征:采用CDN和反向代理加快系统的 访问速度。描述:为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。系统架构演化历程-分布式文件系统和分布式数据库随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作特征:数据库采用分布式数据库,文件系统采用分布式文件系统。描述:任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。系统架构演化历程-使用NoSQL和搜索引擎特征:系统引入NoSQL数据库及搜索引擎。描述:随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。系统架构演化历程-业务拆分特征:系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。描述:为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。纵向拆分:将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。系统架构演化历程-分布式服务特征:公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。描述:随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。Q:分布式服务应用会面临哪些问题?A:(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定? (5) 一个服务有多个业务消费者,如何确保服务质量?(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化? Java分布式应用技术基础分布式服务下的关键技术:消息队列架构消息对列通过消息对象分解系统耦合性,不同子系统处理同一个消息分布式服务下的关键技术:消息队列原理分布式服务下的关键技术:服务框架架构服务框架通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用服务框架是一个点对点模型服务框架面向同构系统适合:移动应用、互联网应用、外部系统分布式服务下的关键技术:服务框架原理分布式服务下的关键技术:服务总线架构服务总线同服务框架一样,均是通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用服务总线是一个总线式的模型服务总线面向同构、异构系统适合:内部系统分布式服务下的关键技术:服务总线原理分布式架构下系统间交互的5种通信模式request/response模式(同步模式):客户端发起请求一直阻塞到服务端返回请求为止。Callback(异步模式):客户端发送一个RPC请求给服务器,服务端处理后再发送一个消息给消息发送端提供的callback端点,此类情况非常合适以下场景:A组件发送RPC请求给B,B处理完成后,需要通知A组件做后续处理。Future模式:客户端发送完请求后,继续做自己的事情,返回一个包含消息结果的Future对象。客户端需要使用返回结果时,使用Future对象的.get(),如果此时没有结果返回的话,会一直阻塞到有结果返回为止。Oneway模式:客户端调用完继续执行,不管接收端是否成功。Reliable模式:为保证通信可靠,将借助于消息中心来实现消息的可靠送达,请求将做持久化存储,在接收方在线时做送达,并由消息中心保证异常重试。五种通信模式的实现方式-同步点对点服务模式五种通信模式的实现方式-异步点对点消息模式1五种通信模式的实现方式-异步点对点消息模式2五种通信模式的实现方式-异步广播消息模式分布式架构下的服务治理服务治理是服务框架/服务总线的核心功能。所谓服务治理,是指服务的提供方和消费方达成一致的约定,保证服务的高质量。服务治理功能可以解决将某些特定流量引入某一批机器,以及限制某些非法消费者的恶意访问,并在提供者处理量达到一定程度是,拒绝接受新的访问。基于服务框架Dubbo的服务治理-服务管理可以知道你的系统,对外提供了多少服务,可以对服务进行升级、降级、停用、权重调整等操作可以知道你提供的服务,谁在使用,因业务需求,可以对该消费者实施屏蔽、停用等操作基于服务框架Dubbo的服务治理-服务监控可以统计服务的每秒请求数、平均响应时间、调用量、峰值时间等,作为服务集群规划、性能调优的参考指标。基于服务框架Dubbo的服务治理-服务路由基于服务框架Dubbo的服务治理-服务保护基于服务总线OSB的服务治理-功能介绍基于服务总线OSB的服务治理Q:Dubbo到底是神马?A:淘宝开源的高性能和透明化的RPC远程调用服务框架SOA服务治理方案Q:Dubbo原理是?A:-结束-
❺ hadoop是做什么的
提供海量数据存储和计算的,需要java语言基础。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
特点
1、快照支持在一个特定时间存储一个数据拷贝,快照可以将失效的集群回滚到之前一个正常的时间点上。HDFS已经支持元数据快照。
2、HDFS的设计是用于支持大文件的。运行在HDFS上的程序也是用于处理大数据集的。这些程序仅写一次数据,一次或多次读数据请求,并且这些读操作要求满足流式传输速度。
HDFS支持文件的一次写多次读操作。HDFS中典型的块大小是64MB,一个HDFS文件可以被切分成多个64MB大小的块,如果需要,每一个块可以分布在不同的数据节点上。
3、阶段状态:一个客户端创建一个文件的请求并不会立即转发到名字节点。实际上,一开始HDFS客户端将文件数据缓存在本地的临时文件中。
❻ 有没有用Java写的轻量级开源的分布式存储系统
以下内容源于分布式内存文件系统:Tachyon 14年9月的文章Tachyon是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存在tachyon里的文件。把Tachyon是架构在最底层的分布式文件存储和上层的各种计算框架之间的一种中间件。主要职责是将那些不需要落地到DFS里的文件,落地到分布式内存文件系统中,来达到共享内存,从而提高效率。同时可以减少内存冗余,GC时间等。<img src="https://pic3.mg.com/_b.png" data-rawwidth="810" data-rawheight="311" class="origin_image zh-lightbox-thumb" width="810" data-original="https://pic3.mg.com/_r.png">Tachyon架构Tachyon的架构是传统的Master—slave架构,这里和Hadoop类似,TachyonMaster里WorkflowManager是 Master进程,因为是为了防止单点问题,通过Zookeeper做了HA,可以部署多台Standby Master。Slave是由Worker Daemon和Ramdisk构成。这里个人理解只有Worker Daemon是基于JVM的,Ramdisk是一个off heap memory。Master和Worker直接的通讯协议是Thrift。下图来自Tachyon的作者Haoyuan Li:<img src="https://pic4.mg.com/_b.png" data-rawwidth="854" data-rawheight="571" class="origin_image zh-lightbox-thumb" width="854" data-original="https://pic4.mg.com/_r.png">三、Fault TolerantTachyon是一个分布式文件存储系统,但是如果Tachyon里的容错机制是怎么样的呢?Tachyon使用血统这个我们在Spark里的RDD里已经很熟悉了,这里也有血统这一概念。会使用血统,通过异步的向Tachyon的底层文件系统做Checkpoint。当我们向Tachyon里面写入文件的时候,Tachyon会在后台异步的把这个文件给checkpoint到它的底层存储,比如HDFS,S3.. etc…这里用到了一个Edge的算法,来决定checkpoint的顺序。比较好的策略是每次当前一个checkpoint完成之后,就会checkpoint一个最新生成的文件。当然想Hadoop,Hive这样的中间文件,需要删除的,是不需要checkpoint的。下图来自Tachyon的作者Haoyuan Li:<img src="https://pic1.mg.com/_b.png" data-rawwidth="822" data-rawheight="609" class="origin_image zh-lightbox-thumb" width="822" data-original="https://pic1.mg.com/_r.png">关于重新计算时,资源的分配策略:目前Tachyon支持2种资源分配策略:1、优先级的资源分配策略2、公平调度的分配策略<img src="https://pic2.mg.com/_b.png" data-rawwidth="940" data-rawheight="621" class="origin_image zh-lightbox-thumb" width="940" data-original="https://pic2.mg.com/_r.png">四、总结Tachyon是一个基于内存的分布式文件系统,通常位于分布式存储系统和计算框架直接,可以在不同框架内共享内存,同时可以减少内存冗余和基于Jvm内存计算框架的GC时间。Tachyon也有类似RDD的血统概念,input文件和output文件都是会有血统关系,这样来达到容错。并且Tachyon也利用血统关系,异步的做checkpoint,文件丢失情况下,也能利用两种资源分配策略来优先计算丢失掉的资源。
❼ 现在做一个爬虫程序,希望把爬到的网页存进hadoop创建的分布式文件系统,用java开发
把stringbuffer的内容存到hadoop中?hadoop的dfs是用来存放海量数据的。想必你的stringbuffer相当大了?那这种内大小的数据能放在内存容中?如果你的stringbuffer是一个文件的话,那么直接运行bin/hadoop dfs -FromLocal yourfilepath tmpfilepath 这个命令就行了。
❽ 什么是分布式系统
分布来式系统是一个硬件源或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
(8)java分布式文件系统扩展阅读
分布式系统系统优点
1、经济:微处理机提供了比大型主机更好的性能价格比
2、速度:分布式系统总的计算能力比单个大型主机更强
3、固有的分布性:一些应用涉及到空间上分散的机器
4、可靠性:如果一个机器崩溃,整个系统还可以运转
5、渐增:计算能力可以逐渐有所增加
❾ 大理电脑培训学校告诉你Java语言中有哪些必备的开发工具
想要成为Java技术大牛并不容易,技术大牛不仅需要具备扎实的开发技能,还需要掌握开发工具和框架的使用,在开发中,工具的选择和使用是非常重要的,工具的功能不同使用的情况也不同。下面电脑培训为大家具体介绍Java软件开发必备的开发工具。
1、MongoDB
MongoDB是使用非常广泛的工具,具有跨平台和面向文档数据库等优势,是现在使用最多的一种数据库。在使用过程中,有灵活的文档模型、高可用复制集、可扩展分片集群,还能进行实时监控等相关操作。IT培训认为内存使用和页面错误,复制集等与MongoDB的阴影是密不可分。
2、Elasticsearch
Elasticsearch主要是云构建分布式RESTful的搜索引擎,但是Elasticsearch不仅仅是一个全文本的搜索引擎,还是一个具有分布式实时文档存储,里面的每个数据都可以被搜索。在使用过程中,还具有分布式搜索引擎、分析引擎等实时分析功能。
3、Cassandra
Cassandra属于开源分布式数据库管理系统,Cassandra主要是使用Java编程语言进行编写的,所以在JDK6以上的版本都是可以进行使用的,使用的操作命令和平时使用的一些数据库相似。大理北大青鸟认为只要是熟悉其他数据库的知识,使用Cassandra是非常容易的。
4、Redis
Redis可以进行内存数据结构存储,Redis有很多其他工具所不具备的优势,不仅可以在内存中保存数据库内容,并且所使用的磁盘具有持久性。Redis的数据类型比许多键值数据存储系统更丰富,另一个优点是Redis可以将数据复制到任何数字。
5、Hadoop
Hadoop是进行Java编写的软件框架,主要使用在分布式存储。对于非常大的数据,用户可以在不知道分布式基础的情况下进行开发分布式程序,并且能够使用集群实现高速计算和存储。在使用过程中,北大青鸟大理计算机学院认为Hadoop还能实现分布式文件系统,能够对大量的数据进行存储。
未经允许不得转载:山九号 » java分布式文件系统|有没有用Java写的轻量级开源的分布式存储系统