1.准备好Linux镜像,VMware或者VisualBox,然后在虚拟机上面安装Linux系统,保存好用户名和密码。
2.配置虚拟机过程中,可以把内存设置为1GB,硬盘8GB,网络设置为NAT,开启共享等等。
3.安装Linux镜像。
4.解决Linux下中文输入的问题。具体步骤如下:
(1) 切换到Root用户,或者使用Terminal 键入命令 su 输入root密码。
(2) 键入yum install "@Chinese Support"。
(3) 等待完成之后键入exit退出Terminal。
(4) 回到桌面,进入System->preferences->input method(如果没有,先注销一下)。
(5) 进入,选择上面的USB IBUS(recommended),点击Input Method Preferences按钮,弹出 IBUS Preferences对话框,选择Input Method选项卡,在下拉菜单里面选择Chinese,并点击Add按钮即可。
(6) 可以在General选项卡中设置启动栏的提示,切换快捷键等等。
(7) 再次注销后,就可以使用输入法了。
5.按照步骤,首先为用户配置root权限。具体方法如下:
方法一:
(1) 用Root登陆,或者使用Terminal 键入命令 su 输入root密码。
(2) 用vi命令打开/etc/sudoers文件,然后找到如下一行:
##Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
将上述代码修改为:
##Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
(3) 修改用户,使其输入root组(wheel)即可。命令如下:
[root@localhost ~] # usermod -g root xxxx(用户名)
方法二:
(1) 用Root登陆,或者使用Terminal 键入命令 su 输入root密码。
(2) 用vi命令打开/etc/sudoers文件,然后找到如下一行:
##Allows root to run any commands anywhere
root ALL=(ALL) ALL
将上述代码修改为:
##Allows people in group wheel to run all commands root ALL=(ALL) ALL xxx(用户名) ALL=(ALL) ALL
6.修改机器名(在修改用户root权限的前提下)。命令如下:
(1) 使用Terminal 键入命令 su 输入root密码。
(2) 在Terminal 下键入 vi /etc/sysconfig/network,进入VI修改模式,显示为:
NETWORKING=yes
HOSTNAME=localhost.localdomain
修改为:
NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=XXX(主机名)
(3) 重新启动生效,在Terminal下能看到主机名已经改掉。
7.开启SSH服务,步骤如下:
(1) 打开Terminal,键入命令 su ,输入root密码。
(2) 首先检查是否已经安装了openssh-server,命令如下:
rpm -qa |grep ssh
若没有安装,则键入命令,等待完成:
yum install openssh-server
(3) 安装完成后会在/etc/init.d目录下增加一个名为sshd的服务,可以设置sshd服务开机自动启动,命令如下:
chkconfig sshd on
也可以使用 chkconfig sshd off 来关闭自动启动服务。
另外,可以使用chkconfig --add sshd 来添加服务,使用 chkconfig --list 来列出所有自启动服务,使用 chkconfig --list sshd 来查看某一个服务是否自启动(0~6均为off代表不会自启动)。
(4) 键入 chkconfig --list sshd 检查SSHD是否在本运行级别下设置为开机启动,如果没有设置为自动启动,则键入 chkconfig --level 2345 sshd on 设置自动启动。然后键入 service sshd restart 重启服务,键入 netstat -antp |grep sshd 确认22端口是否已经启动,键入 iptables -nL 看看是否放行了22端口,如果没有,则在防火墙设置中设置SSH服务放行。
(5) 配置SSH免密码模式:
进入root路径下,运行 ssh-keygen -t rsa 命令,生成SSH密匙对(公钥和私钥,RSA算法)。
系统会询问你要存放在什么地址下,回车默认地址。
如果地址已经存在,则会提示你是否Overwrite。
如果地址不存在,系统会提示你输入私钥的密语,输入并回车即可(输入过程是看不见提示的)。
输入 cd .ssh 以及 ls 命令,可以查看.ssh路径下生成的私钥,其中有 id_rsa(私钥) 和 id_rsa.pub(公钥) 两个文件。输入 cp id_rsa.pub authorized_keys 来复制出一份公钥,并以authorized_keys命名,以便以后调用。
8.下载安装JDK 1.6(链接:http://pan.baidu.com/s/1hqvfGBq),使用Terminal 来解压安装 JDK,命令如下:
/home/hadoop/Desktop/Hadoop/jdk-6u24-linux-i586.bin
安装完成后,执行编辑profile文件,代码如下:
vi /etc/profile
在umas k022前,添加一下语句,配置环境变量:
export JAVA_HOME=/home/hadoop/jdk1.6.0_24(具体安装路径和JDK版本可能都不同) export JAVA_BIN=/home/hadoop/jdk1.6.0_24/bin export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH
最后使用 . /etc/profile将修改的文件立即生效(注意.与路径之间有空格)。
可以键入 java -version 命令来判断环境配置是否正确,若成功出现版本号等信息,表明JDK环境配置成功。
9.Hadoop的安装:
(1) 下载Hadoop,推荐Hadoop-0.20.2.tar.gz,因为很多书上都是这个版本,也可以到Apache官网上下载最新的版本。
链接:http://pan.baidu.com/s/1i3uxGt3。
(2) 解压Hadoop安装包,命令为:
tar xzvf /root/hadoop-0.20.2(需要Root权限)
再把Hadoop的安装路径添加到/etc/profile中:
vi /etc/profile
export HADOOP_HOME=/root/hadoop-0.20.2
export PATH=$HADOOP_HOME/bin:$PATH
(3) 修改Hadoop配置文件:
1.hadoop_env.sh配置文件(conf目录下,各个版本都有不同):
# The java implementation to use. Required.
# export JAVA_HOME=....(将#打开,并修改JAVA_HOME环境变量的路径)
2.core-site.xml配置文件(conf目录下):
<configuration> <property> <name>fs.default.name</name>(指定NameNode的IP地址和端口) <value>hdfs://localhost:9000</value>(若是完全分布式的模式,则要将此处改为真实NameNode的IP) </property> </configuration>
3.hdfs-site.xml配置文件(conf目录下):
<configuration> <property> <name>dfs.data.dir</name>(指出DataNode存放数据的路径) <value>/root/hadoop-0.20.2/data</value> </property> <property> <name>dfs.replication</name>(数据块复制的份数,副本数) <value>1</value>(伪分布式只有一个节点,所以是1) </property> </configuration>
4.mapred-site.xml配置文件(conf目录下):
<configuration> <property> <name>mapred.job.tracker</name>(配置作业机的地址)
<value>localhost:9001</value>(若是完全分布式,则此处应该为真实的Tracker的IP) </property> <configuration>
10.进入Hadoop目录下,格式化NameNode,然后启动Hadoop服务,可以用jps命令来查看各个Hadoop服务是否启动。
再次开机启动hadoop时,就不需要格式化NameNode了,如果发现有一些进程没有启动,则可以进入http://localhost:50070,进入NameNode log下,查看相应进程的日志,可以看到熟悉的JAVA异常,不同情况有不同的解决方法,具体可以百度。
我遇到的情况是UnknownHostException,发现是/etc/hosts内没有添加用户名对应的IP地址,导致找不到Host。
解决方案是在/etc/hosts文件中添加相应的主机名。
如果出现NameNode 的namespaceID 与DataNode 的namespaceID 不同而导致的IOException,具体如下:
java.io.IOException: Incompatible namespaceIDs in /home/iic/hadoop-0.20.2/hdfs-data: namenode namespaceID = 1444851414; datanode namespaceID = 620054427
解决方案是将对应文件的namespaceID修改成一样的就可以了。
成功启动后的效果如图:
附:完全分布式环境搭建过程:
1.配置hosts文件,对集群里面的主机名进行解析,使彼此都能将主机名解析成为IP地址。在所有节点中都将/etc/hosts文件修改,使彼此之间都能把主机名解析为IP。如果集群规模比较大,也可以用DNS服务器来专门解析主机名。
2.建立hadoop运行账号,不能使用root账号,否则可能会有安全隐患。
3.配置SSH免密码连入,注意:要用上一步新建的账号登陆,并进入主目录下(/home/用户名),每个节点做相同的操作。
将各个节点的authorized_keys的内容互相拷贝,加入到对方的authorized_keys文件中,这样就可以免去密码连接了。
4.下载并解压hadoop安装包。
5.配置NameNode,修改site文件(同伪分布式,注意:修改localhost,变为主机名,以及副本数)。
6.配置hadoop-env.sh(同伪分布式)。
7.配置masters和slaves文件。
8.向各节点复制hadoop,如果SSH免密码配置未完成,则scp命令会询问用户名和密码,注意:先配置好再复制。
9.格式化NameNode(同伪分布式),要保证先进入hadoop-0.20.2目录下。
10.启动hadoop。
11.用jps检验各后台进程是否成功启动(jps指的是观看与JAVA有关的进程的信息),总共5个进程。
主服务器:
从服务器: