Hadoop集群安装
安装环境
OS
CentOS 6.5 (cat /etc/issue
查看)
IP
ip | hostname | 定位(新hostname) |
---|---|---|
ip1 | vm1 | Master |
ip2 | vm2 | Slave1 |
ip3 | vm2 | Slave2 |
用户
建议新建hadoop用户
$ sudo useradd -m hadoop -s /bin/bash # 建立新用户,设置用户默认shell
$ sudo passwd hadoop # 设置密码
$ su hadoop # 切换用户
防火墙
需要关闭防火墙
大致步骤
- 划分Master和slave
- 配置ssh免密登录
- 配置Master的JAVA环境,安装Hadoop
- 配置Slave的JAVA环境,安装Hadoop
- 启动,测试
主从划分
- 为了便于区分,可以选择修改hostname(/etc/sysconfig/network CentOS)
- 按照上述表格选择修改
/etc/hosts
(节点映射关系),此时ping ip1
与ping Master
效果相同
PS:
hostname(uname -a)
查看主机名- hostname重启后才可生效
配置ssh免秘钥登录
目的是为了免去每次ssh登录都要输入密码的麻烦,原理是公钥加密。
- Master/Slave1/Slave2分别生成公钥
cd ~/.ssh # 若没有该目录,可执行ssh localhost
rm ./id_rsa* # 删除旧的公匙
ssh-keygen -t rsa # 生成新公钥
- 保存公钥
cat ./id_rsa.pub >> ./authorized_keys
此时可免密登录localhost
3. 将Slave1和Slave2密钥存入Master主机,并加入到主机授权文件中
scp ~/.ssh/id_dsa.pub hadoop@master:/home/hadoop/.ssh/id_dsa.pub.slave01
scp ~/.ssh/id_dsa.pub hadoop@master:/home/hadoop/.ssh/id_dsa.pub.slave02
cat id_dsa.pub.slave01 >> authorized_keys
cat id_dsa.pub.slave02 >> authorized_keys
- 将Master授权文件拷入Slave中,实现互通
scp authorized_keys hadoop@slave1:/home/hadoop/.ssh/authorized_keys
scp authorized_keys hadoop@slave2:/home/hadoop/.ssh/authorized_keys
配置JDK
安装JDK( 可选Oracle 的 JDK,或是 OpenJDK),详细可参见链接
主要有命令行和压缩包两种方法(需要注意JDK版本与Hadoop版本,最新版Hadoop(3.0.0)需要安装JAVA8(参考)),步骤如下:
- 命令行安装(CentOS```sudo yum install java-1.7.0-openjdk-devel
2. 配置以下环境变量(路劲按实际情况填写),``` vi .bashrc```
Java Env
JAVA_HOME=/usr/java/jdk1.7.0_79
JRE_HOME=/usr/java/jdk1.7.0_79/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
```source .bash_profile```使之生效
3. 使用```java -version```验证是否安装成功
#### 安装Hadoop
过程和装JDK差不多,都是下载,解压,然后配置变量。
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
```source .bashrc```使配置生效,使用```hadoop```来验证是否安装成功
#### 配置
正常启动集群需要修改```/hadoop/etc/hadoop```中的几个文件,slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。
1. slaves
DataNode 的主机名写入该文件,每行一个
2. core-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
- mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
PS:配置好后,将这些文件复制到slave机器。
启动
首次启动在Master节点执行NameNode的格式化:
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
启动集群
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
使用jps
命令查看节点启动的进程,Master和slave上均可使用。
使用hdfs dfsadmin -report
可以查看Datanode是否成功启动
启动后问题
-
浏览器访问9000端口被拒绝
原因,没有格式化hdfs(注意:本身9000端口也不可以通过浏览器访问,否则会出现问题2)
https://stackoverflow.com/questions/18322102/hadoop-connection-refused-on-port-9000 -
It looks like you are making an HTTP request to a Hadoop IPC port. This is not the correct port for the web interface on this daemon.
https://stackoverflow.com/questions/20216614/hadoop-2-2-0-it-looks-like-you-are-making-an-http-request-to-a-hadoop-ipc-port -
浏览器默认端口
Resource Manager: http://hadoop1:8088
Web UI of the NameNode daemon: http://hadoop1:50070
HDFS NameNode web interface: http://hadoop1:8042
参考:
- http://www.powerxing.com/install-hadoop-cluster/ (很详细,推荐看这个)
PS:
另外,可以通过Cloudera来安装,等尝试后会记录一下,有兴趣的同学可以先搜一下
PPS:
二维码仅做测试用,看不过去的轻(绕)喷(行)