Hadoopビッグデータの基本

目次

         序文

1.httpを使用してhdfsにアクセスします

2つのhdfsコンポーネントとその機能

第三に、データブロックhdfs(ブロック)

4、JavaAPI操作hdfs

5、Javaでhdfsアプリケーションを開発する際に注意が必要な事項

6、DataNodeハートビートメカニズムの役割

7つ目は、NameNodeでのEditsLogとFSImageの役割です。

8. SecondaryNameNodeは、NameNodeが負担を軽減するのに役立ちます

9. NameNodeを拡張する方法は?

10、ファイルスナップショット(バックアップ)コマンドを作成します

11.バランスデータ

12、セーフモードセーフモード


序文

1年以上経ち、Java Web側での事業開発に忙殺されており、基本的にビッグデータを忘れていましたが、今回はビッグデータチュートリアルのブログ記事を公開して取り上げました。

hadoop、hdfsをダウンロード、インストール、開始します。ここで停止します。1つずつ紹介することはしません。そうでない場合は、履歴ブログを確認してください。

デフォルトでは、3ノードのマスタースレーブHadoopノード、1つのマスター、および2つの軟膏を構築しました

1.httpを使用してhdfsにアクセスします

次の構成をhdfs-site.xmlに追加してから、hdfsを再起動します。

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

<description>使得可以使用http的方式访问hdfs</description>

</property>

httpアクセスを使用します。

user / hadoop-twq / cmdファイルシステムのerror.txtファイルをクエリします

http:// master:50070 / webhdfs / v1 / user / hadoop-twq / cmd / error.txt?op = LISTSTATUS

http:// master:50070 / webhdfs / v1 / user / hadoop-twq / cmd / error.txt?op = OPEN

サポートされている操作を参照してください。

http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

2つのhdfsコンポーネントとその機能

3つ目は、hdfsのデータブロック(ブロック)

データブロックのデフォルトサイズ:128M

データブロックのサイズを次のように設定します:256M = 256 * 1024 * 1024

$ {HADOOP_HOME} /ect/hadoop/hdfs-site.xmlに構成を追加します。

<property>

<name>dfs.block.size</name>

<value>268435456</value>

</property>

データブロックのデフォルトのバックアップ数は3です。

データブロックのバックアップ数を設定する

  • 指定したファイルのバックアップ数を設定します

hadoop fs -setrep 2 /user/hadoop-twq/cmd/big_file.txt

  • グローバルファイルバックアップの数は、hdfs-siteで直接設定されます。
<property>

   <name>dfs.replication</name>

 <value>3</value>

</property>

データブロックは、各データノードが配置されているマシンのローカルディスクファイルに保存されます

4、JavaAPI操作hdfs

javaapiを使用してデータをファイルに書き込む

package com.dzx.hadoopdemo;

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;

/**
 * @author duanzhaoxu
 * @ClassName:
 * @Description:
 * @date 2020年12月17日 17:35:37
 */
public class hdfs {
    public static void main(String[] args) throws Exception {
        String content = "this is a example";
        String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt";
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(dest), configuration);
        FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path(dest));
        fsDataOutputStream.write(content.getBytes(StandardCharsets.UTF_8));
        fsDataOutputStream.close();
    }
}

JavaAPIを使用してファイルを読み取る

package com.dzx.hadoopdemo;

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

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;

/**
 * @author duanzhaoxu
 * @ClassName:
 * @Description:
 * @date 2020年12月17日 17:35:37
 */
public class hdfs {
    public static void main(String[] args) throws Exception {
        String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt";
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(dest), configuration);
        FSDataInputStream fsDataInputStream = fileSystem.open(new Path(dest));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fsDataInputStream));
        String line = null;
        while (bufferedReader.readLine() != null) {
            System.out.println(line);
        }
        fsDataInputStream.close();
        bufferedReader.close();
    }
}

 

JavaAPIを使用してファイルステータス情報を取得します

package com.dzx.hadoopdemo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsAction;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;

/**
 * @author duanzhaoxu
 * @ClassName:
 * @Description:
 * @date 2020年12月17日 17:35:37
 */
public class hdfs {
    public static void main(String[] args) throws Exception {
        //获取指定文件的文件状态信息
        String dest = "hdfs://master:9999/user/hadoop-twq/cmd/java_writer.txt";
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create("hdfs://master:9999/"), configuration);
        FileStatus fileStatus = fileSystem.getFileStatus(new Path(dest));

