大数据【二】HDFS部署及文件读写(包含eclipse hadoop配置)
一 原理阐述
1' DFS
分布式文件系统(即DFS,Distributed File System),指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。该系统架构于网络之上,势必会引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。
2' HDFS
借此,关于GFS和HDFS的区别与联系查看 我于博客园找到的前辈的博客>>http://www.cnblogs.com/liango/p/7136448.html
HDFS(Hadoop Distributed File System)为大数据平台其它所有组件提供了最基本的存储功能。
特征:高容错、高可靠、可扩展、高吞吐率等,为大数据存储和处理提供了强大的底层存储架构。
HDFS是一个主/从(master/slave)体系结构,从最终用户的角度来看,它就像传统的文件系统,可通过目录路径对文件执行CRUD操作。由于其分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNodes,NameNode管理文件系统的元数据,DataNode存储实际的数据。
HDFS开放文件系统的命名空间以便用户以文件形式存储数据,秉承“一次写入、多次读取”的原则。客户端通过NameNode和DataNodes的交互访问文件系统,联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。
3‘ 适用场景
HDFS 提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序,以下是一些常用的应用场景:
数据密集型并行计算:数据量极大,但是计算相对简单的并行处理,如大规模Web信息搜索;
计算密集型并行计算:数据量相对不是很大,但是计算较为复杂的并行计算,如3D建模与渲染、气象预报和科学计算;
数据密集与计算密集混合型的并行计算,如3D电影的渲染。
HDFS在使用过程中有以下限制:
HDFS不适合大量小文件的存储,因NameNode将文件系统的元数据存放在内存中,因此存储的文件数目受限于NameNode的内存大小;
HDFS适用于高吞吐量,而不适合低时间延迟的访问;
流式读取的方式,不适合多用户写入一个文件(一个文件同时只能被一个客户端写),以及任意位置写入(不支持随机写);
HDFS更加适合写入一次,读取多次的应用场景。
3’ 基本命令
格式: hadoop fs -cmd args 其中,cmd为具体的操作,args为参数
常用命令:
hadoop fs -mkdir /user/trunk #建立目录/user/trunk
hadoop fs -ls /user #查看/user目录下的目录和文件
hadoop fs -lsr /user #递归查看/user目录下的目录和文件
hadoop fs -put test.txt /user/trunk #上传test.txt文件至/user/trunk
hadoop fs -get /user/trunk/test.txt #获取/user/trunk/test.txt文件
hadoop fs -cat /user/trunk/test.txt #查看/user/trunk/test.txt文件内容
hadoop fs -tail /user/trunk/test.txt #查看/user/trunk/test.txt文件的最后1000行
hadoop fs -rm /user/trunk/test.txt #删除/user/trunk/test.txt文件
hadoop fs -help ls #查看ls命令的帮助文档
二 HDFS部署
主要步骤如下:
1. 配置Hadoop的安装环境;
2. 配置Hadoop的配置文件;
3. 启动HDFS服务;
4. 验证HDFS服务可用。
1‘ 查看是否存在hadoop安装目录 ls /usr/cstor/hadoop 如果没有,利用工具从本地导入hadoop安装文件。
查看jdk是否存在,如果没有同上方法导入
2’ 确认集群服务器之间可SSH免密登录
使用ssh工具登录到每一台服务器,执行命令ssh 主机名,确认每台集群服务器均可SSH免密登录。方法查看我的博客 >> http://www.cnblogs.com/1996swg/p/7270728.html
3‘ 查看hadoop_env.sh 文件,此文件只需修改JAVA_HOME
用vim编辑器修改此文件,将export JAVA_HOME=${JAVA_HOME}改为jdk的目录,例如在我的电脑上是export JAVA_HOME=/usr/local/jdk1.7.0_79/
4’ 指定HDFS主节点
此处需要配置文件 core-site.xml ,查看该文件,并<configuration></configuration>标签之间修改如图所示的配置:
5‘ 拷贝该配置到集群其他子集上,首先查看你的集群所有子集
输入命令 for x in `cat ~/data/2/machines` ; do echo $x ; scp -r /usr/cstor/hadoop/etc $x:/usr/cstor/hadoop ; done; 实现拷贝
6’ 启动HDFS节点
首先在master服务器上格式化主节点 hdfs namenode -format
其次配置slaves文件,将localhost修改为slave1~3;
最后在hadoop安装目录下统一启动HDFS;
用jps 命令在各个子集检验是否启动节点成功;
7‘ hdfs配置成功后可以在client上向HDFS上传文件:
三 读写HDFS文件
1’ 配置client服务器classpath
(1) 使用ssh工具登录client服务器,执行命令vi /etc/profile,编辑该文件。Linux 中/etc/profile文件的改变会涉及到系统的环境,也就是有关Linux环境变量。
修改设置Classpath的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序(.class文件)。
将末尾的如下几行:
JAVA_HOME=/usr/local/jdk1.7.0_79/
export JRE_HOME=/usr/local/jdk1.7.0_79//jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export HADOOP_HOME=/usr/cstor/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
用下列行进行替换(注意路径不同自行修改):
JAVA_HOME=/usr/local/jdk1.7.0_79/
export HADOOP_HOME=/usr/cstor/hadoop
export JRE_HOME=/usr/local/jdk1.7.0_79//jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
(2) 执行命令source /etc/profile,使刚才的环境变量修改生效;
2’ 在client服务器编写HDFS写程序
(1)在client服务器上执行命令vi WriteFile.java,编写HDFS写文件程序:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class WriteFile {
public static void main(String[] args)throws Exception{
Configuration conf=new Configuration();
FileSystem hdfs = FileSystem.get(conf);
Path dfs = new Path("/weather.txt");
FSDataOutputStream outputStream = hdfs.create(dfs);
outputStream.writeUTF("nj 20161009 23\n");
outputStream.close();
}
}
WriteFile.java
(2)编译并打包HDFS写程序
使用javac编译刚刚编写的代码,并使用jar命令打包为hdpAction.jar
(3)执行HDFS写程序
在client服务器上使用hadoop jar命令执行hdpAction.jar:
查看是否已生成weather.txt文件,若已生成,则查看文件内容是否正确:
3‘ 在client服务器编写HDFS读程序
(1)在client服务器上执行命令vi ReadFile.java,编写HDFS读WriteFile.txt文件程序:
import java.io.IOException; import org.apache.Hadoop.conf.Configuration;
import org.apache.Hadoop.fs.FSDataInputStream;
import org.apache.Hadoop.fs.FileSystem;
import org.apache.Hadoop.fs.Path; public class ReadFile {
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();
Path inFile = new Path("/weather.txt"); //读取WriteFile.txt文件
FileSystem hdfs = FileSystem.get(conf);
FSDataInputStream inputStream = hdfs.open(inFile);
System.out.println("myfile: " + inputStream.readUTF());
inputStream.close();
}
}
ReadFile.java
(2)编译文件并打包,然后执行;
四 配置eclipase Hadoop插件并进行打包上传
1’ 首先下载eclipse hadoop插件,解压为jar文件,将其放置在eclipse文件位置的plugins文件夹下,例如D:\eclipse-standard-kepler-SR2-win32\eclipse\plugins
2‘ 配置本地的hadoop环境,需下载hadoop组件(到阿帕奇下吧^_^,http://hadoop.apache.org/),解压为
3' 打开eclipase新建project查看是否已经有Map/Reduce Project的选项。第一次新建Map/Reduce项目时,需要指定hadoop解压后的位置(即第二部组件解压的位置),在新建时项目填写界面右中间有hadoop的路径填写;
4’ 编写java文件,例如上述的ReadFile.java
5‘ 打包成jar文件,右击项目的export的jar file,然后选择所需的文件打包成jar文件,(此步骤是重点)
>>>>>>>>>>>>
6’ 使用WinSCP、XManager或其它SSH工具的sftp工具上传刚刚生成的hdpAction.jar包至client服务器(我用的是工具),并在client服务器上使用hadoop jar命令执行hdpAction.jar,查看程序运行结果。
>运行该jar文件 hadoop jar ~/hdpAction.jar ReadFile
总结:
对于HDFS文件读写的学习,很基础同时也很重要,在后面关于yarn,mapreduce等的学习都要基于此处之上才能逐步了解。
只有一种失败就是半途而废。所以每天的学习会逐步积累,潜移默化。
大数据【二】HDFS部署及文件读写(包含eclipse hadoop配置)的更多相关文章
- CentOS6安装各种大数据软件 第五章:Kafka集群的配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- FusionInsight大数据开发---HDFS应用开发
HDFS应用开发 HDFS(Dadoop Distributed File System) HDFS概述 高容错性 高吞吐量 大文件存储 HDFS架构包含三部分 Name Node DataNode ...
- 大数据(1)---大数据及HDFS简述
一.大数据简述 在互联技术飞速发展过程中,越来越多的人融入互联网.也就意味着各个平台的用户所产生的数据也越来越多,可以说是爆炸式的增长,以前传统的数据处理的技术已经无法胜任了.比如淘宝,每天的活跃用户 ...
- 最新版大数据平台安装部署指南,HDP-2.6.5.0,ambari-2.6.2.0
一.服务器环境配置 1 系统要求 名称 地址 操作系统 root密码 Master1 10.1.0.30 Centos 7.7 Root@bidsum1 Master2 10.1.0.105 Cent ...
- 老李分享:大数据测试之HDFS文件系统
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- Java+大数据开发——HDFS详解
1. HDFS 介绍 • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...
- 大数据(5) - HDFS中的常用API操作
一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...
- 大数据学习——hdfs客户端操作
package cn.itcast.hdfs; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configur ...
- 大数据学习——HDFS的shell
-help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs -ls hdfs://hadoop-server01:9000/ 备注:这些参数中,所有的hdfs路径都 ...
随机推荐
- (转)Python中的上下文管理器和Tornado对其的巧妙应用
原文:https://www.binss.me/blog/the-context-manager-of-python-and-the-applications-in-tornado/ 上下文是什么? ...
- (转) JVM Crash with SIGSEGV - problematic frame - libzip.so
原文:https://stackoverflow.com/questions/38057362/jvm-crash-with-sigsegv-problematic-frame-libzip-so h ...
- PEP_2007相关问题记录
1.在C++中,int main(int argc, char** argv)中的参数是什么意思? 其中,第一个argc是输入的参数的个数,第二个argv可以理解为一个数组,我们可以通过argv来打印 ...
- KMP算法的next函数求解和分析过程
转自 wang0606120221:http://blog.csdn.net/wang0606120221/article/details/7402688 假设KMP算法中的模式串为P,主串为S,那么 ...
- 根据js来判断手机是操作系安卓还是ios
平常开发很常见的功能,在移动端需要根据javaScript来判断手机是安卓还是ios进行应用市场跳转. 通过js提供的Navigator可以来判断手机是安卓还是ios系统,代码如下 1.js判断是否为 ...
- Vue + Element UI 实现权限管理系统 前端篇(一):搭建开发环境
技术基础 开发之前,请先熟悉下面的4个文档 vue.js2.0中文, 优秀的JS框架 vue-router, vue.js 配套路由 vuex,vue.js 应用状态管理库 Element,饿了么提供 ...
- Java 9 中,我们可以在匿名类中使用 <> 操作符
不说了,直接上代码: public class NewTest { public static void main(String[] args) { N<Integer> n1 = new ...
- WPF ViewBox中的TextBlock自适应
想让 TextBlock即换行又能自动根据内容进行缩放,说到自动缩放,当然是ViewBox控件了,而TextBlock有TextWrapping属性控制换行, 所以在ViewBox中套用一个TextB ...
- Leetcode 759. Employee Free Time
思路:区域覆盖问题.一个自然的想法是将每个员工的工作时间段看做一个木棒,每个木棒的长度就是这个时间段的时长.然后按照木棒的起始位置升序排列,接着由低位置向高位置一个木棒一个木棒的看过去.如果当前木棒的 ...
- Double与BigDecimal 精度问题
转自:http://superivan.iteye.com/blog/963628 [1] 精确的浮点运算: 在Java里面,有时候为了保证数值的准确性需要精确的数据,先提供一个例子就可以发现问题了: ...