1.はじめに
Hadoop 2.0では、2つのNameNodeのデータは実際にはリアルタイムで共有されます。新しいHDFSでは、共有メカニズムであるQuorum Journal Node(JournalNode)クラスターまたはNnetwork File System(NFS)を使用して共有します。NFSはオペレーティングシステムレベルであり、JournalNodeはhadoopレベルであり、JournalNodeクラスターをデータ共有に使用します(これも主流のプラクティスです)。次の図に示すように、JournalNodeのアーキテクチャ図です。
データ同期の場合、2つのNameNodeは、JournalNodeと呼ばれる独立したプロセスのセットを介して互いに通信します。アクティブ状態のNameNode名前空間に変更があると、ほとんどのJournalNodesプロセスに通知されます。スタンバイ状態のNameNodeは、JNの変更情報を読み取ることができ、編集ログで変更を監視しており、独自の名前空間に変更を適用します。スタンバイは、クラスターに障害が発生したときに、名前空間の状態が完全に同期されることを保証できます。
HAクラスターの場合、一度にアクティブになるNameNodeが1つだけであることを確認することが重要です。そうしないと、2つのNameNodeのデータステータスが発散し、データが失われたり、誤った結果が生成されたりする可能性があります。これを確実にするには、ZooKeeperを使用する必要があります。最初に、HDFSクラスター内の2つのNameNodeがZooKeeperに登録されます。アクティブなNameNodeに障害が発生すると、ZooKeeperはこの状況を検出でき、スタンバイNameNodeを自動的にアクティブな状態に切り替えます。
二、配置
1.環境を準備する
ここで5台のサーバーのクラスターをセットアップします。もちろん、最低の3台も構築できます。
Zookeeperバージョン:3.4.7
Hadoopバージョン:2.7.1
1。ホストの役割の割り当て
各サーバーの役割の割り当ては次のとおりです。自分のサーバーの数に応じて調整できます。
1> hadoop01
Zookeeper、NameNode、DFSZKFailoverController、ResourceManager。
2> hadoop02
Zookeeper、NameNode2、DFSZKFailoverController。
3> hadoop03
Zookeeper、DataNode、NodeManager、JournalNode。
4> hadoop04
Zookeeper、DataNode、NodeManager、JournalNode。
5> hadoop05
Zookeeper、DataNode、NodeManager、JournalNode。
2。ファイアウォールをオフにする
一般的な運用環境では、システムに付属しているファイアウォールは必要ありません。外部ファイアウォールがない場合はオンにできますが、通信ポートはファイアウォールの通過を許可する必要があります。ここでは、実験を簡単にするために、ファイアウォールを直接オフにしています。
service iptables status #查看防火墙状态
service iptables start #立即开启防火墙,但是重启后失效。
service iptables stop #立即关闭防火墙,但是重启后失效。
#重启后生效
chkconfig iptables on #开启防火墙,重启后生效。 chkconfig iptables off #关闭防火墙,重启后生效。
3。ホスト名を構成する
/ etc / sysconfig / networkファイルを変更します
vim /etc/sysconfig/network
!!!!! Hadoopがインストールされているクラスターのホスト名に下線を付けることはできません!!それ以外の場合は、ホストが見つかりません!起動できません!
source /etc/sysconfig/network
上記の変更後、ホスト名はすぐには変更されないため、有効にするには再起動する必要があります。したがって、次のコマンドを使用して、すぐに変更を加えることができます。
hostname
4。ホストを構成する
/ etc / hostsファイルを変更します
vim /etc/hosts
以下に記入
127.0.0.1 hadoop01
其他主机和ip对应信息。。。
上記の2つの操作は、IPの分離を実現するためのものです。複数のフレームワークサービスですべてのIPを入力する場合、サーバーのIPが変更されると、各サービスフレームワークがIPを変更する必要があります。ホスト名。サーバーのIPが変更された場合は、hostsファイル内のホスト名とIP間のマッピング関係を変更するだけで済みます。
5。パスワードなしのログインを構成する
クラスタ内のすべてのホストは、互いに密かにログインする必要があります。
キーを生成:
ssh-keygen
公開鍵を送信します。
ssh-copy-id root@hadoop01
このとき、公開鍵はリモートホストの/root/.ssh/authorized_keysファイルに保存され、既知のホスト情報はknown_hostsに保存されます。再度アクセスするときは、パスワードを入力する必要はありません。
ssh hadoop01
このコマンドを使用してリモート接続し、パスワードなしで接続できるかどうかを確認します。
マシンに送信する必要があることに注意してください。
6。jdkをインストールする
1>解凍してインストール
fdを介してjdkインストールパッケージをアップロードして解凍します。コマンドは次のとおりです。
tar -zxvf [jdk安装包位置]
2>環境変数を設定する
/ etc /プロファイルを変更します。
このファイルは、各ユーザーがログインするときに実行される環境変数設定です。このファイルは、ユーザーが初めてログインするときに実行されます。/etc/profile.dディレクトリの設定ファイルからシェル設定を収集します。
vim /etc/profile
ファイルの最後に次のコンテンツを追加し、保存して終了します。
export JAVA_HOME=/home/app/jdk1.7.0_45/
export PATH=$PATH:$JAVA_HOME/bin
3>リロード
プロファイルを再ロードして、構成を有効にします。
source /etc/profile
環境変数の構成が完了したら、環境変数が有効かどうかをテストします。
echo $JAVA_HOME
java -version
7。Zookeeperクラスターを構築する
2. hadoopを構成する
1。解凍
インストールパッケージをサーバーにアップロードして解凍します。
tar -zxvf hadoop-2.7.1_64bit.tar.gz
2。構成を変更する
次のファイルは、完全に配布されたHadoop向けに構成する必要があるすべてのファイルです。この構成は、上記の5つのサーバーコンポーネントのクラスターに従います。
1> hadoop-env.sh
このファイルで、java環境変数を/ etc /プロファイルファイルのjava環境変数と同じ値に変更します。
JAVA_HOME=/home/app/jdk1.7.0_45/
2> core-site.xml
以下は、このファイルの構成テンプレートです。
<configuration>
<!-- 指定hdfs的nameservice为ns -->
<property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <!--指定hadoop数据临时存放目录--> <property> <name>hadoop.tmp.dir</name> <value>/root/work/hadoop-2.7.1/tmp</value> </property> <!--指定hdfs操作数据的缓冲区大小 可以不配--> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!--指定zookeeper地址--> <property> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181</value> </property> </configuration>
3> hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- ns下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop01:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop01:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop02:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/root/work/hadoop-2.7.1/tmp/journal</value> </property> <!-- 开启NameNode故障时自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- namenode存储位置 --> <property> <name>dfs.namenode.name.dir</name> <value>/root/work/hadoop-2.7.1/tmp/name</value> </property> <!-- dataode存储位置 --> <property> <name>dfs.datanode.data.dir</name> <value>/root/work/hadoop-2.7.1/tmp/data</value> </property> <!-- 副本数量根据自己的需求配置,这里配置2个 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
4> mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
5> yarn-site.xml
<configuration>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定resourcemanager地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> </configuration>
6>スレーブ
ここでは、hadoop03、hadoop04、hadoop05をデータを保存するノードとして構成します。
vim slaves
hadoop03
hadoop04
hadoop05
3。環境変数
設定ファイル/ etc /プロファイル:
vim /etc/profile
最後に次のコンテンツを追加します。
export HADOOP_HOME=[hadoop的安装路径]
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4。他のサーバー
scpコマンドを使用して、構成ファイルを他のサーバーにコピーします。
jdk、Zookeeper、および他のサーバーの他の構成がこのサーバーの現在の構成と同じである場合は、変更せずに直接コピーできることに注意してください。
三、スタート
完全に分散されたhadoopを開始します。
1. zkクラスターを起動します
./zkServer.sh start
2. jnクラスターを起動します
sbin/hadoop-daemons.sh start journalnode
1。zkfcのフォーマット
最初のブートをフォーマットする
hdfs zkfc -formatZK
2。hdfsのフォーマット
最初のブートをフォーマットする
hadoop namenode -format
3. NameNodeを起動します
hadoop01の場合:
hadoop-daemon.sh start namenode
hadoop02の場合:
hdfs namenode -bootstrapStandby #把NameNode的数据同步到hadoop02上
hadoop-daemon.sh start namenode #启动备用的namenode
4. DataNodeを起動します
hadoop-daemons.sh start datanode
5.糸を始める
start-yarn.sh
6. ZKFCを起動します
hadoop01内
hadoop-daemon.sh start zkfc
hadoop02で
hadoop-daemon.sh start zkfc
7.起動後
起動が完了したら、jpsコマンドを使用して各サーバーを表示します。プロセスは次のとおりです。
hadoop01:
10877 QuorumPeerMain
11351 NameNode
11871 DFSZKFailoverController 11570 ResourceManager
hadoop02:
16019 QuorumPeerMain
16214 NameNode
16344 DFSZKFailoverController
hadoop03:
16548 QuorumPeerMain
16783 DataNode
16893 NodeManager 16701 JournalNode
hadoop04:
16565 QuorumPeerMain
16798 DataNode
16908 NodeManager 16716 JournalNode
hadoop05:
16562 QuorumPeerMain
16809 DataNode
16919 NodeManager 16727 JournalNode
この時点で、クラスター全体が構築され、通常どおり使用できます。
Hadoopの完全分散クラスターの構築https://my.oschina.net/u/3754001/blog/1802135
Hadoopクラスターのセットアップ http://hadoop.apache.org/docs/r1.0.4/cn/cluster_setup.html
Hadoop分散クラスターの構築 https://www.cnblogs.com/skyturtle/p/9979413.html