大数据生态技术集群:
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);