VirtualBox5.0.18+CentOS7.2+Hadoop2.7.2配置与开发

来源:互联网 发布:java udp编程 编辑:程序博客网 时间:2024/06/06 10:49

VirtualBox5.0.18+CentOS7.2+Hadoop2.7.2配置与开发

作者:duyi@163.com

 

密码设置:

超级用户root密码设置为: qwqwqw ;

用户hadoop的密码设置为:hadoop123,hadoop在安装时选择了作为管理员

开始安装时间:2016年4月27日

A,安装CentOs7.2客户机

一,环境及设置

宿主机:DELL precision 5510(移动工作站,4核心XEON CPU,16G内存,512GB  SSD,64位Windows10中文专业版,无线网卡,也可接入USB以太网卡); 没有使用WLAN的“Internet连接共享”。

虚拟机:VirtualBox5.0.18;

客户机:64位CentOs7.2  (ISO文件:CentOS-7-x86_64-Everything-1511.iso)。

二,客户机安装步骤

开始安装时间:2016年4月27日8点。

客户机的网卡设置:只选了Host-only网络。

在安装启动界面按向上键,选“Install  CentOS7”后按回车键;

语言选择“中文”,“简体中文(中国)”;

点击“软件选择”,选“带GUI的服务器”,右侧的附加选项的选择如图一所示。图中未显示或未选择的附加项不安装。

图一

点击“完成”;点击“安装位置”,点击”完成”;

创建作为管理员的用户hadoop:

点击“开始安装”;点击“ROOT密码”设置root密码;点击“创建用户”,创建用户hadoop,选择“将此用户作为管理员”

共1700个安装包。

等几分钟安装完成后,点击“重启”。

启动界面,如图二和图三所示。

图二CentOS7.2的启动界面

图三 piix4和intel_rapl信息(解决办法见后)

图四

按下数字键1,回车,按字符键C几次。图四这个协议同意屏幕只出现一次。

以root身份登录。

在“欢迎”对话框确定“汉语”打了勾,点击“前进”,选择“汉语(Intelligent Pin因)”后点击“前进”,然后点击“开始使用CentOSLinux”。

安装增强包

在客户机运行窗口中,点击“设备”,点击“安装增强功能”,弹出的对话框内点击“运行”。大约1分钟即可安装完毕(无需连网),如图五所示。

图五

必须重启客户机才能使得全部增强功能有效。执行立即关机命令shutdown –h now 。然后启动客户机。

客户机和宿主机之间可以共享剪贴板和互相拖放文件了。共享文件夹也有效了。共享文件夹默认只能由root操纵。可以由root将文件复制到客户机的某处,然后将权限授予普通用户。如图六所示。

图六

解决piix4和intel_rapl问题

 

办法:创建黑名单文件,阻止试图载入这两个模块。

$sudo vi /etc/modprobe.d/blacklist.conf

内容:

blacklist i2c_piix4

blacklist intel_rapl

然后,客户机关机,启动。

 

B,编辑host-only网络

到目前为止,客户机的网卡仍然处于关闭状态,无法与其它机器通讯,因此,需要启动。此时,宿主机也没有使用WLAN的“Internet连接共享”。

一,查看仅主机(Host-Only)网络的默认值:

“Oracle VM VirtualBox管理器”的”管理”,”全局设定”,“网络”。如图所示。

图七

默认未启用仅主机(Host-Only)网络的DHCP服务器

在宿主机上未对两个网卡做任何改动!如图所示。

图八

二,修改网卡的配置文件

目的:使得该网卡自动随客户机启动,有静态的IP地址,能够和其他同在该仅主机(Host-Only)网络的客户机互相ping通。

1,查看网络信息

     图九

2,查看和编辑enp0s3的配置文件

/etc/sysconfig/network-scripts/ifcfg-enp0s3

将ifcfg-enp0s3的内容改为:

TYPE=Ethernet

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=no

IPV6_AUTOCONF= no

IPV6_DEFROUTE= no

IPV6_FAILURE_FATAL=no

NAME=enp0s3

UUID=a405ee0f-b609-43f2-afda-797a91344396

DEVICE=enp0s3

ONBOOT=yes

IPADDR=192.168.56.2

PREFIX=24

GATEWAY=192.168.56.1

DNS1=192.168.56.1

IPV6_PEERDNS= no

IPV6_PEERROUTES= no

 

3,关闭客户机后启动

#shutdown  -h  now

可见客户机IP设置成功。

客户机(192.168.56.2)和宿主机(192.168.56.1)可以互相ping通。但客户机此时不能连接Internet。

4,设置主机名

编辑/etc/hosts文件。

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

192.168.56.2    master

