Hadoop集群搭建之夜
废话少说、书归正传,集群搭建步骤:
- 拥有两台或以上具有独立IP的机器
- 每台机器设置好地址映射(hosts与hostname文件)
- 每台机器依次配置好jdk、scala、hadoop环境
- 增加独立的hadoop用户(可选)
- 配置每台机器的ssh免密码登录(主要指master向slave)
- 每台机器配置好hadoop下的五个xml配置文件
- 初始化然后尝试运行
- 排错然后再运行
错误的努力
我经历了一个错误的白费力气的夜晚:我尝试以我装了Ubuntu16.04的系统作为master节点带动一个Ubuntu的Aliyun服务器作为slave1,但是发现一切配置妥当之后,居然ssh自己的ip行不通,但是以localhost之名ssh自己却没问题;一通乱改之后发现:原来连接路由器的pc不具备独立ip,无法被外网ssh登录22号端口;所以pc连接都是以局域网内网ip在配置集群;于是我再出血61.55元再买一台主机作为slave1节点,原来的slave1因为性能尚可被命为master节点;
每台机器设置好地址映射
现在先在准备作为master的主机上作
vi /etc/hostname
然后抹去原来名字,设为”master”
vi /etc/hosts
然后添加
111.123.123.122 master
121.133.123.125 slave1
然后在准备作为slave1的主机上
vi /etc/hostname
然后抹去原来名字,设为”slave1”
vi /etc/hosts
然后添加
111.123.123.122 master
121.133.123.125 slave1
最好在pc上也配置一下代号,然后方便随时切换登录,之后会超频繁;
依次配置好jdk、scala、hadoop环境
下载jdk,scala,限于云主机速度我是用pc传过去的
供主机下载的地址:
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
scala:http://www.scala-lang.org/download/
root@pc$ scp jdk-8u131-linux-x64.tar.gz master:/download/
root@pc$ scp scala-2.12.2.tgz master:/download
root@pc$ scp jdk-8u131-linux-x64.tar.gz slave1:/download/
root@pc$ scp scala-2.12.2.tgz slave1:/download
root@pc$ ssh master
root@master$ sudo mkdir /usr/lib/jdk
root@master$ sudo mkdir /usr/lib/scala
root@master$ sudo tar -zxvf jdk-8u131-linux-x64.tar.gz -C /usr/lib/jdk
root@master$ sudo tar -zxvf scala-2.12.2.tgz -C /usr/lib/scala
root@master$ sudo vim /etc/profile
然后加入:
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export SCALA_HOME=/usr/lib/scala/scala-2.12.2
export PATH=${SCALA_HOME}/bin:$PATH
再去往修改
root@master$ vim ~/.bashrc
增加在最后一行
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_131
再使其生效
root@master$ source ~/.bashrc
root@master$ source /etc/profile
检查配置
root@master$ $JAVA_HOME/bin/java -version
配置master向slave组的ssh免密码登录
请注意:root后面的名字表明了我们此时正在哪一台主机上面;
root@master$ apt-get install openssh-service
root@master$ ssh localhost
root@master$ logout
root@master$ cd ~/.ssh
root@master$ ssh-keygen -t rsa
root@master$ cat ./id_rsa.pub >> ./authorized_keys
root@master$ scp ~/.ssh/id_rsa.pub slave1:~
root@master$ ssh slave1
root@slave1$ cd ~/.ssh
root@slave1$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
root@slave1$ rm ~/id_rsa.pub
root@slave1$ logout
root@master$ ssh slave1
root@slave1$ logout
最后两步即是检验是不是能够无密码登录了;
配置hadoop文件夹下的5个xml配置文件
由于要求集群每台主机的hadoop下配置相同,所以我们先在master上安装hadoop,完成配置,再复制到其他slave主机,最后再写入环境变量;
root@pc$ scp hadoop.tar.gz master:/usr/local
root@pc$ ssh master
root@master$ cd /usr/hadoop
root@master$ sudo tar -zxf ./hadoop-2.7.3.tar.gz
root@master$ cd hadoop-2.7.3/etc/hadoop
root@master$ vim slaves
root@master$ vim core-site.xml
root@master$ vim hdfs-site.xml
root@master$ vim mapred-site.xml
root@master$ vim yarn-site.xml
这五次分别配置为
slaves
slave1
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-2.7.3/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-2.7.3/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置完成,打包整个hadoop文件复制到其他所有slave节点,并配置hadoop环境变量;
root@master$ tar -zcf hadoop.tar.gz ./hadoop-2.7.3/
root@master$ scp hadoop.tar.gz slave1:/usr/local
root@master$ ssh slave1
root@slave1$ cd /usr/local
root@slave1$ sudo tar -zxf ./hadoop-2.7.3.tar.gz
首先执行 vim ~/.bashrc,加入一行:
export PATH=$PATH:/usr/local/hadoop-2.7.3/bin:/usr/local/hadoop-2.7.3/sbin
再执行source ~/.bashrc;
接近尾声
接下来可以启动试试,首先要初始化
root@master$ hdfs namenode -format
root@master$ start-dfs.sh
root@master$ start-yarn.sh
root@master$ mr-jobhistory-daemon.sh start historyserver
尝试开启分布式任务
root@master$ hdfs dfs -mkdir /user
root@master$ hdfs dfs -mkdir -p /user/root
root@master$ hdfs dfs -mkdir input
root@master$ hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop/*.xml input
root@master$ hdfs dfs -ls input
root@master$ hadoop jar /usr/local/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
root@master$ hdfs dfs -cat output/*
root@master$ stop-dfs.sh
root@master$ stop-yarn.sh
root@master$ mr-jobhistory-daemon.sh stop historyserver