構築環境
参考先
1 | CentOSでHadoopとHiveを試してみる(2015年秋編) | HadoopとHiveのインストール |
用語集 | ||
Hadoop 黄色い象使いへの道~Hadoop徹底入門より~ | Hadoopについて | |
40分でわかるHadoop徹底入門 | Hadoopについて |
手順1との相違
"許可がありません"の時はsudoをつける。rootユーザに変更しない |
Hadoopのインストールが終わったらrebootする |
reboot後、.bashrcの内容げ消えてしまったので再設定 |
start-dfs.shで以下のエラーが発生 localhost: Error: JAVA_HOME is not set and could not be found. [対処] $ vi /usr/hadoop-2.7.1/etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_66 を追加 |
NodeManager、ResourceManagerは起動されない $ jps 2003 DataNode 2131 SecondaryNameNode 1915 NameNode 2301 Jps |
解凍したapache-hive-1.2.1-binは/usr下へ移動 |
自分が設定した覚えのないシンボリックリンクがある(でも必要) $ ls -la /usr/ | grep -- "->" | grep hive lrwxrwxrwx 1 root root 21 4月 10 20:09 2016 hive-1.2.1 -> apache-hive-1.2.1-bin |
構築環境
疑似分散モード
JDKのインストール
$ wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.rpm
$ sudo rpm -ivh jdk-8u66-linux-x64.rpm $ vi .bashrc JAVA_HOME=/user/java/jdk1.8.0_66 PATH=$JAVA_HOME/bin:$PATH $ source .bashrc ※.bashrc設定は、rootユーザも同様 $ java -version java version "1.8.0_66" Java(TM) SE Runtime Environment (build 1.8.0_66-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
CDHのインストール
GPS鍵のインストール $ sudo rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera Clouderaのリポジトリを登録 $ sudo rpm -ivh http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm $ rpm -ql cloudera-cdh /etc/pki/rpm-gpg /etc/pki/rpm-gpg/RPM-GPG-KEY-cloudera /etc/yum.repos.d/cloudera-cdh4.repo /usr/share/doc/cloudera-cdh-4 /usr/share/doc/cloudera-cdh-4/LICENSE バージョン4.2を指定 $ sudo vi /etc/yum.repos.d/cloudera-cdh4.repo [cloudera-cdh4] name=Cloudera's Distribution for Hadoop, Version 4 #baseurl=http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/4/ (コメントアウト) baseurl=http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/4.2.1/ (追加行) gpgkey = http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera gpgcheck = 1 CDHのインストール $ sudo yum install hadoop-0.20-conf-pseudo 関連パッケージがインストールされた事を確認 $ yum list installed | grep hadoop hadoop.x86_64 2.0.0+960-1.cdh4.2.1.p0.9.el6 hadoop-0.20-conf-pseudo.x86_64 hadoop-0.20-mapreduce.x86_64 hadoop-0.20-mapreduce-jobtracker.noarch hadoop-0.20-mapreduce-tasktracker.noarch hadoop-hdfs.x86_64 2.0.0+960-1.cdh4.2.1.p0.9.el6 hadoop-hdfs-datanode.x86_64 hadoop-hdfs-namenode.x86_64 hadoop-hdfs-secondarynamenode.x86_64 $ hadoop version Hadoop 2.0.0-cdh4.2.1 hdfsユーザとmapredユーザが生成されている事を確認 $ cat /etc/passwd | egrep 'hdfs|mapred' hdfs:x:496:495:Hadoop HDFS:/var/lib/hadoop-hdfs:/bin/bash mapred:x:495:494:Hadoop MapReduce:/usr/lib/hadoop-0.20-mapreduce:/bin/bash NameNodeが管理するメタデータ領域のフォーマット $ sudo -u hdfs hdfs namenode -format HDFS関連のプロセスの起動 $ sudo service hadoop-hdfs-namenode start $ sudo service hadoop-hdfs-datanode start $ ps -ef | grep hadoop-hdfs-namenode | grep -v grep $ ps -ef | grep hadoop-hdfs-datanode | grep -v grep MapReduce用システムディレクトリの作成 $ sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging $ sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging $ sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred ユーザーディレクトリの作成 $ sudo useradd sampleuser $ sudo -u hdfs hadoop fs -mkdir -p /user/sampleuser $ sudo -u hdfs hadoop fs -chown sampleuser /user/sampleuser MapReduce関連のプロセスの起動 $ sudo service hadoop-0.20-mapreduce-jobtracker start $ sudo service hadoop-0.20-mapreduce-tasktracker start $ ps -ef | grep mapreduce | grep -v grep サンプルアプリケーションの実行 $ sudo -u sampleuser hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 10 1000000
完全分散クラスタの設定
ネットワークの設定
hostsの設定
$ sudo vi /etc/hosts
192.168.33.110 had.ms.example.com
192.168.33.120 had.s1.example.com
192.168.33.121 had.s2.example.com
192.168.33.122 had.s3.example.com
※127.0.0.1は削除
$ sudo touch /etc/hadoop/conf/hosts.exclude
iptablesを無効
$ sudo service iptables status
iptables: ファイアウォールが稼働していません。
$ chkconfig --list | grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ sudo chkconfig iptables off
$ chkconfig --list | grep iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Hadoopの設定
完全分散モードへ変更
$ ls /etc/hadoop/conf/
README hadoop-metrics.properties log4j.properties
core-site.xml hdfs-site.xml mapred-site.xml
$ alternatives --display hadoop-conf
hadoop-conf -ステータスは自動です。
リンクは現在 /etc/hadoop/conf.pseudo.mr1 を指しています。
/etc/hadoop/conf.empty - 優先項目 10
/etc/hadoop/conf.pseudo.mr1 - 優先項目 30
現在の「最適」バージョンは /etc/hadoop/conf.pseudo.mr1 です。
$ sudo cp -prL /etc/hadoop/conf /etc/hadoop/conf.distribute.mr1
$ sudo alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.distribute.mr1 50
$ alternatives --display hadoop-conf
hadoop-conf -ステータスは自動です。
リンクは現在 /etc/hadoop/conf.distribute.mr1 を指しています。
/etc/hadoop/conf.empty - 優先項目 10
/etc/hadoop/conf.pseudo.mr1 - 優先項目 30
/etc/hadoop/conf.distribute.mr1 - 優先項目 50
現在の「最適」バージョンは /etc/hadoop/conf.distribute.mr1 です。
HDFSの設定
設定変更前にサービス停止 $ sudo service hadoop-hdfs-namenode stop $ sudo service hadoop-hdfs-datanode stop Namenodeの設定 $ sudo vi /etc/hadoop/conf.distribute.mr1/core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://had.ms.example.com:8020</value> </property> 削除 <property> <name>fs.default.name</name> <value>hdfs://localhost:8020</value> </property> </configuration> データを格納するディレクトリの設定とレプリケーション数の設定 $ sudo vi /etc/hadoop/conf.distribute.mr1/hdfs-site.xml <configuration> 初期値なので編集不要 <property> <name>dfs.namenode.name.dir</name> <value>/var/lib/hadoop-hdfs/cache/${user.name}/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/var/lib/hadoop-hdfs/cache/${user.name}/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> Namenodeへの接続許可 $ sudo vi /etc/hadoop/conf/hosts.include had.s1.example.com had.s2.example.com had.s3.example.com $ sudo vi /etc/hadoop/conf.distribute.mr1/hdfs-site.xml <configuration> <property> <name>dfs.hosts</name> <value>/etc/hadoop/conf/hosts.include</value> </property> <property> <name>dfs.hosts.exclude</name> <value>/etc/hadoop/conf/hosts.exclude</value> </property> </configuration>
MapReduceの設定
設定変更前にサービス停止 $ sudo service hadoop-0.20-mapreduce-jobtracker stop $ sudo service hadoop-0.20-mapreduce-tasktracker stop JobTrackerのサーバー名とポート番号を指定 $ sudo vi /etc/hadoop/conf.distribute.mr1/mapred-site.xml <configuration> <property> <name>mapred.job.tracker</name> <value>had.ms.example.com:8021</value> </property> </configuration> MapReduce用のシステムディレクトリを指定 $ sudo vi /etc/hadoop/conf.distribute.mr1/mapred-site.xml <configuration> <property> <name>mapred.system.dir</name> <value>/var/lib/hadoop-hdfs/cache/mapred/mapred/system</value> </property> </configuration> Mapタスクスロット数/Reduceタスクスロット数の指定 $ sudo vi /etc/hadoop/conf.distribute.mr1/mapred-site.xml <configuration> <property> <name>mapred.tasktracker.map.tasks.maximum</name> <value>1</value> </property> <property> <name>mapred.tasktracker.reduce.tasks.maximum</name> <value>1</value> </property> </configuration> JobTrackerへの接続許可 $ sudo vi /etc/hadoop/conf.distribute.mr1/mapred-site.xml <configuration> <property> <name>mapred.hosts</name> <value>/etc/hadoop/conf/hosts.include</value> </property> <property> <name>mapred.hosts.exclude</name> <value>/etc/hadoop/conf/hosts.exclude</value> </property> </configuration>
設定後の起動
マスターノード $ sudo -u hdfs hdfs namenode -format マスターノード $ sudo service hadoop-hdfs-namenode start $ ps -ef | grep hadoop-hdfs-namenode | egrep -v 'grep|tail' スレーブノード $ sudo service hadoop-hdfs-datanode start $ ps -ef | grep hadoop-hdfs-datanode | egrep -v 'grep|tail' マスターノード $ sudo service hadoop-0.20-mapreduce-jobtracker start $ ps -ef | grep jobtracker | egrep -v 'grep|tail' スレーブノード $ sudo service hadoop-0.20-mapreduce-tasktracker start $ ps -ef | grep tasktracker | egrep -v 'grep|tail' $ sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging $ sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging $ sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred
JPSの確認
マスターノード $ sudo -u hdfs jps 2439 NameNode 1715 SecondaryNameNode 3534 Jps $ sudo -u mapred jps 3137 JobTracker 3577 Jps $ ls -l /tmp/hsperfdata_{hdfs,mapred} /tmp/hsperfdata_hdfs: -rw------- 1 hdfs hdfs 32768 8月 6 00:42 2016 1715 -rw------- 1 hdfs hdfs 32768 8月 6 00:42 2016 2439 /tmp/hsperfdata_mapred: -rw------- 1 mapred mapred 32768 8月 6 00:41 2016 3137 スレーブノード $ sudo -u hdfs jps 2254 DataNode 1543 SecondaryNameNode 2601 Jps $ sudo -u mapred jps 2434 TaskTracker 2631 Jps $ ls -l /tmp/hsperfdata_{hdfs,mapred} /tmp/hsperfdata_hdfs: -rw------- 1 hdfs hdfs 32768 8月 6 00:43 2016 1543 -rw------- 1 hdfs hdfs 32768 8月 6 00:42 2016 2254 /tmp/hsperfdata_mapred: -rw------- 1 mapred mapred 32768 8月 6 00:43 2016 2434
ログ/例外対応
ログファイル
マスターノード
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode-had.ms.example.com.log
tail -f /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-had.ms.example.com.log
スレーブノード
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-datanode-had.s1.example.com.log
tail -f /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-had.s1.example.com.log
例外が発生したら最初にやること
マスターノード
sudo mv /var/lib/hadoop-hdfs/cache/hdfs/dfs/name ~/
sudo -u hdfs hdfs namenode -format
スレーブノード
sudo mv /var/lib/hadoop-hdfs/cache/hdfs/dfs/data ~/
sudo service hadoop-hdfs-datanode start
sudo service hadoop-hdfs-secondarynamenode stop
インストール
$ sudo yum install hive
HDFSに作業フォルダーを作成
$ sudo -u hdfs hadoop fs -mkdir /user/vagrant
$ sudo -u hdfs hadoop fs -chown -R hive:hive /user/vagrant
Hiveシェル起動
$ hive
DB作成
hive> create database db_vagrant location '/user/vagrant';
hive> use db_vagrant;
インストール
$ sudo yum install pig