C,关闭防火墙

#systemctlstop firewalld.service #停止firewall

#systemctldisable firewalld.service #禁止firewall开机启动

#firewall-cmd--state #查看默认防火墙状态(关闭后显示not running,开启后显示running)

D,SSH免密码登录

SSH免密码登录的原理:Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Slave(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。  

当Master通过ssh连接Salve时,Salve就会生成一个随机数,并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave, Slave确认解密数无误之后就允许Master进行连接了。

这就是一个公钥认证过程,其间不需要用户手工输入密码。

1,生成密钥

用户hadoop登录客户机。进入用户的home目录,执行如下命令:

$ssh-keygen -t rsa-P '' -f  ~/.ssh/id_rsa

# 注解:ssh-keygen表示生成密钥;-t指定密钥类型;-P 提供密语;-f生成的密钥文件;这条命令表示生成了一个未加密的密钥对,此时生成的/home/hadoop/.ssh目录下会生成 id_rsa和id_rsa.pub两个文件,前者是私钥,后者是公钥。

密钥类型也可以使用dsa。如果采用dsa加密算法,则将命令和文件中的rsa换成dsa即可。

    图十

2,密钥处理

1)将公钥追加到授权key中:

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

2)将授权key文件权限改为600:

$chmod 600 ~/.ssh/authorized_keys

图十一

3)切换到root用户,修改ssh配置文件

/etc/ssh/sshd_config文件的属主是root,而且权限是600,所以root才能修改该文件。图形化环境中,可以用gedit改文件。

su   root

#gedit  /etc/ssh/sshd_config

4)去掉/etc/ssh/sshd_config内下列几行前的注释

RSAAuthentication yes # 启用 RSA认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

5)验证是否可以免密码登录

客户机关机,然后启动,以hadoop身份登录客户机,然后做验证:

$ssh    localhost

Last login: Thu Sep 10 07:38:10 2015 from localhost出现这样的信息,表示SSH免密码登录配置成功。 提示:第一次连接的时候可能会提示是否要连接,输入yes即可。

   图十二

E,安装JDK

root从共享文件夹复制jdk-7u79-linux-x64.gzroot的桌面,解压到/usr,将解压出的目录jdk1.7.0_79及其子目录和文件的属主以及用户组改为hadoop

# tar zxf  jdk-7u79-linux-x64.gz -C /usr

# chown -hR hadoop /usr/jdk1.7.0_79

# chgrp -hR hadoop /usr/jdk1.7.0_79

配置JAVA_HOME环境变量

用户hadoop登录客户机后,在/home/hadoop/ .bashrc末尾添加

# JAVA Eniveronment

export JAVA_HOME=/usr/jdk1.7.0_79

exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar

export PATH=$JAVA_HOME/bin:$PATH

使环境变量立即生效

$source /home/hadoop/.bashrc

测试jdk是否安装成功

$java –version

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixedmode)

出现以上信息就表示安装成功了。

还可以测试一个Helloworld.java程序的成功编译与运行。

F,安装Hadoop

root登录客户机后从共享文件夹复制宿主机下载的hadoop-x.x.x.tar.gzroot的桌面。然后解压hadoop-x.x.x.tar.gz;解压后会得到目录名称为hadoop-x.x.x的目录,将该目录(包括其子目录和文件)的所有者属性以及组属性改为hadoop(用chown  –hRchgrp  -hR命令)。最后,复制到/usr中。

# tar  -zxvf hadoop-2.7.2.tar.gz

# cp  -r  hadoop-2.7.2  /usr

# chown  -hR  hadoop /usr/hadoop-2.7.2

# chgrp  -hR  hadoop /usr/hadoop-2.7.2

 

G,Hadoop群集的3种使用模式

1.       本机独立模式(Local (Standalone)Mode);

2.       伪分布模式(Pseudo-Distributed Mode);

3.       全分布模式(Fully-Distributed Mode)。

一, 本机孤岛模式(Local (Standalone) Mode)

这是Hadoop的默认模式,Hadoop作为单个java进程运行。这种模式方便调试程序。在/usr/hadoop-x.x.x内建立目录input;将hadoop-x.x.x的conf目录内的全部后缀名为xml的文件复制到input目录内,表示被分析的数据来源;然后用hadoop找出并显示与给定的正则表达式匹配的项。输出结果放置在output目录内。

注意,每次运行前,如果目录output存在,则用删除它。(命令: rm  -r output)。

1, 对于Hadoop-1.2.1

$ cd  /usr/hadoop-1.2.1

$ mkdir input

