hadoop

来源:互联网 发布:五十知天命什么意思 编辑:程序博客网 时间:2024/06/03 22:01

一、安装说明

系统环境:CentOS-6.4 Oracle VM VirtualBox

Hadoop版本:hadoop-2.4.1

 

以下都是采用root用户操作,建议另外创建一个用户和组,如: hadoop用户和hadoop用户组

二、安装前提

1、在VirtualBox中安装好CentOS6.4 linux操作系统

2、添加hadoop用户和hadoop用户组

groupadd hadoop     #  创建hadoop用户组

useradd -g hadoop hadoop #创建hadoop用户,并分配给hadoop用户组

id hadoop # 查询hadoop用户

passwd hadoop # hadoop设置密码

chown hadoop:hadoop -R 文件夹

 

2、下载要使用的软件

     hadoop-2.4.1.tar.gz

     jdk-6u43-linux-x64.bin

3、规划服务器

     

IP

hostname

角色

 

192.168.56.100

master

nameNode

 

192.168.56.102

slave1

dataNode

 

 

4、设置VM

     4.1 修改master机器IP地址 ,eth1采用host-only,让vmwindows在同一个局域网内

 

     3.2 使用命令ifconfig查看

     

     3.3 开启linuxSSH服务,方便远程访问。

需要在 root 用户下操作。也可以使用ntsysv,找到sshd服务

 

     3.4 修改hosts文件

hostname 查看主机名

 

vi /etc/hosts

 

vi /etc/sysconfig/network,更正:将master.localhost 修改为 master

 

以上修改完成后,重启虚机机。主机名变成了:master

 

     3.5 关闭防火墙

 

     3.6 设置ssh免密码登陆

产生密钥,执行命令ssh-keygen -t rsa -P '' ,产生的密钥位于~/.ssh文件夹

 

 

 追加:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 或者使用 cp ~/.ssh/id_rsa.pub  ~/.ssh/authorized_keys 

在验证前,需要做两件事儿。第一件事儿是修改文件“authorized_keys”权限(权限的设置非常重要,因为不安全的设置,会让你不能使用RSA功能),

另一件事儿是使用root用户设置“/etc/ssh/sshd_config”的内容。使其无密码登录有效。
1)修改文件“authorized_keys
chmod 600 ~/.ssh/authorized_keys 

备注:如果不进行设置,在验证时,扔提示你输入密码,在这里花费了将近半天时间来查找原因。

 

2)用root用户登录服务器修改SSH配置文件“/etc/ssh/sshd_config”的下列内容

vim /etc/ssh/sshd_config

 

设置完之后记得重启SSH服务,才能使刚才设置有效。

 

本地验证,无密码登录已经设置完毕

 

【如果采用伪分布式安装Hadoop,忽略以下操作】

修改slave1 192.168.56.102 的 vi /etc/sysconfig/network文件

 

 

修改slave1 192.168.56.102 和 master 192.168.56.100 的 vi /etc/hosts 文件

重启slave1的虚拟机。

 

1)接下来的事儿是把公钥复制所有的Slave器上。将master生成的id_rsa.pub拷贝到slave

命令格式进行复制公钥:scp ~/.ssh/id_rsa.pub  远程用户名@远程服务器IP:~/

例如:scp ~/.ssh/id_rsa.pub root@192.168.56.102:~/

上面的命令是复制文件“id_rsa.pub”到服务器IP为“192.168.56.102”的用户为“root”的“/root”文件夹下面。

 

从上图中我们得知,已经把文件“id_rsa.pub”传过去了,因为并没有建立起无密码连接,所以在连接时,仍然要提示输入192.168.56.102服务器用户root的密码。

 

为了保证确保确实已经把文件传过去了,Xshell或者SecureCRT登陆slave1 192.168.56.102服务器,从图中得知已经成功把公钥复制过来咯。

 

2)查看slave1~目录下是否有.ssh文件夹,如果没有则创建,使用命令: mkdir ~/.ssh,并且修改权限 chmod 700 ~/.ssh

