クラウドホスト上に構築された完全分散hadoopクラスタ構築
15479 ワード
最初はパブリックネットワークipで構築されたクラスタ環境を使用していましたが、namenodeが起動できないという問題に遭遇しました.
多くの資料を調べて、最後にipの問題だと言ったのは、IPが同じ領域にないからかもしれないが、namenodeのipが172.19.14.23であれば、他は172.19.14.23であるはずだ.XXXは、同じサブネット内にあることを保証し、hadoopクラスタもパブリックネットワークipを使用してクラスタを構築することを推奨しない.
その中で具体的な私もよく分からないので、最後にイントラネットipを使ってクラスタ環境を構築することを選びました.
====================================================
これから本格的な環境作りを始めます
第一歩クラウドホスト
アリ雲に広告を出すのではなく、小さな問題を説明して、皆さんが穴を踏まないようにします.アリクラウド上のクラウドサーバECSでインスタンスの作成をクリックするとクラウドホストが作成されます.ここで設定したパスワードはクラウドホストにログインするときのパスワードで、アカウントのデフォルトはrootです.インスタンス名はホスト名、すなわちlinux端末における@記号の後ろの内容である.ここに設置したほうがいいです.ただ勉強としては、高配合はお勧めしませんが、高すぎます!!!私が選んだのは最低配合の勉強としてだけなら、あまり高く配合する必要はありません.私は全部で5台のクラウドホストを作成しました.ホスト基本情報は以下のように整理されている:
ステップ2リモート接続
(1)5台のクラウドホスト:ホストはUbuntu 14を使用する.04 64ビットのオペレーティングシステム(2)ローカルはwindowsシステムであるため、puttyを使用してリモート接続を行う(linuxで直接リモート接続を行うこともできる)puttyの最新ダウンロードアドレス:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html私がダウンロードしたのはダウンロードしたのはexeファイルで、インストールする必要はありません.デスクトップに置いて、ダブルクリックして実行します.赤の丸を描いたところに公網ipを入力するだけでいいので、「open」をクリックすると以下のヒントが表示されます:(下図はネットで探しています)初接続であれば、以下のウィンドウがポップアップされ、「はい」をクリックすればいいです.次に、次のログインプロンプトが表示されます.アカウントの入力:root入力パスワード(クラウドホストの作成時に設定したログインパスワード)は、リモート接続に成功したことを示します.すべてのクラウドホストに同時にリモート接続できます.
第3段階の基礎環境
(1)更新パッケージは各ホストで実行:sudo apt-get update(2)インストールjdk各ホストで実行:sudo apt-get install default-jdkインストールが完了すると、実行:update-alternatives–display java jdkのインストールパスを表示する(3)インストールsshとrsyncは各ホストで実行されます:sudo apt-get install ssh sudo apt-get install rsync(4)インストールhadoopここではhadoop-1.0.0バージョンを使用しているので、各ホストで実行します:wgethttps://archive.apache.org/dist/hadoop/common/hadoop-1.0.0/hadoop-1.0.0.tar.gz(他のバージョンの場合は1.0.0を直接変更する、例えば2.6.0に変更する)その後、ダウンロードしたhadoopパッケージを解凍する:sudo tar-zxvf hadoop-1.0.0.tar.gzは解凍後のhadoopを適切な場所に移動します:sudo mv hadoop-1.0.0/usr/local/hadoop-1.0.0これで、ダウンロードインストールが必要なソフトウェアはすべてダウンロード済みで、次は構成環境です.
ステップ4環境の構成
クラスタ環境:1台のホストがnamenodeノードとsecondarynamenodeノードとして、1台のホストがjobtrackerノードとして、3台のホストがdatanodeノードとtasktrackerノードとして機能します.namenodeとjobtrackerの分離は、namenodeの使用可能なメモリ領域を拡張するのに役立ちます.
(一)ssh無密上陸の構成
状況分析:(1)namenodeとsecondarynamenodeノードが存在するホストはdatanodeノードを非密にログインする必要があり、(2)jobtrackerノードが存在するホストはtasktrackerノードを非密にログインする必要がある.シナリオ:(1)namenodeノードとsecondarynamenodeノードで鍵ペアを生成し、datanodeノードに公開鍵を送信する必要がある.(2)jobtrackerノードで鍵ペアを生成し、tasktrackerノードに公開鍵を送信する必要がある.
namenodeが存在するノードでは、ssh-keygen-t dsa-P"-f~/.ssh/id_dsa,この時は~/.ssh/ディレクトリでid_を生成rsa, id_dsa.pub、この2つのファイル.次に、scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh ipアドレスはsalve 01,slave 02,slave 03のイントラネットipに対応する.
その後、namenodeが存在するノードとslave 01,slave 02,slave 03でそれぞれcat~/が実行する.ssh/id_dsa.pub >> ~/.ssh/authorized_keysは公開鍵をauthorized_に書き込むkeysで.
jobtrackerが存在するノードでは、ssh-keygen-t dsa-P"-f~/.ssh/id_dsa、scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.sshはjobtrackerが存在するノードとslave 01,slave 02,slave 03でそれぞれcat~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keysは公開鍵をauthorized_に書き込むkeysで.
完了すると、namenodeが存在するノードとjobtrackerが存在するノードは、slave 01、slave 02、slave 03ノードに秘密にログインしないことができます.
ここの设定についてssh免密登录して、私は后で偶然1篇のブログが言うのがとても良いことを见て、だから私は次の篇の中で详しく说明して、各位はこの部分を见なくてもいいで、直接私の次の博文を参考にします.
(二)hadoopの構成
(1)編集.bashrcファイルはすべてのノードにあります.bashrcファイルには、(profileファイルに追加することもできます)
そのうちJAVA_HOMEとHADOOP_ホームは自分のインストールパスに変更する必要があります.
実行:source.bashrcは編集した内容を有効にします.
(2)編集/etc/hostsファイルすべてのノードの/etc/hostsファイルを編集し、
保存を終了します.
/etc/hostnameの値がホスト名と一致しているかどうかを確認し、一致しない場合はホスト名に変更します.そうしないと変更する必要はありません.
(3)hadoop-envを編集する.shファイルはすべてのノードのhadoop-envを編集する.shファイル(hadoop/conf/下)まずexport JAVAをキャンセルHOMEの注釈、それから後ろの経路を修正してあなたの自分のインストールの経路になります
(4)core-siteを編集する.xmlファイルはすべてのノードのcore-siteを編集します.xmlファイル、次の内容を追加します.
master-namenodeは私のnamenodeノードのホスト名で、あなたのnamenodeノードのホスト名に置き換えることができます.
(5)hdfs-siteを編集する.xmlファイルはすべてのノードのhdfs-siteを編集します.xmlファイル、次の内容を追加します.
dfs.namenode.name.dirはnamenodeノードの格納ディレクトリ、dfsである.datanode.data.dirはdatanodeノードの格納ディレクトリであり、自分が格納したいパスに置き換えることができます.
(6)mapred-siteを編集する.xmlファイルはすべてのノードのmapred-siteを編集します.xmlファイル、次の内容を追加します.
master-jobtrackerは私のjobtrackerノードのホスト名で、あなたは自分のjobtrackerノードがあるホスト名に置き換えることができます.
(6)mastersとslavesファイルの2つのファイルを編集するには、namenodeノードとjobtrackerノードを変更するだけでよい.
namenodeノードがあるホストのhadoopのconfディレクトリを開き、mastersとslavesの2つのファイルが入っています.mastersファイルを開き、localhostをnamenodeノードがあるホスト名に置き換えてslavesを開き、localhostをslave 01 slave 02 slave 03に置き換えて保存終了
jobtrackerノードがあるホストのhadoopのconfディレクトリを開き、mastersとslavesの2つのファイルが入っています.mastersファイルを開き、localhostをjobtrackerノードがあるホスト名に置き換えてslavesを開き、localhostをslave 01 slave 02 slave 03に置き換えて保存終了します.
ステップ4 hadoopをフォーマットして起動
namenodeが存在するノードで実行:hadoop namenode-format
次にnamenodeが存在するノードでstart-dfsを実行する.sh jobtrackerが存在するノードで実行:start-mapred.sh
jpsでプロセスが正常に起動したかどうかを確認します.
起動に成功した場合:namenodeが存在するノード:
jobtrackerが存在するノード:
Datanodeとtasktrackerが存在するノード:には、namenodeとsecondarynamenodeが1つのホストにあり、jobtrackerが1つのホストにあり、datanodeとtasktrackerが1つのホストにあることがわかります.
大規模なhadoopクラスタでは、namenodeとsecondarynamenodeも異なるホストに分離され、namenodeの使用可能なメモリ領域をさらに拡大することができます.
java.net.BindException: Cannot assign requested address; For more details see: http://wiki.apache.org/hadoop/BindException
多くの資料を調べて、最後にipの問題だと言ったのは、IPが同じ領域にないからかもしれないが、namenodeのipが172.19.14.23であれば、他は172.19.14.23であるはずだ.XXXは、同じサブネット内にあることを保証し、hadoopクラスタもパブリックネットワークipを使用してクラスタを構築することを推奨しない.
, 。 ,hadoop , , 。
その中で具体的な私もよく分からないので、最後にイントラネットipを使ってクラスタ環境を構築することを選びました.
====================================================
これから本格的な環境作りを始めます
第一歩クラウドホスト
アリ雲に広告を出すのではなく、小さな問題を説明して、皆さんが穴を踏まないようにします.アリクラウド上のクラウドサーバECSでインスタンスの作成をクリックするとクラウドホストが作成されます.ここで設定したパスワードはクラウドホストにログインするときのパスワードで、アカウントのデフォルトはrootです.インスタンス名はホスト名、すなわちlinux端末における@記号の後ろの内容である.ここに設置したほうがいいです.ただ勉強としては、高配合はお勧めしませんが、高すぎます!!!私が選んだのは最低配合の勉強としてだけなら、あまり高く配合する必要はありません.私は全部で5台のクラウドホストを作成しました.ホスト基本情報は以下のように整理されている:
ステップ2リモート接続
(1)5台のクラウドホスト:ホストはUbuntu 14を使用する.04 64ビットのオペレーティングシステム(2)ローカルはwindowsシステムであるため、puttyを使用してリモート接続を行う(linuxで直接リモート接続を行うこともできる)puttyの最新ダウンロードアドレス:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html私がダウンロードしたのはダウンロードしたのはexeファイルで、インストールする必要はありません.デスクトップに置いて、ダブルクリックして実行します.赤の丸を描いたところに公網ipを入力するだけでいいので、「open」をクリックすると以下のヒントが表示されます:(下図はネットで探しています)初接続であれば、以下のウィンドウがポップアップされ、「はい」をクリックすればいいです.次に、次のログインプロンプトが表示されます.アカウントの入力:root入力パスワード(クラウドホストの作成時に設定したログインパスワード)は、リモート接続に成功したことを示します.すべてのクラウドホストに同時にリモート接続できます.
第3段階の基礎環境
(1)更新パッケージは各ホストで実行:sudo apt-get update(2)インストールjdk各ホストで実行:sudo apt-get install default-jdkインストールが完了すると、実行:update-alternatives–display java jdkのインストールパスを表示する(3)インストールsshとrsyncは各ホストで実行されます:sudo apt-get install ssh sudo apt-get install rsync(4)インストールhadoopここではhadoop-1.0.0バージョンを使用しているので、各ホストで実行します:wgethttps://archive.apache.org/dist/hadoop/common/hadoop-1.0.0/hadoop-1.0.0.tar.gz(他のバージョンの場合は1.0.0を直接変更する、例えば2.6.0に変更する)その後、ダウンロードしたhadoopパッケージを解凍する:sudo tar-zxvf hadoop-1.0.0.tar.gzは解凍後のhadoopを適切な場所に移動します:sudo mv hadoop-1.0.0/usr/local/hadoop-1.0.0これで、ダウンロードインストールが必要なソフトウェアはすべてダウンロード済みで、次は構成環境です.
ステップ4環境の構成
クラスタ環境:1台のホストがnamenodeノードとsecondarynamenodeノードとして、1台のホストがjobtrackerノードとして、3台のホストがdatanodeノードとtasktrackerノードとして機能します.namenodeとjobtrackerの分離は、namenodeの使用可能なメモリ領域を拡張するのに役立ちます.
(一)ssh無密上陸の構成
状況分析:(1)namenodeとsecondarynamenodeノードが存在するホストはdatanodeノードを非密にログインする必要があり、(2)jobtrackerノードが存在するホストはtasktrackerノードを非密にログインする必要がある.シナリオ:(1)namenodeノードとsecondarynamenodeノードで鍵ペアを生成し、datanodeノードに公開鍵を送信する必要がある.(2)jobtrackerノードで鍵ペアを生成し、tasktrackerノードに公開鍵を送信する必要がある.
namenodeが存在するノードでは、ssh-keygen-t dsa-P"-f~/.ssh/id_dsa,この時は~/.ssh/ディレクトリでid_を生成rsa, id_dsa.pub、この2つのファイル.次に、scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh ipアドレスはsalve 01,slave 02,slave 03のイントラネットipに対応する.
その後、namenodeが存在するノードとslave 01,slave 02,slave 03でそれぞれcat~/が実行する.ssh/id_dsa.pub >> ~/.ssh/authorized_keysは公開鍵をauthorized_に書き込むkeysで.
jobtrackerが存在するノードでは、ssh-keygen-t dsa-P"-f~/.ssh/id_dsa、scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.ssh scp/root/.ssh/id_dsa.pub [email protected]:~/.sshはjobtrackerが存在するノードとslave 01,slave 02,slave 03でそれぞれcat~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keysは公開鍵をauthorized_に書き込むkeysで.
完了すると、namenodeが存在するノードとjobtrackerが存在するノードは、slave 01、slave 02、slave 03ノードに秘密にログインしないことができます.
ここの设定についてssh免密登录して、私は后で偶然1篇のブログが言うのがとても良いことを见て、だから私は次の篇の中で详しく说明して、各位はこの部分を见なくてもいいで、直接私の次の博文を参考にします.
(二)hadoopの構成
(1)編集.bashrcファイルはすべてのノードにあります.bashrcファイルには、(profileファイルに追加することもできます)
# jdk
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# hadoop
export HADOOP_HOME=/usr/local/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_HOME_WARN_SUPPRESS=1
そのうちJAVA_HOMEとHADOOP_ホームは自分のインストールパスに変更する必要があります.
実行:source.bashrcは編集した内容を有効にします.
(2)編集/etc/hostsファイルすべてのノードの/etc/hostsファイルを編集し、
172.19.144.210 slave01
172.19.144.211 slave02
172.19.144.212 slave03
172.19.144.213 master-namenode
172.19.144.215 master-jobtracker
保存を終了します.
/etc/hostnameの値がホスト名と一致しているかどうかを確認し、一致しない場合はホスト名に変更します.そうしないと変更する必要はありません.
(3)hadoop-envを編集する.shファイルはすべてのノードのhadoop-envを編集する.shファイル(hadoop/conf/下)まずexport JAVAをキャンセルHOMEの注釈、それから後ろの経路を修正してあなたの自分のインストールの経路になります
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
(4)core-siteを編集する.xmlファイルはすべてのノードのcore-siteを編集します.xmlファイル、次の内容を追加します.
<property>
<name>fs.default.namename>
<value>hdfs://master-namenode:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/hadoop/tmp/hadoop_datavalue>
property>
master-namenodeは私のnamenodeノードのホスト名で、あなたのnamenodeノードのホスト名に置き換えることができます.
(5)hdfs-siteを編集する.xmlファイルはすべてのノードのhdfs-siteを編集します.xmlファイル、次の内容を追加します.
<property>
<name>dfs.namenode.name.dirname>
<value>file:/usr/local/hadoop-1.0.0/hadoop_data/hdfs/namenodevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/usr/local/hadoop-1.0.0/hadoop_data/hdfs/datanodevalue>
property>
<property>
<name>dfs.replicationname>
<value>3value>
property>
dfs.namenode.name.dirはnamenodeノードの格納ディレクトリ、dfsである.datanode.data.dirはdatanodeノードの格納ディレクトリであり、自分が格納したいパスに置き換えることができます.
(6)mapred-siteを編集する.xmlファイルはすべてのノードのmapred-siteを編集します.xmlファイル、次の内容を追加します.
<property>
<name>mapred.job.trackername>
<value>master-jobtracker:9001value>
property>
master-jobtrackerは私のjobtrackerノードのホスト名で、あなたは自分のjobtrackerノードがあるホスト名に置き換えることができます.
(6)mastersとslavesファイルの2つのファイルを編集するには、namenodeノードとjobtrackerノードを変更するだけでよい.
namenodeノードがあるホストのhadoopのconfディレクトリを開き、mastersとslavesの2つのファイルが入っています.mastersファイルを開き、localhostをnamenodeノードがあるホスト名に置き換えてslavesを開き、localhostをslave 01 slave 02 slave 03に置き換えて保存終了
jobtrackerノードがあるホストのhadoopのconfディレクトリを開き、mastersとslavesの2つのファイルが入っています.mastersファイルを開き、localhostをjobtrackerノードがあるホスト名に置き換えてslavesを開き、localhostをslave 01 slave 02 slave 03に置き換えて保存終了します.
ステップ4 hadoopをフォーマットして起動
namenodeが存在するノードで実行:hadoop namenode-format
次にnamenodeが存在するノードでstart-dfsを実行する.sh jobtrackerが存在するノードで実行:start-mapred.sh
jpsでプロセスが正常に起動したかどうかを確認します.
起動に成功した場合:namenodeが存在するノード:
jobtrackerが存在するノード:
Datanodeとtasktrackerが存在するノード:には、namenodeとsecondarynamenodeが1つのホストにあり、jobtrackerが1つのホストにあり、datanodeとtasktrackerが1つのホストにあることがわかります.
大規模なhadoopクラスタでは、namenodeとsecondarynamenodeも異なるホストに分離され、namenodeの使用可能なメモリ領域をさらに拡大することができます.