$ cp conf/*.xml input 

$ bin/hadoop jarhadoop-examples-*.jar grep input output  'dfs[a-z.]+' 

$ cat output/*

结果: 1         dfsadmin

 

2,对于Hadoop-2.7.2

$mkdir input

$ cp etc/hadoop/*.xmlinput

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jargrep input output 'dfs[a-z.]+'

  $ cat output/*

结果:  1         dfsadmin

 

二,伪分布模式(Pseudo-Distributed Mode)

Hadoop能够以伪分布式在单节点上运行,每个Hadoop新进程在单独的java进程内运行。这可分为两种运行方式:本地运行和在YARN上运行。

1,配置

将/usr/hadoop-2.7.2/etc/hadoop内的部分文件更改为如下所示:

1)core-site.xml:

<configuration>

    <property>

        <name>fs.defaultFS</name>

       <value>hdfs://localhost:9000</value>

   </property>

</configuration>

2)hdfs-site.xml:

<configuration>

    <property>

       <name>dfs.replication</name>

        <value>1</value>

   </property>

</configuration>

3)检查$ ssh  localhost无需密码

2,本地运行MapReduce作业

接下来的指令是为了在本地运行一个MapRerduce作业。如果想在YARN上执行一个作业,参见“YARN on Single Node”。

1)格式化文件系统:

$cd  /usr/hadoop-2.7.2

                $bin/hdfs  namenode –format

这一步只需做一次。

。。。省略某些输出。。。

2)启动NameNode进程和DataNode进程:

$ sbin/start-dfs.sh

注意;

Hadoop-2.7.2不推荐使用start-all.sh

此时这两个进程没有被设置为随客户机启动而自动启动。

结果:

3)查看全部java进程:

4)浏览NameNode的Web接口:

http://localhost:50070/

 

5)建立用于执行MapReduce作业的HDFS目录

$ bin/hdfs dfs  -mkdir  /user

$ bin/hdfs dfs  -mkdir  /user/hadoop

命令中的红色hadoop是一个用户名

6)将本地文件上传到HDFS的目录input中

本地文件:/usr/hadoop-2.7.2/etc/hadoop内的全部文件。

$ bin/hdfs dfs  -put  etc/hadoop input

7)运行示例

$ bin/hadoop  jar  share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input  output  'dfs[a-z.]+'

8)将output从这个分布式系统复制到本地后查看

$ bin/hdfs  dfs  -get output  output

$ cat  output/*

结果如图所示:

7)或者在分布式系统上看output的内容

  $bin/hdfs  dfs  -cat  output/*

结果如图所示:

9)停止Hadoop

当完成了全部任务后,可以关闭进程。

$ sbin/stop-dfs.sh

结果如图所示:

 

3,在YARN上运行

只需另外设置几个参数和运行ResourceManager进程与NodeManager进程即可。

假定已经完成了这些命令:

1)格式化文件系统:

$cd  /usr/hadoop-2.7.2

                $bin/hdfs  namenode  –format

2)启动NameNode进程和DataNode进程:

$ sbin/start-dfs.sh

3)配置:

将/usr/hadoop-2.7.2/etc/hadoop内的部分文件更改为如下所示:

mapred-site.xml:

<configuration>

    <property>

       <name>mapreduce.framework.name</name>

       <value>yarn</value>

   </property>

</configuration>

yarn-site.xml:

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

4)启动ResourceManager和NodeManager:

运行sbin/start-yarn.sh

5)浏览ResourceManager的Web接口:

http://localhost:8088/

6)Run a MapReduce job

运行MapReduce作业。

 

7)Stop the daemons with:

  $ sbin/stop-yarn.sh

 

 

三,完全分布模式

完全分布模式部分:待续。

 

 

 

 

X,问题与答案

1,无法挂载符合USB2.0或3.0标准的U盘的解决。

只支持USB1.1,而且无法挂载符合USB3.0标准的U盘。

办法:根据VirtualBox安装目录内的VirtualBox.chm的“8.36. VBoxManageextpack”,执行如图所示的命令:

在客户机的“设置”,“USB设备”内可以选择“USB3.0(xHCI)控制器”了。然后启动客户机,在宿主机上插入非NTFS格式的优盘,右击客户机优盘插头图标,选择优盘,该优盘会被自动挂载,如图所示:

2,经过实验得知,如果是在/home/hadoop/.bash_profile末尾添加下列代码,则hadoop2.7.2通过“sbin/start-dfs.sh”启动节点时,会出现找不到JAVA_HOME错误。为什么?

 

 

Y,引用

[1] http://hadoop.apache.org/docs/current/hadoop-project-dist/

[2] http://hadoop.apache.org/docs/current/hadoop-project-dist/

hadoop-common/SingleCluster.html

 

 

 

0 0