hadoop集群搭建

来源:互联网 发布:上海行知实验学校 编辑:程序博客网 时间:2024/06/07 02:15

系统版本:

master: Ubuntu 14.04  salve1: Ubuntu 14.04

hadoop: hadoop 1.2.1

1.系统配置

修改host文件(目的:通过各机器的机器名访问各机IP,这里实际上建立起了机器名和ip的映射关系):

sudo gedit /etc/hosts
删掉127.0.0.1那一行,因为主节点与子节点通信时,会根据机器名找到ip,如果不删除这行,会优先匹配成127.0.0.1,进而找不到主机
在后面添加内容为:
172.22.144.115 master172.22.144.114 slave1172.22.144.116 slave2
左边是IP,右边是机器名,下面会修改每台机器的机器名

注意要把集群中所有机器的ip和机器名的映射都加进来

为(master)和子节点(slave)分别创建hadoop用户和用户组:

ubuntu下创建:

先创建hadoop用户组:

sudo addgroup hadoop
然后创建hadoop用户:
sudo adduser -ingroup hadoop hadoop
给hadoop用户添加权限,打开/etc/sudoers文件(目的:给hadoop用户sudo权限)
sudo gedit /etc/sudoers
按回车键后就会打开/etc/sudoers文件了,给hadoop用户赋予root用户同样的权限。
在root  ALL=(ALL:ALL)  ALL下添加hadoop  ALL=(ALL:ALL)  ALL,hadoop  ALL=(ALL:ALL) ALL
这样,就为系统创建了一个新的用户hadoop,建议每台机器都新建一个叫hadoop的用户,便于管理

为本机(master)和子节点(slave)安装JDK环境:

配置软件源(目的:内网可以安装JDK)

ubuntu下一条命令即可:

sudo apt-get install openjdk-6-jre

但是安装好openjdk后有点问题,建议自己下载jdk安装,解压到自定义安装目录后,输入

sudo gedit /etc/environment
打开文件后,在后面加上jdk的bin目录路径,如图,/usr/lib/jvm/jdk1.8.0是jdk的安装路径
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8.0/bin"
保存后退出,输入
sudo source /etc/environment
即可让修改生效,而无需重启

修改 本机(master)和子节点(slave)机器名(目的:方便记忆,最好改成hosts文件对应名)

打开/etc/hostname文件;

sudo gedit /etc/hostname
添加在hosts文件里ip对应的主机名,重启生效

注意,以上所有步骤需要在所有机器上配置

2.安装SSH无密码登陆环境(master&slaves):

主节点(master)和子节点(slave)安装ssh服务:

sudo apt-get install ssh openssh-server
建立ssh无密码登录环境:

做这一步之前首先建议所有的机子全部转换为hadoop用户名,以防出现权限问题的干扰。

切换的命令为:

su hadoop
创建ssh-key,这里我们采用rsa方式;ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
ssh-keygen -t rsa -P ""
进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd ~/.sshcat id_rsa.pub >> authorized_keys
这里实际上涉及公钥和秘钥的问题,关于公钥和秘钥请自行百度

非常重要:

将master节点上的rsa.pub通过ssh传到子节点上(目的:公用公钥密钥)X代表第n个结点

scp ~/.ssh/id_rsa.pub hadoop@slaveX:~/.ssh/
进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的(master&slave);
cd ~/.sshcat id_rsa.pub >> authorized_keys
这里如果报权限的错,就先将文件传到子节点的home目录下,之后子节点在自行将id_rsa.pub追加到授权文件中,期间还要输入子节点的密码

完成上述操作后,在主节点上输入(X代表第n个节点)

ssh slaveX
如果不需要输入密码,说明ssh无密码环境配置成功

3.hadoop安装配置

假定hadoop安装目录为 /usr/local/

1.假设hadoop-x-x-x.tar.gz(代表某一版本的hadoop)在桌面,将它复制到安装目录 /usr/local/下

sudo cp hadoop-x-x-x.tar.gz /usr/local/

2. 解压