备注:如果不进行,即使你按照前面的操作设置了“authorized_keys”权限,并配置了“/etc/ssh/sshd_config”,还重启了sshd服务,在Master能用“ssh localhost”进行无密码登陆,
但是对Slave1进行登录仍然需要输入密码,就是因为“.ssh”文件夹的权限设置不对。这个文件夹“.ssh”在配置SSH无密码登录时系统自动生成时,权限自动为“700”,
如果是自己手动创建,它的组权限和其他权限都有,这样就会导致RSA无密码远程登录失败。

 

3)追加到授权文件“authorized_keys

这一步就是把Master的公钥追加到Slave1的授权文件“authorized_keys”中去。使用下面命令进行追加并修改“authorized_keys”文件权限:

 

4)用root用户修改“/etc/ssh/sshd_config
具体步骤参考前面Master的“设置SSH配置”,具体分为两步:第1是修改配置文件;第2是重启SSH服务。

 

5)在Master服务器中使用SSH无密码登录Slave1 
当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。

ssh 远程服务器IP

从上图我们主要3个地方,第1个就是SSH无密码登录命令,第23个就是登录前后“@”后面的机器名变了,由“Master”变为了“Slave1”,

这就说明我们已经成功实现了SSH无密码登陆了。


最后记得把“/root”目录下的“id_rsa.pub”文件删除掉。
rm r ~/id_rsa.pub 

到此为止,经过前5步已经实现了从“Master.Hadoop”到“Slave1.HadoopSSH无密码登录,

下面就是重复上面的步骤把剩余的两台(Slave2.Hadoop Slave3.HadoopSlave服务器进行配置。

这样,我们就完成了“配置Master无密码登录所有的Slave服务器”。

 

配置所有Slave无密码登录Master 

slave1 192.168.56.102上创建创建自己的公钥和私钥,并把自己的公钥追加到"authorized_keys"文件中。

 

more authorized_keys

此处已经将slave1 192.168.56.102自己的公钥追加到了 authorized_keys中。

 

使用命令“scp”复制“Slave1.Hadoop”的公钥“id_rsa.pub”到“Master.Hadoop”的“/root”目录下,并追加到“Master.Hadoop”的“authorized_keys”中。

1)在“Slave1.Hadoop”服务器的操作,scp ~/.ssh/id_rsa.pub root@192.168.56.100:~/

 

2)在“master.Hadoop”服务器的操作

验证文件是否已经复制到master 192.168.56.100~目录下,登陆到192.168.56.100上查看,如图已经证明成功复制。

 

slave1的公钥id_rsa.pub 追加到 ~/.ssh/authorized_keys

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

 

然后删除掉刚才复制过来的“id_rsa.pub”文件。

 

slave1 192.168.56.102 验证SSH无密码登陆到 master 192.168.56.100

 

 

从上面结果中可以看到已经成功实现了,再试下从“Master.Hadoop”到“Slave1.Hadoop”无密码登录。

 

至此“Master.Hadoop”与“Slave1.Hadoop”之间可以互相无密码登录了,

剩下的就是按照上面的步骤把剩余的“Slave2.Hadoop”和“Slave3.Hadoop”与“Master.Hadoop”之间建立起无密码登录。

这样,Master能无密码验证登录每个Slave,每个Slave也能无密码验证登录到Master

 

三、安装

1、安装JAVA环境,因为Hadoop都是运行在JDK之上的。

所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以“root”的身份进行。

 

使用命令 chmod u+x jdk-6u43-linux-x64.bin ,赋予可执行的权限

将 jdk-6u43-linux-x64.bin 拷贝到 /usr/java目录下,如果没有java目录,先创建。

 

安装JDK,多出 jdk1.6.0_43,并删除原安装包

 

配置JDK环境变量

vim /etc/profile

 

#set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_43
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

 

保存并且生效,source /etc/profile

 

验证是否生效,java -version

 

JDK至此安装成功。

 

安装剩余机器,slave1、等等

然后去slave1上查看是否复制成功。

 

按照上面的步骤,在其他机器上安装JDK

 

2Hadoop集群安装

所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以“root”的身份进行。

 

Hadoop的安装路径添加到 "etc/profile"中,修改"/etc/profile"文件(配置java 环境变量的文件),将以下语句添加到末尾,并使其有效

