上个月写的记录,今天想起来弄到博客上了
捣腾了很长时间,算是把集群搭建起来了,这里做一个小小的总结,毕竟走了不少弯路,希望以后能吸取教训。
使用了三台主机,配置如下:
hostname | OS | IP |
---|---|---|
node7 | Ubuntu16.04 | 192.168.1.101 |
node8 | Ubuntu16.04 | 192.168.1.102 |
node11 | Ubuntu16.04 | 192.168.1.103 |
节点功能配置:
Namenode | Datanode |
---|---|
node8 | node7,node11 |
需要安装的软件包括 jdk、 hadoop 、 ssh
我的搭配是: jdk1.8.0_121 + hadoop2.6.5+ssh
为避免权限问题,以下所有操作均以root用户操作
安装jdk
下载jdk-8u121-linux-64.tar.gz
, 解压到/usr/java
下
最终为/usr/java/jdk1.8.0_121
安装hadoop
下载hadoop-2.6.5.tar.gz
,解压到/usr/hadoop
下
最终为/usr/hadoop/hadoop2.6.5
安装ssh-server
执行如下命令
apt-get install openssh-server
安装好ssh-server后,需要配置SSH免密码登录。【见问题汇总】
解压jdk和Hadoop后,要设置JAVA_HOME
和HADOOP_HOME
环境变量。网上所述,在Ubuntu16.04中,环境变量应放在~/.profile
中,但测试无效,最后的解决方法是直接添加到~/.bashrc
中。在这个例子中,具体是向~/.bashrc
中添加了如下两行:
export JAVA_HOME=/usr/java/jdk1.8.0_121
PATH=$PATH:$JAVA_HOME/bin
HADOOP_HOME=/usr/hadoop/hadoop2.6.5
PATH=$PATH:$HADOOP_HOME/bin
保存,执行source ~/.bashrc
命令让修改生效。
在终端输入 java -version
命令,如果正确显示Java的版本,说明java配置成功。
在/usr/hadoop/
下建立hdfs、tmp两个目录,
在/usr/hadoop/hdfs
下新建data、name两个目录。
目前对性能、负载均衡不做太大要求,所以需要考虑的配置文件比较少,主要涉及以下文件
以下文件路径均为:HADOOP_HOME/etc/hadoop/
接下来说下几个主要的配置文件
hadoop-env.sh mapred-env.sh
在hadoop-env.sh和mapred-env.sh中
为了避免环境变量不生效等问题,注释掉如下语句,export JAVA_HOME=${JAVA_HOME}
手动指定JAVA_HOME
路径的设置。
添加export JAVA_HOME=/usr/java/jdk1.8.0_121
core-site.xml
主要的配置如下:
<property>
<name>fs.defaultFSname>
<value>hdfs://node8:9000value>
<description>指定namenode主机及端口号description>
property>
<property>
<name>hadoop.tmp.dirname>
<value> file:/usr/hadoop/tmpvalue>
<description>指定namenode存放相关文件的目录~description>
property>
hdfs-site.xml
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node8:9001value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/usr/hadoop/hdfs/namevalue>
<description>命名节点存放信息目录description>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/usr/hadoop/hdfs/datavalue>
<description>数据节点存放数据目录description>
property>
<property>
<name>dfs.replicationname>
<value>2value>
property>
mapred-site.xml
<property>
<name>mapreduce.framowork.namename>
<value>yarnvalue>
<description>系统采用的资源调度框架名description>
property>
slaves
node7
node11
配置好一个节点后,将这些配置文件分发到集群中的其他节点,确保集群中所有机器的配置信息一致。
在hadoop集群中的节点通信时需要用到ssh,在这里我们需要配置ssh面密码登录,也就是说节点之间能够通过ssh服务远程登录,不需要交互式地输入密码。【见问题汇总】
首先格式化namenode,执行hadoop namenode -format
命令。
成功格式化namenode之后,切换到/usr/hadoop/hadopp2.6.5/sbin
下
执行./start-all.sh
命令启动namenode,datanode等。
安装ssh-sever
首先确保需要互相连接的两台主机间安装了ssh并开启了ssh-server服务
安装方法,执行
apt-get install openssh-server
查看ssh-server是否启动
ps -aux |grep
如果显示 sshd
相关字样,说明ssh-server已开启
如何免密码登录
ssh通过公钥密钥对来完成认证和加密。
执行命令ssh-keygen
,一路回车。
默认会生成~/.ssh/id_rsa.pub
和~/.ssh/id_rsa
两个文件。
我的理解是:如果A要免密码登录到B,那么将A的公钥添加到B的~/.ssh/authorized_keys
文件中;
同理,B要免密码登录A,需要将B的公钥添加到A的~/.ssh/authorized_keys
文件中。
配置好以后,通过执行ssh remotehost
登录远程主机。
主机间的文件拷贝可通过scp命令完成,命令格式为:
scp userA@hostA:fileA userB@hostB:fileB
如何设置root用户ssh登录
默认情况下,禁止root通过ssh登录,在此例中,需要开启。
编辑/etc/ssh/sshd_config
注释掉PermitRootLogin
这一行,添加PermitRootLogin yes
为了方便,修改主机默认的hostname,并配置每个节点的hosts文件,完成节点名称与IP的映射。
修改hostname
编辑/etc/hostname
,添加hostname
此例中,三个主机的hostname分别配置为node7
,node8
,node11
完成主机和IP的映射
在三台主机上的/etc/hosts
添加如下配置:
node7 192.168.1.101
node8 192.168.1.102
node11 192.168.1.103
重启主机使修改生效。
采用eclipse开发mapred,可使用相关Hadoop插件。
插件的安装:将下载的hadoop-eclipse-plugin-2.6.5.jar
拷贝到eclipse安装目录下的plugins目录下(我这里是/usr/eclipse/plugins
),重启eclipse。
在【new】-【other】中可以看到【Maps/Reduce】项目向导,说明插件添加成功。
如果找不到新添加的插件,可以试着先通过删掉/usr/eclipse/configuration/
下的org.eclipse.update
目录,再重启eclipse。一般来说重启后就能检测到新添加的插件。
Hadoop 新 MapReduce 框架 Yarn 详解
hadoop2.6完全分布式环境搭建 - 风痕影默 - 博客园
看懂Hadoop集群原理与实现方式董志峰Do新浪博客
Linux中安装配置hadoop集群 - 会心一击 - 博客园
Hadoop安装教程单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04给力星
SSH 密钥类型的的选择 - 残雪余香 - 博客园
Hadoop中重新格式化namenode - WQ-JAY的个人空间
Linux下Hadoop2.6的安装 - mm_bit的博客 - 博客频道 - CSDN.NET
Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统) - shishanyuan - 博客园