Hadoop------组件

HDFS文件操作

首先在进行文件操作之前,要确定防火墙是否关闭,否则写文件会失败

hadoop fs -mkdir /user/root,创建一个当前用户的默认工作目录。

hadoop fs -put 111.txt .

hadoop fs -ls .

hadoop fs -lsr /               列出所有文件

hadoop fs -cat 111.txt

hadoop fs -get 111.txt .

hadoop fs -rm 111.txt 

观察命令可以看出,其基本命令和linux命令很像,只是在前面多了hadoop fs。


HDFS JAVA API示例

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class PutMerge {

    public static void main(String[] args) throws IOException {

        Configuration conf = new Configuration();
        FileSystem hdfs  = FileSystem.get(conf);
        FileSystem local = FileSystem.getLocal(conf);

        Path inputDir = new Path(args[0]);
        Path hdfsFile = new Path(args[1]); 

        try {
            FileStatus[] inputFiles = local.listStatus(inputDir);
            FSDataOutputStream out = hdfs.create(hdfsFile);

            for (int i=0; i<inputFiles.length; i++) {
                System.out.println(inputFiles[i].getPath().getName());
                FSDataInputStream in = local.open(inputFiles[i].getPath());
                byte buffer[] = new byte[256];
                int bytesRead = 0;
                while( (bytesRead = in.read(buffer)) > 0) {
                    out.write(buffer, 0, bytesRead);
                }
                in.close();
            }
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  1. 给出PutMerge.java文件如上;
  2. 在文件/etc/profile中附加export CLASSPATH=$CLASSPATH:$HADOOP_INSTALL/hadoop-0.20.2-core.jar,给出class路径;
  3. javac PutMerge.java -d . 编译java
  4. 在路径/home/ha_t/ 中预先放入多个ts文件
  5. hadoop PutMerge /home/ha_t/ ./ha_t.ts
  6. hadoop fs -lsr  /,可以查看合并生成的/user/root/ha_t.ts文件

MapReduce

Hadoop------组件_第1张图片

hadoop jar hadoop-0.20.2-examples.jar  wordcount ./1.mp4 ./mp2

Hadoop------组件_第2张图片

MapReduce运行原理如上图所示,运行hadoop自带的example,wordcount,可以得到上面所示report。这个地方只是给出一个感性认识,如果一个文件比较大,hdfs会先将文件分片,然后分别提交到若干个datanode上,当执行MapReduce时,每个节点都会执行map,用于计算本节点的数据,当文件较大,产生分片,分不到多台机器上,自然就产生了并发处理,生成结果之后在递交给reduce,而reduce的运行个数,则要看运算量了,可以1个,也可能若干个,如下图所示。

Hadoop------组件_第3张图片

并且在map之后reduce之前,有时候还需要再本地reduce一下,更准确的说是combine,如统计单词,可以输出100次[a: 1]或1次[a: 100]。

由于hdfs会出现数据复制,而实现数据备份,MapReduce处理时,仅会处理一个副本。




你可能感兴趣的:(架构设计,HADOOP集群)