#set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

 

保存并且生效,source /etc/profile

 

Hadoop的配置文件

之前的版本的配置文件主要是Hadoop-default.xmlHadoop-site.xml

由于Hadoop发展迅速,代码量急剧增加,代码开发分为了corehdfsmap/reduce三部分,配置文件也被分成了三个core-site.xmlhdfs-site.xmlmapred-site.xml
core-site.xmlhdfs-site.xml是站在HDFS角度上配置文件;core-site.xmlmapred-site.xml是站在MapReduce角度上配置文件。

 

修改 hadoop-env.sh

export JAVA_HOME=${JAVA_HOME} 修改为 export JAVA_HOME=/usr/java/jdk1.6.0_43  

 

修改 yarn-env.sh

 

修改 slaves

salve节点的 主机名或者IP 加入,把原来的“localhost”删掉。

 

 

注意:原来文件中的<configuration></configuration>对是存在的,不要重复加入:

修改 vim core-site.xml

<configuration>
     <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.groups</name>
        <value>*</value>
    </property>
</configuration>

 

修改 vim hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

 

原来系统内的mapred-site.xml文件是mapred-site.xml.template 应用下面的命令对其重命名:
mv mapred-site.xml.template mapred-site.xml

修改 vim 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>
     <property>
        <name>mapreduce.jobtracker.address</name>
        <value>master:9001</value>
    </property>
</configuration>

 

修改 vim yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
</configuration>

 

修改完毕后,将配置文件拷贝到slave节点:scp -r /usr/hadoop/etc/hadoop/ root@192.168.56.102:/usr/hadoop/etc/

 

按照前两部分将所有节点都配置好之后,就可以启动hadoop集群了。
首先在master节点上使用如下命令:
命令 hadoop namenode format  #格式化namenode节点。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh

中间省略很多信息

出现红色的信息,表示格式化HDFS成功~~~

 

start-all.sh    #启动集群

红色标记:表示出现一个警告,start-all.sh 已经过期,不建议使用。建议使用start-dfs.shstart-yarn.sh

新版本的hadoop其实不建议这么直接start-all,建议一步步来,神马start-dfs,然后在start-map,之类的,我觉得麻烦,就没试。

 

在每个节点上使用jps命令查看进程:

master 192.168.56.100

 

slave1 192.168.56.102

 

stop-all.sh   #停止集群

 

查看DataNode的信息: hadoop dfsadmin -report

 

浏览器打开:http://192.168.56.100:50070/dfshealth.html#tab-overview

 

浏览器打开:http://192.168.56.100:8088/cluster

 

=================================================================

遗留问题:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

加上调试日志:命令行 export HADOOP_ROOT_LOGGER=DEBUG,console​  或者  在 hadoop-env.sh 加入 export HADOOP_ROOT_LOGGER=DEBUG,console

wrong ELFCLASS32难道是加载的so文件系统版本不对

执行命令file libhadoop.so.1.0.0

果然是80386,是32位的系统版本,而我的hadoop环境是64OS
原来直接从apache镜像中下载的编译好的Hadoop版本native library都是32版本的,如果要支持64位版本,必须自己重新编译,这就有点坑爹了,要知道几乎所有的生产环境都是64位的OS
YARN官方对于native library的一段话验证了这一点
The pre-built 32-bit i386-Linux native hadoop library is available as part of the hadoop distribution and is located in the lib/native directory​”

重新checkout source code
svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.1.0-beta/
加上编译native的选项,编译时会根据当前的操作系统架构来生产相应的native
mvn package -Pdist,native -DskipTests -Dtar
再去native文件下查看所有的file type,已经都是64位版的了,替换线上文件,WARNING消除

 

参考资料:

 

Hadoop 新 MapReduce 框架 Yarn 详解

 

Hadoop 2.4.0完全分布式平台搭建、配置、安装

 

Hadoop-2.4.0分布式安装手册

 

hadoop2.4.0 安装配置

 

Hadoop 2.2.0 (YARN)搭建笔记

 

hadoop2.4.0​安​装​教​程

 

 

印象笔记,让记忆永存。下载印象笔记

 


0 0
原创粉丝点击