系统:ubuntu 16.04、Apache hadoop2.7.3
教程适用于hadoop2.0以上的系统
教程使用两个节点作为集群环境: 一个作为 Master 节点,局域网 IP 为 192.168.1.100;另一个作为 Slave 节点,局域网 IP 为 192.168.1.101。
hadoop安装对于熟悉linux系统的人来说难度系数会大大的降低,教程比较适合不懂linux的新手。
安装流程
- 安装linux ubuntu系统(我安装了linux桌面)
- 创建hadoop用户
- 更新apt
- 安装vim或者gedit
- 配置hosts和hostname
- 安装SSH、配置SSH无密码登录
- 安装java 环境
- 安装hadoop2
- 配置hadoop2集群/分布式环境
- hadoop2异常说明
安装linux ubuntu系统
ubuntu桌面版下载地址(linux新手推荐用桌面版比较容易上手)
http://www.ubuntu.com/download/desktop/
LTS表示 Long Term Support ,长期支持,linux建议安装LTS的
具体安装教程如下(这个教程感觉讲的很详细)
http://www.jb51.net/os/windows/298507.html
创建hadoop用户
这一步可以省略,如果你的linux系统已经有了别的用户
linux命令
sudo useradd -m hadoop -s /bin/bash #这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell
sudo passwd hadoop #设置密码,按提示输入两次密码
sudo adduser hadoop sudo #为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题
最后注销当前用户(点击屏幕右上角的齿轮,选择注销),在登陆界面使用刚创建的 hadoop 用户进行登陆
更新apt
linux命令
sudo apt-get update #更新apt
安装vim或者gedit
新手推荐安装gedit,比较符合windows操作习惯
安装命令
sudo apt-get install vim #安装vim
sudo apt-get install gedit #安装gedit
后续需要更改一些配置文件,会用到vim或者gedit,请根据个人喜欢自行使用
配置hosts和hostname
配置以后方便管理,同时可以使用主机名来访问局域网里的其它主机
sudo vim /etc/hosts #配置hosts
例如本教程使用两个节点的名称与对应的 IP 关系如下:
192.168.1.100 Master
192.168.1.101 Slave1
sudo vim /etc/hostname #配置hostname
例如本教程将192.168.1.100的主机名改成Master,将192。168.1.101改成Salve1
此时应该重启下系统
安装SSH配置SSH无密码登录
集群、单节点模式都需要用到 SSH 登陆(master),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server
sudo apt-get install openssh-server #安装SSH server
ssh localhost #使用命令登录本机,此时会有SSH首次登陆提示,输入 yes 。然后按提示输入密码,这样就登陆到本机了,然后输入【exit】退出
配置SSH无密码登录
利用 ssh-keygen 生成密钥
cd ~/.ssh/ #若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa #会有提示,都按回车就可以,最后可以输入ls命令查看目录下的文件
让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行:
cat ./id_rsa.pub >> ./authorized_keys #完成后可执行 ssh Master,就可以无密码登录到本地,验证以后记得输入exit,返回原来终端
在Master 节点上将公匙id_rsa.pub传输到 Slave1 节点:
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ #这里将公钥放在了Slave1节点/home/hadoop/目录下,scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。
在 Slave1 节点上,将 ssh 公匙加入授权:
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就可以删掉了
最好可以在Master节点通过ssh Slave1命令来测试下是否可以无密码登录到Salve1节点上
安装java环境
下载oracle JDK,可以通过https://wiki.apache.org/hadoop/HadoopJavaVersions 查看要hadoop支持哪些版本JDK
安装
sudo tar -zxf {jdk存放的目录}/jdk-xxx.linux.tar.gz -C /usr/local # 解压到/usr/local中
配置Javahome
sudo gedit /etc/profile #打开配置文件
在打开的文件末尾加入如下变量,然后保存
export JAVA_HOME={jdk安装目录} #例如/usr/local/java/jdk1.8.0_111
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
校验是否配置成功
echo $JAVA_HOME # 检验变量值
java -version
$JAVA_HOME/bin/java -version # 与直接执行 java -version 一样
出现如下提示表示配置成功,如果无反映可以尝试重启系统
安装hadoop2
我们将hadoop2安装在Master主机上面,一切配置好之后,把hadoop2直接复制到Slave1主机上面即可
下面的操作都是在Master主机上进行的
下载hadoop2
Hadoop2可以通过http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载,一般选择下载最新的稳定版本,即下载 “stable” 下的 hadoop-2.x.y.tar.gz 这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。
安装hadoop2
sudo tar -zxf {hadoop下载路径}/hadoop-2.7.3.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
校验hadoop2是否安装成功
cd /usr/local/hadoop
./bin/hadoop version
看到这个信息表示hadoop2安装成功
配置hadoop环境变量
将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用 hadoo、hdfs 等命令了。首先执行 sudo gedit /etc/profile
修改PATH,在PATH末尾加入:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
加上之前配置的java环境,最好的PATH如下
export PATH=$PATH:$JAVA_HOME/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
配置hadoop2集群/分布式环境,在Master主机上进行配置
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
官方文档地址【2.7.3doc】:http://hadoop.apache.org/docs/r2.7.3/
- 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。
- 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/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- 文件 hdfs-site.xml,dfs.replication 一般设为 3表示有3个Slave节点,但我们只有一个 Slave 节点,所以 dfs.replication 的值设为 1:
<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/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 文件 mapred-site.xml (hadoop2.7.3需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
<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>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
将配置好的hadoop2从Master主机复制到其它Slave主机
Master节点的hadoop配置好以后,将/usr/local/hadoop文件夹复制到各个Slave节点。
在Master节点执行
cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop #将hadoop文件夹压缩到/home/hadoop/目录下
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop #将hadoop.master.tar.gz从Master主机复制到Salve1主机/home/hadoop目录下
在Salve节点执行
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local #解压安装
sudo chown -R hadoop /usr/local/hadoop #给hadoop目录赋予读写权限
格式化NameNode
首次启动需要先在 Master 节点执行 NameNode 的格式化:
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
启动hadoop2
在Master节点执行如下操作
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
通过命令jps可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,在 Slave 节点可以看到 DataNode 和 NodeManager 进程。缺少任一进程都表示出错。我们通过浏览器打开网址:http://master:50070/查看datanode和namenode的状态,如果有异常通过查看集群log文件来排查异常。
hadoop2异常说明
网友评论