cd /usr/localsudo tar -zxf hadoop-x-x-x.tar.gz
3. 将解压出的文件夹改名为hadoop;
sudo mv hadoop-0.20.203.0 hadoop
4. 将该hadoop文件夹的属主用户设为hadoop(hadoop是我们之间为系统创建的用户,hadoop为用户名) 
sudo chown -R hadoop:hadoop hadoop
5. 打开hadoop/conf/hadoop-env.sh文件
sudo gedit hadoop/conf/hadoop-env.sh
6. 配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本机jdk的路径)
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0

7. 打开conf/core-site.xml文件

sudo gedit hadoop/conf/core-site.xml
编辑如下: 
<configuration><property><name>fs.default.name</name><value>hdfs://master:9000</value></property></configuration>

注意:master为主结点用户名字,即hosts里面的主节点机器名

8. 打开conf/mapred-site.xml文件

sudo gedit hadoop/conf/mapred-site.xml
编辑如下: 
<configuration><property><name>mapred.job.tracker</name><value>master:9001</value></property></configuration>

注意:master为主结点用户名字,即hosts里面的主节点机器名

9. 打开conf/hdfs-site.xml文件

sudo gedit hadoop/conf/hdfs-site.xml
编辑如下:
<configuration><property><name>dfs.name.dir</name><value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value></property><property><name>dfs.data.dir</name><value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value></property><property><name>dfs.replication</name><value>2</value></property></configuration>
10. 打开conf/masters文件,添加作为secondarynamenode的主机名,这里需填写 master 就行
sudo gedit hadoop/conf/masters

 11. 打开conf/slaves文件,添加作为slave的主机名,一行一个。

sudo gedit hadoop/conf/slaves

这里填成下列的内容 :

slave1slave2
12.将hadoop复制到子节点上

scp -r /usr/local/hadoop/ hadoop@slaveX:/usr/local/
注意冒号后没有空格

注:这里如果不能复制,就先将文件复制到/home/hadoop下面,即为:

scp -r /usr/local/hadoop hadoop@slaveX:/home/hadoop
再在slave机器上将其移到相同的路径下面/usr/local .

并且要将所有节点的hadoop的目录的权限进行如下的修改:

sudo chown -R hadoop:hadoop hadoop

还有很重要的一点,子节点datanode机器要把复制过来的hadoop里面的data1,data2和logs删除掉!

配置完成

4.启动hadoop集群

第一次启动前,要格式化集群,进入hadoop安装目录

cd /usr/local/hadoop

格式化集群:

bin/hadoop namenode -format 

不格式化集群会报错:没找到namenode

启动全部服务直接一条命令:

bin/start-all.sh
查看自己的datanode是否启动.

jps

当jps不能正常使用的时候,按照本文配jdk的方式,在environment文件中添加jdk的bin路径即可

连接时可以在namenode(主节点)上查看连接情况:

bin/hadoop dfsadmin -report
也可以直接进入网址:

master:50070

切记,上面的大多数操作请使用hadoop用户,要不然中间会出许多关于权限的问题。

5.运行wordcount

Wordcount是hadoop自带的示例程序,作为入门使用

进入hadoop安装目录的bin目录下,创建测试txt文件(在hadoop集群中创建目录)

查看目录命令

hadoop dfs -ls /目录
创建目录:

hadoop dfs -mkdir /input
先在本地创建两个txt文件 file01、file02(假定在/home/hadoop目录下)

将两个文件上传至hdfs文件系统

bin/hdfs dfs –put /home/Hadoop/file01 /input/bin/hdfs dfs –put /home/Hadoop/file02 /input/

子节点离开安全模式,否则可能会导致无法读取input的文件:

bin/hdfs dfsadmin –safemode leave

运行Wordcount:

bin/hadoop jar /xxx/xxx.jar wordcount /input/ /output

(这里的/XXX/代表/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-1.2.1.jar)

jar文件是hadoop自带的,可以在hadoop目录中找到,如果找不到也可以在网上下一个;input是输入目录,output是输出目录

注意在运行Wordcount之前,输出目录不能存在,hadoop会自行建立

查看结果:

bin/hadoop dfs -cat /tmp/output/part-r-00000
重复运行需要删除output

bin/hadoop dfs -rmr /tmp/output
以上命令都属于hadoop,需要进入hadoop目录才能运行

 

 

0 0
原创粉丝点击