        System.out.println(fileStatus.getPath());
        System.out.println(fileStatus.getAccessTime());
        System.out.println(fileStatus.getBlockSize());
        System.out.println(fileStatus.getGroup());
        System.out.println(fileStatus.getLen());
        System.out.println(fileStatus.getModificationTime());
        System.out.println(fileStatus.getOwner());
        System.out.println(fileStatus.getPermission());
        System.out.println(fileStatus.getReplication());
        System.out.println(fileStatus.getSymlink());

        //获取指定目录下的所有文件的文件状态信息
        FileStatus[] fileStatuses = fileSystem.listStatus(new Path("hdfs://master:9999/user/hadoop-twq/cmd"));
        for (FileStatus status : fileStatuses) {
            System.out.println(status.getPath());
            System.out.println(status.getAccessTime());
            System.out.println(status.getBlockSize());
            System.out.println(status.getGroup());
            System.out.println(status.getLen());
            System.out.println(status.getModificationTime());
            System.out.println(status.getOwner());
            System.out.println(status.getPermission());
            System.out.println(status.getReplication());
            System.out.println(status.getSymlink());
        }

        //创建目录
        fileSystem.mkdirs(new Path("hdfs://master:9999/user/hadoop-twq/cmd/java"));
        //创建目录并指定权限  rwx--x---
        fileSystem.mkdirs(new Path("hdfs://master:9999/user/hadoop-twq/cmd/temp"), new FsPermission(FsAction.ALL, FsAction.EXECUTE, FsAction.NONE));

        //删除指定文件
        fileSystem.delete(new Path("hdfs://master:9999/user/hadoop-twq/cmd/java/1.txt"), false);
        //删除指定目录
        fileSystem.delete(new Path("hdfs://master:9999/user/hadoop-twq/cmd/java"), true);

    }
}

5、Javaでhdfsアプリケーションを開発する際に注意が必要な事項

 //需要把core-site.xml文件放到resources目录下,自动读取hdfs的ip端口配置
        String dest = "user/hadoop-twq/cmd/java_writer.txt";
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(configuration);
        FileStatus fileStatus = fileSystem.getFileStatus(new Path(dest));

6、DataNodeハートビートメカニズムの役割

7つ目は、NameNodeでのEditsLogとFSImageの役割です。

8. SecondaryNameNodeは、NameNodeが負担を軽減するのに役立ちます

9. NameNodeを拡張する方法は?

マスターノードマスターのhdfs-site.xmlに次の構成を追加します 

 

マスターノードのclusterIdを表示する 

hdfs-site.xmlをマスターノードmasterからslave1とslave2にコピーします 

3ノードのクラスターを形成した後、Java APIを使用して指定するnameNodeのip:ポートがわからないため、viewFを構成する必要があります。

最初にcore-site.xmlのfs.defaultFS構成アイテムをコメントアウトしてから、次の構成を追加します

<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
		<xi:include href="mountTable.xml"/>
        <property>
            <name>fs.default.name</name>
            <value>viewfs://my-cluster</value>        
        </property>		
</configuration>

次に、mountTable.xmlファイルを追加します(メタデータ管理配布マッピング。これは、namenodeによって管理されるメタデータを別のnamenodeノードに配布するのと同じです)。

次に、変更した構成ファイルをslave1とslave2に同期し、hdfsクラスターを再起動します。

一般的なリクエストメソッドは、再起動後に任意のノードで使用できます。次に例を示します。

hadoop fs -ls viewfs:// my-cluster /

10、ファイルスナップショット(バックアップ)コマンドを作成します

指定したディレクトリのスナップショットの作成を承認します

hadoop dfsadmin -allowSnapshot / user / hadoop-twq / data

スナップショットを作成する

hadoop fs -createSnapshot / user / hadoop-twq / datadata-20180317-スナップショット

作成したスナップショットファイルを表示する

hadoop fs -ls / user / hadoop-twq / data / .snapshot / data-20180317-スナップショット

その他のスナップショット関連コマンド

11.バランスデータ

hdfsクラスターを拡張する場合、新しく拡張されたノードに割り当てられるデータが少なくなることは避けられません。現時点では、データをバランスの取れた方法で分散するために、hdfsbalancerコマンドを使用できます。

12、セーフモードセーフモード

セーフモードを開いた後、ディレクトリとファイルを作成または削除することはできません。ディレクトリとファイルの表示のみを許可してください

hadoop dfsadmin -safemode get

セーフモードはオフです

hadoop dfsadmin -safemode enter 

セーフモードがオンになっている

hadoop dfsadmin -safemode Leave

セーフモードがオンになっている

おすすめ

転載: blog.csdn.net/qq_31905135/article/details/111317591