大数据生态技术集群:

Hadoop:分布式文件系统HDFS+分布式计算框架MapReduce+Yarn资源调度管理框架

HBase:分布式海量数据库,离线分析和在线业务

Hive:数据仓库,类似SQL

Zookeeper:一致性协调

Sqoop:数据导入和数据采集(关系型数据<->HDFS)

Flume:数据采集框架(日志采集)

Storm:实时流式计算框架

Spark:内存计算框架(SparkCore,SparkSQL,SparkStreaming),一站式处理

机器学习:

Mahout:基于MapReduce的机器学习算法库

MLLIB:基于Spark的机器学习算法库

 

学习方法:
1)理解适用场景和基本功能

2)使用(安装部署,编程规范,API)

3)运行机制

4)结构原理

5)源码

 

Hadoop常用命令:

1)查看HDFS文件系统根目录:hadoop fs –ls /

2)拷贝本地文件至HDFS:hadoop fs –copyFromLocal 本地文件 HDFS路径或者hadoop fs –put 本地文件 HDFS路径

3)拷贝HDFS至本地文件:hadoop fs –copyToLocal HDFS文件 本地路径或者hadoopfs –get HDFS文件 本地路径

4)HDFS下创建目录:hadoopfs –mkdir /cq

5)查看HDFS目录下的文件内容:hadoop fs –cat /cq/txt

6)拷贝HDFS文件至HDFS文件:hadoop fs –cp 源文件路径 目标路径

 

HDFS各个组建的功能(适合一次写多次读):

1) NameNode:第一关系:维护目录树,目录/文件的元数据,文件对应的块索引

                第二关系:维护索引块与DataNode的映射关系

2) DataNode:实际保存文件块至本地工作目录

3) SecondaryNameNode:由于第一关系保存在命名空间镜像和编辑日志中,一段时间需要合并命名空间镜像和编辑日志得到新的命名空间镜像,维护NameNode的第一关系

 

HDFS的基本文件操作:

FileSystem fs=FileSystem.get(new URI(“hdfs://NameNodeIP:Port”),conf,”root”);//fs实际上是DistributedFileSystem

fs.copyFromLocalFile(new Path(“本地文件路径”),new Path(“HDFS路径”));//上传文件到HDFS

fs.mkdir(“/cq”);//HDFS创建一个目录

fs.delete(“/cq”,true);//递归删除cq目录

RemoteIterator<LocatedFileStatus>listFiles = fs.listFiles(new Path(“/”),true);//返回/下的所有文件(递归)

while(listFiles.hasNext()){

LocatedFileStatus file=listFiles.next();

System.out.println(“文件名”+file.getPath().getName());

}

FileStatus[] listStatus=fs.listStatus(newPath(“/”));//返回/下的所有文件/目录

for(FileStatus f:listStatus){

System.out.println(“文件名”+file.getPath().getName());//列举所有的文件/目录

}

BlockLocation[] fileBlockLocations=fs.getFileBlockLocations(newPath(“/jdk”));//返回文件对应的索引块信息

for(BlockLocation location: fileBlockLocations){

System.out.println(location.getOffset());

System.out.println(location.getNames()[0]);//获得文件索引块所在的节点信息

}

fs.setReplication(new Path(“/jdk”),2);//设置文件的副本数量

fs.exist(new Path(“/cq”));//判断是否存在目录

fs.close();

 

HDFS I/O操作

FSDataInputStream in=fs.open(new Path(“/jdk”));//打开HDFS的文件,下载

in.seek(6);//定位读的位置

FileOutputStream out=new FileOutputStream(“C:/cq”);//写到cq文件中

IOUtils.copyBytes(in,out,newConfiguration());//拷贝流

IOUtils.closeStream(in);

IOUtils.closeStream(out);

 

FileInputStream in=new FileInputStream(“C:/cq”);//上传

FSDataOutputStream out=fs.create(new Path(“/jdk.tar.gz”));

IOUtils.copyBytes(in,out,newConfiguration());//拷贝流

IOUtils.closeStream(in);

IOUtils.closeStream(out);


HDFS 基本使用


相关文章: