设为首页 收藏本站
查看: 1533|回复: 0

[经验分享] Hadoop文件合并——Hadoop In Action上的一个示例

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-30 09:36:04 | 显示全部楼层 |阅读模式
  上一篇文章已经详细的说明了如何在Eclipse下面远程连接Hadoop集群,进行Hadoop程序开发。这里说明一个Hadoop In Action书上的一个示例,可能是由于Hadoop版本更新的问题,导致树上的一些个示例程序没有办法正常执行。    整个代码的工作就是把本地目录下个若干个小文件,合并成一个较大的文件,写入到HDFS中。话不多说,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.hadoop.examples;
import java.io.IOException;
import java.net.URI;

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;

/**
* @Package
* @ClassName: PutMerge
* @Description: 读取本地目录下的文件,写入到HDFS,在写入的过程中,
*                 把这三个文件合成一个文件
* @author lxy
* @date 2015年3月25日 上午9:59:38
* @version V1.0
*/

public class PutMerge {

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

        // 输入目录,目录下有三个txt,文章最后面会儿给出文件内容
        String localPathStr = "E:\\test";
        // 输出目录,HDFS路径,文章最后面会给出合并之后的文件内容
        String serverPath =
                "hdfs://192.168.3.57:8020/user/lxy/mergeresult/merge.txt";

        //输入目录,是一个本地目录
        Path inputDir = new Path(localPathStr);
        //输出目录,是一个HDFS路径
        Path hdfsFile = new Path(serverPath);

        Configuration conf = new Configuration();

        /**
         * Hadoop in Action的原代码如下
         * FileSystem hdfs = FileSystem.get(conf);
         * 但是这样的话,在执行下面的语句是就会报异常,可能是由于版本更新的问题
         *  FSDataOutputStream out = hdfs.create(hdfsFile);
         */
        // 根据上面的serverPath,获取到的是一个org.apache.hadoop.hdfs.DistributedFileSystem对象
        FileSystem hdfs = FileSystem.get(URI.create(serverPath), conf);
        FileSystem local = FileSystem.getLocal(conf);

        try {
            //获取输入目录下的文件以及文件夹列表
            FileStatus[] inputFiles = local.listStatus(inputDir);
            //在hdfs上创建一个文件
            FSDataOutputStream out = hdfs.create(hdfsFile);

            for (int i = 0; i < inputFiles.length; i++) {
                System.out.println(inputFiles.getPath().getName());
                //打开本地输入流
                FSDataInputStream in = local.open(inputFiles.getPath());
                byte buffer[] = new byte[256];
                int bytesRead = 0;
                while ((bytesRead = in.read(buffer)) > 0) {
                    //往hdfs上的文件写数据
                    out.write(buffer, 0, bytesRead);
                }
                //释放资源
                in.close();
            }
            //释放资源
            out.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}



    我的测试目录下有三个txt文件

wKiom1UU4VyjqGxHAAD8tN1O11Q331.jpg

    1.txt

1
2
3
4
5
6
7
1 hello Hadoop
2 hello Hadoop
3 hello Hadoop
4 hello Hadoop
5 hello Hadoop
6 hello Hadoop
7 hello Hadoop



    2.txt

1
2
3
4
5
6
7
8 hello Hadoop
9 hello Hadoop
10 hello Hadoop
11 hello Hadoop
12 hello Hadoop
13 hello Hadoop
14 hello Hadoop



    3.txt

1
2
3
4
5
6
7
15 hello Hadoop
16 hello Hadoop
17 hello Hadoop
18 hello Hadoop
19 hello Hadoop
20 hello Hadoop
21 hello Hadoop



    合并之后的文件如下所示:
wKioL1UU46ni1Eu0AAFl5I3Wah8196.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-52062-1-1.html 上篇帖子: Hadoop调试源代码 下篇帖子: hadoop hdfs访问权限更新延迟问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表