eclipse远程连接hadoop_Hadoop之HDFS基本操作实验

点击上方蓝色字关注我们!

Hadoop是一款开源的大数据通用处理平台,其提供了分布式存储和分布式离线计算。Hadoop由HDFS、YARN、MapReduce组成。

Hadoop分布式文件系统(HDFS)是一种分布式文件系统(Distributed File System)。HDFS具有高度容错性,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS其实是将一个大文件分成若干块保存在不同服务器的多个节点中。通过联网让用户感觉像是在本地一样查看文件,为了降低文件丢失造成的错误,HDFS会为每个小文件复制多个副本(默认为3个),以此来实现多机器上的多用户分享文件和存储空间。

HDFS体系结构

HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的多个DataNode负责管理存储的数据。

块大小:Hadoop2版本里一个块默认为128M,小文件也占用一个块,小文件越多,块越多。因此,HDFS中不适合存储小文件。

副本个数:保存多个副本(默认3个),提供容错机制,一个副本丢失或宕机,自动恢复。

01

实验目的

熟悉HDFS基本命令行操作

使用Java 接口,通过Java程序读取HDFS中的文件

02

实验环境

云服务器1台:(华为云、阿里云、腾讯云等等均可)

操作系统:CentOS7.4 64位

系统配置:2核4G以上

感谢华为云提供云服务器支持!

03

实验步骤

cd5b4b46e7b1b83a031fc9f928062706.gif》》实验资源

操作系统:CentOS 7

JDK:JDK8

Hadoop:2.8.5

Github地址:https://github.com/my-ss-course/BigData

工具包地址:链接: https://pan.baidu.com/s/1nOvFQGj12N3ODNilOYMYjg 密码: r8qo

已经按照前面的教程搭建好3个节点的Hadoop伪分布式集群

1

登录远程云服务器

04819078a50371ee016bc49dfc558524.png

使用本地客户端连接远程云服务器

2

启动Hadoop集群

如已启动hadoop容器,请忽略本步骤

./start_container.sh

进入hadoop-node1节点的容器

docker exec -it hadoop-node1 /bin/bash

4b66ebea60048609865fb6841722a083.png

3

通过命令行方式操作HDFS文件系统

01 命令行接口格式
格式1:hadoop fs -命令 路径

格式2:hdfs dfs -命令 路径
02 ls命令
hdfs dfs -ls /

3d3e4cccbf39388b5343b729a02135af.png

03 put命令

将本地文件上传到HDFS中。

hdfs dfs -put /usr/local/hadoop-2.8.5/NOTICE.txt /input/

83c368d178fbbb0297b86b4b848f85b7.png

04 get命令

将HDFS中文件下载到本地

hdfs dfs -get /input/README.txt ./
hdfs dfs -get /input/README.txt README2.txt
hdfs dfs -get /input/README.txt

2ccb38c2849b1da6debbffefa75d1e04.png

05 rm命令

删除文件

hdfs dfs -rm /input/README.txt

dc3db9580a7f6358719d2595ec8cef8e.png

删除目录

hdfs dfs -rm -r /output

203a99cb947771287233e5948c66f6c5.png

06 mkdir命令

创建目录

hdfs dfs -mkdir /output

9fb4fbc6aeb47d5a032ebc6df67ba489.png

创建多级目录,使用-p参数

hdfs dfs -mkdir -p /output/abc/123

ae1637517754a6439f8d46172fb4ca2e.png

07 cp命令
hdfs dfs -cp /input/NOTICE.txt /input/NOTICE2.txt

e0dda27c1b5b479747765a48e8a0cdf3.png

08 mv命令
hdfs dfs -mv /input/NOTICE.txt /input/NOTICE3.txt

8983f3f125f51b4a6b5d80992ae20299.png

09 cat命令
hdfs dfs -cat /input/NOTICE3.txt

714d5d8f31bd5e66602bc163a37f3c16.png

4

使用Java API操作HDFS文件系统中数据

01

新建IntelliJ IDEA下的maven项目

  • 点击File->New->Project,在弹出的对话框中选择Maven

  • JDK选择相应的版本,点击Next

  • 填写Maven的GroupIdArtifactId,可以随便填写

7fbe1c76c7afc50550b4d6d61b841f6d.png

  • 项目名可填写HDFSTest

  • 编辑pom.xml添加hadoop依赖

<dependencies>
        <dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-hdfsartifactId>
            <version>2.8.5version>
        dependency>
        <dependency>
            <groupId>org.apache.hadoopgroupId>
            <artifactId>hadoop-clientartifactId>
            <version>2.8.5version>
        dependency>
    dependencies>

02

编写代码

新建一个class,增加如下实验代码

public static void main(String[] args) throws IOException {
        System.out.println("hello world");
        Configuration conf=new Configuration();
        conf.set("fs.defaultFS","hdfs://你的云服务器的IP:19000或hadoop-node1节点的IP:9000");
        FileSystem hdfs =FileSystem.get(conf);
        boolean is_success = hdfs.mkdirs(new Path("/helloByJava"));
        if(is_success){
            System.out.println("success");
        }else{
            System.out.println("failure");
        }
        hdfs.close();
}

注意要把安全组以及防火墙中的端口打开。

直接运行程序的结果如下

2038eb57a4f9c80b0b29b7a39ed17a2c.png

警告先忽略,因为没有配置log4j

b8f20c5e3751da8dda23d50576e4ba8c.png

可以看到能够在HDFS中成功创建了一个目录。

这这这也太不安全了吧???

可以直接访问我的HDFS

03

打包发布

1、pom.xml文件中增加如下代码,用于编译打包

<build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-pluginartifactId>
                <version>2.3.2version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                configuration>
            plugin>
            <plugin>
                <artifactId>maven-assembly-plugin artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependenciesdescriptorRef>
                    descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.myhadoop.HelloWorldmainClass>
                        manifest>
                    archive>
                configuration>
                <executions>
                    <execution>
                        <id>make-assemblyid>
                        <phase>packagephase>
                        <goals>
                            <goal>singlegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
build>

注意:代码中mainClass需要根据打包的具体类修改

2、在IDEA右侧栏中选择Maven Projects,打开Lifecycle文件夹,先点击compile再点击package,等待jar打包成功。

bd44e631b3960e344659e69ab7528f2d.png

3、jar包打完之后打开左侧target文件夹,发现有两个jar包,把无依赖的jar包复制到hadoop-node1节点内

737a886b633bf859271c1dc1e549c964.png

拷贝到hadoop-node1节点

de67920ed726af1450787b993d689a15.png

4、在hadoop-node1节点下执行命令

hadoop jar   jar包名  classname

hadoop jar hadoop-1.0.jar com.myhadoop.HelloWorld

4cb1d6e0f63fd046b6c8011df8a0557f.png

179386579e2d0f2a30612f0baa42876b.gif c523d8cb1788ff6fa2e5249e2680252c.gif 65d1e9c7e070587264df60b4c9610195.gif 

END

7b46dcc7ffcc27c8fd608c35a0bd4031.png 每天进步一点点

fa10488916b4ff4fe587f70b440f77b0.png

让我知道你在看

c8cf39eb803335b8a28d8366e2ce8039.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值